Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Dica
Esse conteúdo é um trecho do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Ao longo deste capítulo, exploramos os desafios da comunicação de microsserviço. 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 entre serviços, melhor. No entanto, a evasã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ções HTTP síncronas 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 com uso intensivo de tempo. 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ápido desenvolvimento chamada Service Mesh. Uma malha de serviço é uma camada de infraestrutura configurável com funcionalidades internas para lidar com comunicação de serviço a serviço, resiliência e muitas questões transversais. Ele move a responsabilidade por essas preocupações para fora dos microsserviços e para a camada de malha de serviço. A comunicação é abstraída de seus microsserviços.
Um componente chave de uma malha de serviço é um proxy. Em um aplicativo nativo de nuvem, uma instância de um proxy normalmente é colocada com cada microsserviço. Enquanto eles são executados em processos separados, os dois são intimamente vinculados e compartilham o mesmo ciclo de vida. Esse 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 interceptadas por um proxy que é executado junto com cada microsserviço. Cada proxy pode ser configurado com regras de tráfego específicas para o microsserviço. Ele compreende as mensagens e pode direcioná-las através de seus serviços e para o mundo externo.
Juntamente com o gerenciamento da comunicação serviço a serviço, a Malha de Serviço fornece suporte para descoberta de serviço e balanceamento de carga.
Uma vez configurada, uma malha de serviço é altamente funcional. A malha recupera um pool de instâncias correspondente de um ponto de extremidade de descoberta de serviços. 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 fatores diferentes, incluindo a latência observada para solicitações recentes.
Uma malha de serviço gerencia as preocupações de tráfego, comunicação e rede no nível do aplicativo. Ele entende mensagens e solicitações. Uma malha de serviço normalmente se integra com um orquestrador de contêineres. O Kubernetes dá suporte a uma arquitetura extensível na qual uma malha de serviço pode ser adicionada.
No capítulo 6, aprofundamos as tecnologias da Malha de Serviço, incluindo uma discussão sobre sua arquitetura e implementações de software livre disponíveis.
Resumo
Neste capítulo, discutimos padrões de comunicação nativos de nuvem. Começamos examinando como os clientes front-end se comunicam com microsserviços de back-end. Ao longo do caminho, falamos sobre plataformas de Gateway de API e comunicação em tempo real. Em seguida, analisamos como os microsserviços se comunicam com outros serviços de back-end. Examinamos 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. Por fim, introduzimos uma tecnologia nova e em rápida evolução intitulada Malha de Serviço que pode simplificar a comunicação de microsserviços.
A ênfase especial foi nos serviços gerenciados do Azure que podem ajudar a implementar a comunicação em sistemas nativos de nuvem:
- Gateway de Aplicações do Azure
- Gerenciamento de API do Azure
- Serviço Azure SignalR
- Filas de Armazenamento do Azure
- Barramento de Serviço do Azure
- Grid de Eventos do Azure
- Hub de Eventos do Azure
Avançaremos para dados distribuídos em sistemas nativos de nuvem e os benefícios e desafios que ele apresenta.