Padrões de comunicação nativos de nuvem
Dica
Esse conteúdo é um trecho do livro eletrônico, para Projetar os Aplicativos .NET nativos de nuvem para o Azure, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.
Ao construir um sistema nativo de nuvem, a comunicação se torna uma decisão de design significativa. Como um aplicativo cliente de front-end se comunica com um microsserviço de back-end? Como os microsserviços de back-end se comunicam entre si? Quais são os princípios, padrões e melhores práticas a serem considerados ao implementar a comunicação em aplicativos nativos de nuvem?
Considerações de comunicação
Em um aplicativo monolítico, a comunicação é simples. Os módulos de código são executados juntos no mesmo espaço executável (processo) em um servidor. Essa abordagem pode ter vantagens de desempenho à medida que tudo é executado junto na memória compartilhada, mas resulta em um código fortemente acoplado que se torna difícil de manter, evoluir e escalar.
Os sistemas nativos de nuvem implementam uma arquitetura baseada em microsserviços com muitos microsserviços pequenos e independentes. Cada microsserviço é executado em um processo separado e normalmente é executado dentro de um contêiner implantado em um cluster.
Um cluster agrupa um pool de máquinas virtuais para formar um ambiente altamente disponível. Eles são gerenciados com uma ferramenta de orquestração, que é responsável por implantar e gerenciar os microsserviços em contêineres. A Figura 4-1 mostra um cluster do Kubernetes implantado na nuvem do Azure com os Serviços de Kubernetes do Azure totalmente gerenciados.
Figura 4-1. Um cluster do Kubernetes no Azure
Em todo o cluster, os microsserviços se comunicam entre si por meio de APIs e tecnologias de mensagens.
Embora forneçam muitos benefícios, os microsserviços não são gratuitos. Chamadas de método local em processo entre componentes agora são substituídas por chamadas de rede. Cada microsserviço deve se comunicar por meio de um protocolo de rede, o que adiciona complexidade ao seu sistema:
- Congestionamento de rede, latência e falhas transitórias são uma preocupação constante.
- A resiliência (ou seja, tentar novamente solicitações com falha) é essencial.
- Algumas chamadas devem ser idempotentes para manter o estado consistente.
- Cada microsserviço deve autenticar e autorizar chamadas.
- Cada mensagem deve ser serializada e desserializada, o que pode ser caro.
- A criptografia/descriptografia de mensagens torna-se importante.
O livro microsserviços do .NET: Arquitetura para Aplicativos .NET em Contêiner, disponível gratuitamente pela Microsoft, fornece uma cobertura detalhada dos padrões de comunicação para aplicativos de microsserviço. Neste capítulo, fornecemos uma visão geral de alto nível desses padrões, juntamente com as opções de implementação disponíveis na nuvem do Azure.
Neste capítulo, abordaremos primeiro a comunicação entre aplicativos do front-end e dos microsserviços de back-end. Em seguida, analisaremos como os microsserviços de back-end se comunicam entre si. Exploraremos a tecnologia de comunicação para cima e o gRPC. Por fim, vamos procurar padrões inovadores de comunicação usando a tecnologia de malha de serviço. Também analisaremos como a nuvem do Azure fornece diferentes tipos de serviços de backup para dar suporte à comunicação nativa de nuvem.