Resumo: como arquitetar aplicativos 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.
Em resumo, aqui estão as conclusões importantes deste guia:
O termo nativo de nuvem trata da criação de aplicativos modernos que adotam mudanças rápidas, grande escala e resiliência, em ambientes modernos e dinâmicos, como nuvens públicas, privadas e híbridas.
A CNCF (Cloud Native Computing Foundation) é um consórcio de código aberto influente com mais de 300 grandes empresas. Ele é responsável por impulsionar a adoção da computação nativa de nuvem em pilhas de nuvem e tecnologia.
As diretrizes do CNCF recomendam que os aplicativos nativos de nuvem adotem seis pilares importantes, conforme é mostrado na Figura 11-1:
Figura 11-1. Pilares básicos de aplicativos nativos de nuvem
Esses pilares de aplicativos nativos de nuvem incluem:
- A nuvem e seu modelo de serviço subjacente
- Princípios de design modernos
- Microsserviços
- Conteinerização e orquestração de contêineres
- Serviços de apoio baseados em nuvem, como bancos de dados e agente de mensagens
- Automação, incluindo infraestrutura como código e implantação de código
O Kubernetes é o ambiente de hospedagem escolhido para a maioria dos aplicativos nativos de nuvem. Serviços simples e menores às vezes são hospedados em plataformas sem servidor, como o Azure Functions. Entre vários recursos principais de automação, os dois tipos de ambiente fornecem dimensionamento automático para lidar com volumes flutuantes de carga de trabalho.
A comunicação do serviço é uma decisão de design significativa ao construir um aplicativo nativo de nuvem. Os aplicativos normalmente expõem um gateway de API para gerenciar a comunicação do cliente front-end. Em seguida, os microsserviços de back-back se esforçam para se comunicarem entre si implementando padrões de comunicação assíncrona, quando possível.
O gRPC é uma estrutura moderna e de alto desempenho que representa uma evolução do antigo protocolo RPC (chamada de procedimento remoto). Os aplicativos nativos de nuvem geralmente adotam o gRPC para simplificar o sistema de mensagens entre serviços de back-end. O gRPC usa HTTP/2 para o protocolo de transporte. Ele pode ser até 8x mais rápido do que a serialização JSON com tamanhos de mensagem 60% a 80% menores. O gRPC é um código aberto e gerenciado pelo CNCF (Cloud Native Computing Foundation).
Os dados distribuídos são um modelo geralmente implementado por aplicativos nativos de nuvem. Os aplicativos separam a funcionalidade de negócios em microsserviços pequenos e independentes. Cada microsserviço encapsula as próprias dependências, dados e estado. O modelo de banco de dados compartilhado clássico evoluiu para um dos vários bancos de dados menores, cada um se alinhando a um microsserviço. Quando a poeira abaixa, surge um design que expõe um modelo
database-per-microservice
.Os bancos de dados NoSQL são armazenamentos de dados não relacionais de alto desempenho. Eles se destacam pelas características de facilidade de uso, escalabilidade, resiliência e disponibilidade. Serviços de alto volume que exigem um tempo de resposta de microssegundos preferem os armazenamentos de dados NoSQL. A proliferação de tecnologias NoSQL para sistemas nativos de nuvem distribuídos não pode ser relatada com exagero.
O NewSQL é uma tecnologia de banco de dados emergente que combina a escalabilidade distribuída do NoSQL e as garantias ACID de um banco de dados relacional. Os bancos de dados NewSQL são destinados a sistemas de negócios que precisam processar grandes volumes de dados, entre ambientes distribuídos, com conformidade total transacional e de ACID. O CNCF (Cloud Native Computing Foundation) apresenta vários projetos de banco de dados NewSQL.
Resiliência é a capacidade do sistema de reagir à falha e ainda permanecer funcional. Os sistemas nativos de nuvem adotam a arquitetura distribuída quando as falhas são inevitáveis. Os aplicativos precisam ser construídos para responder corretamente à falha e retornar rapidamente a um estado totalmente funcional.
Malhas de serviço são uma camada de infraestrutura configurável com funcionalidades internas para lidar com a comunicação do serviço e outros desafios abrangentes. Elas desacoplam responsabilidades abrangentes do código de negócios. Essas responsabilidades passam para um proxy de serviço. Conhecido como
Sidecar pattern
, o proxy é implantado em um processo separado para fornecer isolamento do código de negócios.Observabilidade é uma consideração de design importante para aplicativos nativos de nuvem. À medida que os serviços são distribuídos em um cluster de nós, o registro em log centralizado, o monitoramento e os alertas se tornam obrigatórios. O Azure Monitor é uma coleção de ferramentas baseadas em nuvem projetadas para dar visibilidade sobre o estado do sistema.
Infraestrutura como código é uma prática amplamente aceita que automatiza o provisionamento de plataforma. A infraestrutura e as implantações são automatizadas, consistentes e repetíveis. Ferramentas como o Azure Resource Manager, o Terraform e a CLI do Azure permitem que você crie scripts da infraestrutura de nuvem necessária de modo declarativo.
A automação de código é um requisito para aplicativos nativos de nuvem. Os sistemas de CI/CD modernos ajudam a atender a esse princípio. Eles fornecem etapas separadas de build e implantação que ajudam a garantir um código consistente e de qualidade. A fase de build transforma o código em um artefato binário. A fase de lançamento pega o artefato binário, aplica a configuração de ambiente externo e implanta-a em um ambiente especificado. O Azure DevOps e o GitHub são ambientes de DevOps completos.