Introdução aos 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.
Outro dia, no escritório, trabalhando no "próxima grande ideia".
Seu telefone celular toca. É o seu recrutador amigável– aquele que chama diariamente com novas oportunidades interessantes.
Mas, desta vez, é diferente: Start-up, equidade e muitos fundos.
A menção da nuvem, dos microsserviços e da tecnologia de ponta leva você mais além.
Avance algumas semanas e agora você é um novo funcionário em uma sessão de design que arquiteta um importante aplicativo de comércio eletrônico. Você vai competir com os principais sites de comércio eletrônico.
Como você o criará?
Se você seguir as diretrizes dos últimos 15 anos, provavelmente criará o sistema mostrado na Figura 1.1.
Figura 1-1. Design monolítico tradicional
Você cria um aplicativo de núcleo grande que contém toda a sua lógica de domínio. Ele inclui módulos como Identidade, Catálogo, Pedidos e muito mais. Eles se comunicam diretamente entre si em um único processo de servidor. Os módulos compartilham um banco de dados relacional grande. O núcleo expõe a funcionalidade por meio de uma interface HTML e um aplicativo móvel.
Parabéns! Você acabou de criar um aplicativo monolítico.
Nem tudo é ruim. Os monolíticos oferecem algumas vantagens distintas. Por exemplo, eles são simples para...
- compilar
- test
- deploy
- solucionar problemas
- dimensionar verticalmente
Muitos aplicativos bem-sucedidos que existem hoje foram criados como monolíticos. O aplicativo é um sucesso e continua evoluindo, iteração após a iteração, adicionando mais funcionalidade.
Em algum momento, no entanto, você começa a se sentir mal. Você está perdendo o controle do aplicativo. Com o passar do tempo, o sentimento se torna mais intenso e você eventualmente entra em um estado conhecido como Fear Cycle
:
- O aplicativo ficou tão complicado que nenhuma pessoa o compreende.
- Você teme fazer alterações – cada alteração tem efeitos colaterais não intencionais e custosos.
- Novos recursos/correções tornam-se complicados, demorados e caros de serem implementados.
- Cada versão se torna a menor possível e requer uma implantação completa de todo o aplicativo.
- Um componente instável pode falhar em todo o sistema.
- Novas tecnologias e estruturas não são uma opção.
- É difícil implementar metodologias de entrega ágil.
- A erosão arquitetônica se define à medida que a base de código se deteriora com "correções rápidas" intermináveis.
- Eventualmente, os consultores vêm e dizem para você o reescrever.
Você se reconhece nessa descrição?
Muitas organizações resolveram esse ciclo de medo monolítico adotando uma abordagem nativa de nuvem para a criação de sistemas. A Figura 1-2 mostra o mesmo sistema criado com a aplicação de técnicas e práticas nativas de nuvem.
Figura 1-2. Design nativo de nuvem
Observe como o aplicativo é decomposto em um conjunto de microsserviços pequenos isolados. Cada serviço é autocontido e encapsula seu próprio código, dados e dependências. Cada um é implantado em um contêiner de software e gerenciado por um orquestrador de contêiner. Em vez de um banco de dados relacional grande, cada serviço possui seu próprio armazenamento de dados, o tipo que varia de acordo com as necessidades de dados. Observe como alguns serviços dependem de um banco de dados relacional, mas outros em bancos de dados NoSQL. Um serviço armazena seu estado em um cache distribuído. Observe como todo o tráfego é roteado por meio de um serviço de Gateway de API responsável por rotear o tráfego para os principais serviços de back-end e impor muitas preocupações abrangentes. O mais importante é que o aplicativo aproveita ao máximo os recursos de escalabilidade, disponibilidade e resiliência encontrados em plataformas de nuvem modernas.
Computação nativa de nuvem
Humm... Acabamos de usar o termo Nativo da Nuvem. Seu primeiro pensamento pode ser: "O que isso significa, exatamente?" Outra palavra-chave da indústria inventada por fornecedores de software para comercializar mais coisas?"
Felizmente, ele é muito diferente e, esperamos que este livro ajude você a se convencer.
Em pouco tempo, a nuvem nativa se tornou uma tendência no setor de software. É uma nova maneira de criar sistemas grandes e complexos. A abordagem aproveita ao máximo as práticas modernas de desenvolvimento de software, tecnologias e infraestrutura de nuvem. A nuvem nativa altera a maneira como você projeta, implementa, implanta e operacionaliza sistemas.
Ao contrário do hype contínuo que impulsiona nosso setor, a nuvem nativa é real. Considere a CNCF (Cloud Native Computing Foundation), um consórcio de mais de 400 corporações importantes. Seu acervo é tornar a computação nativa de nuvem onipresente entre a tecnologia e as pilhas de nuvem. Como um dos grupos de código-fonte aberto mais influentes, ele hospeda muitos dos projetos de código-fonte aberto de crescimento mais rápido no GitHub. Esses projetos incluem Kubernetes, Prometheus, Helm, Envoy e gRPC.
O CNCF promove um ecossistema de software livre e neutralidade do fornecedor. Seguindo essa linha, este livro apresenta princípios, padrões e práticas recomendadas nativos de nuvem que são agnósticos de tecnologia. Ao mesmo tempo, discutiremos os serviços e a infraestrutura disponíveis na nuvem Microsoft Azure para construir sistemas nativos de nuvem.
Então, o que é exatamente Nativo de Nuvem? Fique aqui, relaxe e deixe-nos ajudá-lo a explorar esse novo mundo.