Compartilhar via


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.

Cloud Native .NET apps for Azure eBook cover thumbnail.

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:

    Cloud-native foundational pillars

    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.