Infraestrutura de comunicação Service Mesh
Gorjeta
Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
Ao longo deste capítulo, exploramos os desafios da comunicação de microsserviços. Dissemos que as equipes de desenvolvimento precisam ser sensíveis à forma como os serviços de back-end se comunicam entre si. Idealmente, quanto menos comunicação inter-serviços, melhor. No entanto, a prevenção nem sempre é possível, pois os serviços de back-end geralmente dependem uns dos outros para concluir as operações.
Exploramos diferentes abordagens para implementar comunicação HTTP síncrona e mensagens assíncronas. Em cada um dos casos, o desenvolvedor é sobrecarregado com a implementação do código de comunicação. O código de comunicação é complexo e demorado. Decisões incorretas podem levar a problemas de desempenho significativos.
Uma abordagem mais moderna para a comunicação de microsserviços gira em torno de uma tecnologia nova e em rápida evolução intitulada Service Mesh. Uma malha de serviço é uma camada de infraestrutura configurável com recursos internos para lidar com comunicação serviço-a-serviço, resiliência e muitas preocupações transversais. Ele transfere a responsabilidade por essas preocupações dos microsserviços para a camada de malha de serviço. A comunicação é abstraída dos seus microsserviços.
Um componente-chave de uma malha de serviço é um proxy. Em um aplicativo nativo da nuvem, uma instância de um proxy normalmente é colocalizada com cada microsserviço. Embora sejam executados em processos separados, os dois estão intimamente ligados e compartilham o mesmo ciclo de vida. Este padrão, conhecido como padrão Sidecar, é mostrado na Figura 4-24.
Figura 4-24. Malha de serviço com um carro lateral
Observe na figura anterior como as mensagens são intercetadas por um proxy que é executado ao lado de cada microsserviço. Cada proxy pode ser configurado com regras de tráfego específicas para o microsserviço. Compreende as mensagens e pode encaminhá-las através dos seus serviços e do mundo exterior.
Além de gerenciar a comunicação serviço-a-serviço, o Service Mesh fornece suporte para descoberta de serviços e balanceamento de carga.
Uma vez configurada, uma malha de serviço é altamente funcional. A malha recupera um pool correspondente de instâncias de um ponto de extremidade de descoberta de serviço. Ele envia uma solicitação para uma instância de serviço específica, registrando a latência e o tipo de resposta do resultado. Ele escolhe a instância com maior probabilidade de retornar uma resposta rápida com base em diferentes fatores, incluindo a latência observada para solicitações recentes.
Uma malha de serviço gerencia o tráfego, a comunicação e as preocupações de rede no nível do aplicativo. Compreende mensagens e pedidos. Uma malha de serviço normalmente se integra a um orquestrador de contêineres. O Kubernetes suporta uma arquitetura extensível na qual uma malha de serviço pode ser adicionada.
No capítulo 6, nos aprofundamos nas tecnologias do Service Mesh, incluindo uma discussão sobre sua arquitetura e implementações de código aberto disponíveis.
Resumo
Neste capítulo, discutimos os padrões de comunicação nativos da nuvem. Começamos examinando como os clientes front-end se comunicam com os microsserviços back-end. Ao longo do caminho, falamos sobre plataformas API Gateway e comunicação em tempo real. Em seguida, analisamos como os microsserviços se comunicam com outros serviços de back-end. Analisamos a comunicação HTTP síncrona e as mensagens assíncronas entre serviços. Abordamos o gRPC, uma tecnologia futura no mundo nativo da nuvem. Finalmente, introduzimos uma tecnologia nova e em rápida evolução intitulada Service Mesh que pode agilizar a comunicação de microsserviços.
Ênfase especial foi nos serviços gerenciados do Azure que podem ajudar a implementar a comunicação em sistemas nativos da nuvem:
- Gateway de Aplicação do Azure
- Gestão de API do Azure
- Serviço Azure SignalR
- Filas de Armazenamento do Azure
- Azure Service Bus
- Azure Event Grid
- Hub de Eventos do Azure
Em seguida, passamos para dados distribuídos em sistemas nativos da nuvem e os benefícios e desafios que eles apresentam.