Header Ads

O que é uma malha de serviço? Por que eles são importantes?

Quanrong Huang / Shutterstock. com

Uma malha de serviço é uma camada de infraestrutura que facilita a comunicação entre os componentes do aplicativo. As malhas fornecem funcionalidade, incluindo descoberta de serviço, balanceamento de carga e capacidade de observação.

As malhas de serviço geralmente são encontradas em sistemas distribuídos compostos de microsserviços. A malha fornece uma maneira para diferentes serviços trocarem dados. Ele lida apenas com o tráfego interno, transferindo para um gateway de API ou nó de extremidade para servir aos usuários. Malhas populares incluem Linkerd e Istio.

O que há dentro da malha?

O conceito básico de malha de serviço é bastante direto. A camada encapsula proxies de rede que roteiam o tráfego para serviços individuais. Uma camada de controle gerencia as chamadas de rede entre os serviços e orquestra o uso dos proxies.

O propósito fundamental da malha é tornar a comunicação dos serviços mais fácil e confiável. Vamos pegar um par de serviços simples: uma API e um sistema de autenticação separado. A API precisará interagir com o serviço de autenticação ao receber solicitações.

Com uma malha de serviço, você obtém comunicação confiável entre os serviços usando identificadores conhecidos. Sua API pode enviar chamadas de rede para o nome de host do serviço de autenticação e ter certeza de que &’ ainda será resolvido corretamente, mesmo se o serviço de autenticação for movido para um local de datacenter diferente. A malha de serviço atua para rotear solicitações de forma transparente para o serviço apropriado.

Publicidade

Usar uma malha de serviço torna mais fácil mover os serviços. A lógica de comunicação de rede embutida pode rapidamente se tornar restritiva. Uma malha oferece mais flexibilidade para distribuir suas cargas de trabalho no futuro.

Como as malhas de serviço são implementadas?

A maioria das malhas de serviço modernas é formada por dois componentes: um plano de controle e um plano de dados. A funcionalidade principal pertence ao plano de dados, que se preocupa com os dados que fluem pelo sistema.

Cada solicitação para a malha será processada pelo plano de dados. Ele descobrirá o serviço adequado a ser usado, executará quaisquer ações de registro e permitirá comportamentos condicionais para filtrar e redirecionar o tráfego.

Os serviços geralmente fazem parte do seu aplicativo, portanto, podem incluir lógica de roteamento. O plano de dados inspeciona as regras de configuração para determinar o endpoint final com base em cabeçalhos HTTP, parâmetros de solicitação e outros valores da solicitação.

Enquanto o plano de dados zumbe com atividade, o plano de controle é relativamente mais simples. Ele supervisiona os proxies no plano de dados e fornece uma API para que você possa interagir com eles.

Este diagrama do projeto Istio ilustra como os componentes se encaixam. Cada serviço obtém seu próprio proxy. O tráfego de entrada flui por meio dos proxies. Eles podem se comunicar com o plano de controle para descobrir outros serviços. Os proxies são comumente chamados de “ sidecars ” já que são executados junto com o serviço que representam.

Outras funções de malha de serviço

As malhas de serviço geralmente fornecem funcionalidade adicional além da descoberta de serviço básico. Normalmente, você encontrará balanceamento de carga, autenticação de nível de solicitação e suporte para criptografia de dados. O tráfego criptografado pode passar pela malha, mas é entregue aos seus serviços de forma descriptografada.

Publicidade

Sua malha geralmente oferece proteção contra interrupções temporárias da rede. Novas tentativas automáticas, failovers e disjuntores tornam a comunicação entre os serviços mais resiliente. É menos provável que o usuário final veja um estado de erro grave. Esses recursos importantes seriam difíceis e caros de implementar manualmente.

Da mesma forma, as malhas de serviço incorporam otimizações de desempenho que ajudam a minimizar sobrecargas. A malha pode reter conexões com serviços para reutilização posterior, reduzindo a latência na próxima solicitação.

Camadas de malha também fornecem proteções de segurança. Você pode implementar políticas de controle de acesso em nível de malha que rejeitam o tráfego antes que ele alcance seus serviços. Se você quiser um limitador de taxa de API global, torná-lo parte da configuração de malha o aplicará a todos os seus serviços – presente e futuro.

E quanto às desvantagens?

O maior desafio em torno das malhas de serviço é a complexidade extra que elas trazem. Embora tenham como objetivo simplificar a rede de microsserviços, eles também apresentam uma curva de aprendizado própria.

Os desenvolvedores precisarão se familiarizar com outra camada de seus serviços existentes. Terminologias de malha, como proxies e sidecars, são adicionadas à já longa lista de recursos do Kubernetes mantidos pelas equipes de operações.

Publicidade

Embora as malhas adicionem seus próprios aprimoramentos de desempenho, algumas implantações podem notar uma redução geral na taxa de transferência da rede. A malha adiciona uma nova camada pela qual as solicitações precisam passar, afetando a eficiência geral. Isso normalmente é mais perceptível se você estocar sua malha com muitas regras de roteamento.

Quando você deve usar uma malha de serviço?

As malhas de serviço funcionam melhor quando você está totalmente comprometido com contêineres e microsserviços. Eles foram projetados para resolver os desafios de executar sistemas distribuídos em larga escala na produção. Implantações menores ainda podem se beneficiar de uma malha, mas também podem utilizar abordagens de rede mais simples, como Kubernetes &’ recursos de rede integrados.

As malhas são mais úteis quando você inicia novos serviços com frequência ou os distribui entre servidores. Uma malha permite que os desenvolvedores se concentrem na funcionalidade, em vez do tédio de conectar diferentes serviços juntos. Conforme você implanta uma frota de serviços em constante crescimento, você gastará mais tempo lidando com a comunicação serviço a serviço. Uma malha automatiza a maior parte dessa configuração para que você não precise se preocupar com a descoberta e o roteamento do serviço.

A abordagem ajuda seu sistema a se tornar mais observável também. Todas as solicitações fluem pela malha para que você possa implementar o registro e o rastreamento no nível da infraestrutura. Isso fornece um caminho mais simples para o diagnóstico e a resolução de problemas de roteamento. Sem uma malha, você pode ter dezenas de serviços, todos retransmitindo informações diretamente entre si. Isso torna difícil encontrar a origem de um problema.

As malhas de serviço mais populares são fáceis de configurar. O Istio e o Linkerd têm guias de primeiros passos bem documentados para ajudá-lo a implantar uma malha no cluster do Kubernetes. Vale a pena experimentar, mesmo se você não tiver certeza de que seu sistema ainda está na escala de malha. Ficar com a comunicação direta de serviço por muito tempo pode restringir sua capacidade de lançar novos serviços de maneira oportuna e confiável.

Nenhum comentário