Introdução às aplicações nativas da nuvem
Gorjeta
Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
Outro dia, no escritório, trabalhando na "próxima grande coisa".
O seu telemóvel toca. É o seu recrutador amigável - aquele que liga diariamente com novas oportunidades empolgantes.
Mas desta vez é diferente: start-up, capital próprio e muito financiamento.
A menção à nuvem, aos microsserviços e à tecnologia de ponta leva você para o limite.
Avance algumas semanas e agora você é um novo funcionário em uma sessão de design arquitetando um grande aplicativo de comércio eletrônico. Você vai competir com os principais sites de comércio eletrônico.
Como você vai construí-lo?
Se você seguir as orientações dos últimos 15 anos, provavelmente criará o sistema mostrado na Figura 1.1.
Figura 1-1. Design monolítico tradicional
Você constrói um grande aplicativo principal contendo toda a lógica do seu domínio. Ele inclui módulos como Identidade, Catálogo, Pedidos e muito mais. Eles se comunicam diretamente uns com os outros dentro de um único processo de servidor. Os módulos compartilham um grande banco de dados relacional. 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 é mau. Os monólitos oferecem algumas vantagens distintas. Por exemplo, eles são simples para...
- build
- test
- deploy
- resolução de problemas
- escala vertical
Muitos aplicativos bem-sucedidos que existem hoje foram criados como monólitos. O aplicativo é um sucesso e continua a evoluir, iteração após iteração, adicionando mais funcionalidade.
Em algum momento, no entanto, você começa a se sentir desconfortável. Você se vê perdendo o controle do aplicativo. Com o passar do tempo, a sensação torna-se mais intensa, e você acaba entrando em um estado conhecido como :Fear Cycle
- O aplicativo tornou-se tão esmagadoramente complicado que nenhuma pessoa o entende.
- Você teme fazer mudanças - cada alteração tem efeitos colaterais não intencionais e caros.
- Novos recursos/correções tornam-se complicados, demorados e caros de implementar.
- Cada versão torna-se tão pequena quanto possível e requer uma implantação completa de todo o aplicativo.
- Um componente instável pode travar todo o sistema.
- Novas tecnologias e estruturas não são uma opção.
- É difícil implementar metodologias ágeis de entrega.
- A erosão arquitetônica se instala à medida que a base de código se deteriora com "soluções rápidas" intermináveis.
- Finalmente, os consultores entram e dizem para você reescrevê-lo.
Soa familiar?
Muitas organizações abordaram esse ciclo de medo monolítico adotando uma abordagem nativa da nuvem para a construção de sistemas. A Figura 1-2 mostra o mesmo sistema construído aplicando técnicas e práticas nativas da nuvem.
Figura 1-2. Design nativo da nuvem
Observe como o aplicativo é decomposto em um conjunto de pequenos microsserviços isolados. Cada serviço é independente 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êineres. Em vez de um grande banco de dados relacional, cada serviço possui seu próprio armazenamento de dados, cujo tipo varia com base nas 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 é encaminhado por meio de um serviço de API Gateway que é responsável por rotear o tráfego para os principais serviços de back-end e impor muitas preocupações transversais. Mais importante ainda, o aplicativo aproveita ao máximo os recursos de escalabilidade, disponibilidade e resiliência encontrados em plataformas de nuvem modernas.
Computação nativa da nuvem
Hmm... Acabamos de usar o termo, Cloud Native. Seu primeiro pensamento pode ser: "O que isso significa exatamente?" Outro chavão da indústria inventado por fornecedores de software para comercializar mais coisas?"
Felizmente é muito diferente, e espero que este livro ajude a convencê-lo.
Em pouco tempo, a nuvem nativa tornou-se uma tendência motriz na indústria de software. É uma nova maneira de construir sistemas grandes e complexos. A abordagem tira o máximo proveito das modernas práticas de desenvolvimento de software, tecnologias e infraestrutura de nuvem. O nativo da nuvem muda a maneira como você projeta, implementa, implanta e operacionaliza sistemas.
Ao contrário do hype contínuo que impulsiona nossa indústria, o nativo da nuvem é real. Considere a Cloud Native Computing Foundation (CNCF), um consórcio de mais de 400 grandes corporações. Sua carta é tornar a computação nativa da nuvem onipresente em toda a tecnologia e pilhas de nuvem. Como um dos grupos de código aberto mais influentes, hospeda muitos dos projetos de código aberto de crescimento mais rápido no GitHub. Esses projetos incluem Kubernetes, Prometheus, Helm, Envoy e gRPC.
O CNCF promove um ecossistema de código aberto e neutralidade de fornecedores. Seguindo esse exemplo, este livro apresenta princípios, padrões e práticas recomendadas nativos da nuvem que são agnósticos em relação à tecnologia. Ao mesmo tempo, discutimos os serviços e a infraestrutura disponíveis na nuvem do Microsoft Azure para a construção de sistemas nativos da nuvem.
Então, o que é exatamente Cloud Native? Sente-se, relaxe e deixe-nos ajudá-lo a explorar este novo mundo.