Arquitetura nativa da nuvem: projetando aplicativos escaláveis e resilientes

Arquitetura nativa da nuvem: projetando aplicativos escaláveis e resilientes

As arquiteturas nativas da nuvem revolucionaram a forma como os aplicativos são projetados, desenvolvidos e implantados no ambiente de nuvem. Ao aproveitar o poder dos serviços em nuvem e das práticas modernas de software, as organizações podem criar aplicativos altamente escaláveis, resilientes e eficientes.

Neste artigo, exploraremos os principais princípios e estratégias por trás da arquitetura nativa da nuvem e entenderemos como eles permitem o desenvolvimento de aplicações robustas que podem prosperar nesse ambiente.


Vamos começar com uma definição básica:

A arquitetura e as tecnologias nativas da nuvem são uma abordagem para projetar, construir e operar cargas de trabalho que são construídas na nuvem e aproveitam ao máximo o modelo de computação em nuvem.


Como os aplicativos nativos da nuvem diferem dos modelos mais tradicionais baseados em virtualização ou em servidores físicos?

As aplicações nativas da nuvem deixam para trás o conceito de virtualização e adotam um novo paradigma a partir do desenvolvimento da própria aplicação. Aqui apresentamos o conceito de contêineres.

Na América Latina, esta questão ainda é desconhecida por muitas organizações. Toda semana tenho conversas com CTOs ou gerentes de TI, alguns dos quais já operam na nuvem e desconhecem o conceito de execução de aplicações em containers, então acho que vale a pena explicar alguns dos recursos e benefícios de migrar nossas cargas de trabalho. e processos de desenvolvimento a este paradigma.

Virtualização versus contêineres

Vejamos a imagem abaixo: ela ilustra de forma bem geral e sem entrar em detalhes técnicos a primeira e grande vantagem de rodar aplicações em containers. No nível de utilização de recursos em uma máquina host no paradigma de virtualização (esquema à esquerda), é criada uma máquina virtual que inclui todo o sistema operacional. Isto tem implicações nos recursos que a máquina consome no host.

No esquema de contêiner, o sistema operacional é compartilhado por todos os contêineres e apenas as funções que o contêiner necessita são acessadas. Isso significa que os contêineres são leves e consomem menos recursos do que uma máquina virtual.

O segundo grande diferencial e também vantagem dos containers tem a ver com a aplicação em si. Enquanto no esquema de máquina virtual a camada de bibliotecas e dependências é separada, o que pode ser uma dor de cabeça para os administradores responsáveis ​​pelos processos de implantação, pois a não adoção de um padrão de documentação ou coleção de dependências pode tornar a instalação do aplicativo ou sua atualização uma tarefa tediosa e tarefa manual; No esquema de contêiner, o código do aplicativo e suas dependências residem no mesmo repositório. Isso nos permite não apenas garantir que nosso aplicativo será executado sem problemas, mas também automatizar o processo de construção da imagem executável e os processos de implantação e atualização.

Uma das ferramentas mais populares para criar aplicativos em contêineres é Docker, fácil de implementar e compatível com os sistemas operacionais mais utilizados.


Bom. Já conhecemos o primeiro fator de diferenciação entre aplicativos tradicionais e aplicativos nativos da nuvem. Agora vamos falar sobre como o paradigma da conteinerização moderniza os aplicativos no nível arquitetônico.

Monólitos vs Microsserviços

Uma das arquiteturas mais comuns no mundo das aplicações tradicionais são os monólitos. O aplicativo, e muitas vezes os bancos de dados, residem no mesmo ambiente de máquina virtual. Podem existir certas variações onde, talvez, a base de dados resida noutra máquina virtual, mas esta decisão implica um investimento adicional e, claro, a manutenção deste servidor com tudo o que isso implica.

Agora vejamos a imagem abaixo que ilustra uma arquitetura de microsserviços montada no Google Cloud. A adoção do desenvolvimento em contêineres nos permite modularizar nossos aplicativos e separar ou agrupar suas funções (por exemplo, agrupar todo o código relacionado à função de carrinho de compras de um site de comércio eletrônico em um serviço chamado shoppingCart).

Além disso, vejamos a separação dos bancos de dados, que permite a atomicidade e o isolamento real no nível da infraestrutura. Isto está em total conformidade com o conceito de separação de interesses. Qualquer um pensaria ao olhar para este diagrama: “isto parece mais difícil de gerir”. Isso seria verdade se a administração fosse manual, mas lembremos que a próxima grande característica das aplicações nativas em nuvem é o poder de orquestração e automação, por isso entra em cena o famoso termo DevOps, que abordaremos mais adiante.


Antes de falar sobre DevOps, temos que tocar no tema orquestração, você pode dizer: “orquestração de quê?” Bom, estou falando da orquestração dos nossos containers e da infraestrutura onde eles residem. Uma aplicação com poucos microsserviços não é tão difícil de gerenciar, mas quando falamos de monstros como o Netflix, a orquestração dos microsserviços desempenha um papel crucial na manutenção e escalabilidade do serviço que prestam.

Se você quiser saber mais sobre como eles conseguem dominar o caos de sua arquitetura, deixo isto video no YouTube, o que é muito interessante.

Visão de alto nível da arquitetura Netflix.



O orquestrador mais usado e conhecido por organizações que executam aplicativos nativos da nuvem é o Kubernetes ou K8s (de carinho). Falar sobre K8s requer um artigo inteiro dedicado ao tema, por isso não entrarei em muitos detalhes agora. Se a sua organização estiver interessada em K8s, entre em contato comigo e poderemos coordenar um workshop gratuito sobre K8s.

O que precisamos saber no contexto deste artigo é que cada provedor de nuvem (GCP, AWS, Azure e outros) possui sua própria adaptação do Kubernetes por ser open source. No GCP temos duas versões do Kubernetes, o GKE Standard e o GKE Autopilot, cuja principal diferença está no quanto de controle é necessário em termos de escalabilidade.

Se quiser controle total, opte pela versão Standard e, se quiser que o Google cuide disso, opte pela versão Autopilot. Um ponto muito importante para rodar suas aplicações nativas na nuvem é optar por serviços regionais, o que garante alta disponibilidade, além de aproximar sua aplicação dos usuários de uma determinada região.

Além disso, o Google Cloud oferece um PaaS para executar aplicativos em contêineres chamado Cloud Run (sou um grande fã deste). Cloud Run é um serviço serverless que permite executar contêineres sem estado e é ideal para equipes de desenvolvimento que não querem se preocupar com gerenciamento de infraestrutura ou não querem isso em sua lista de preocupações, mas simplesmente buscam agilidade e velocidade em seus processos de desenvolvimento. integração e implantações.

DevOps

O termo DevOps ganhou muita força nos últimos tempos, graças à adoção dos paradigmas citados. Em si, o DevOps é ao mesmo tempo uma mentalidade e um papel na organização: é uma mentalidade porque todas as áreas de TI da empresa devem alterar os seus processos e metodologias para adotar com sucesso o modelo DevOps; e é uma função porque atualmente existe muita demanda para contratar pessoas com esse perfil.

Mas o que um engenheiro DevOps faz? Em termos simples, um engenheiro DevOps é um administrador de infraestrutura que sabe programar (daí a união das palavras Desenvolvedor e Operações). Agora, o DevOps não precisa necessariamente saber programar para criar software: suas tarefas de desenvolvimento geralmente se limitam a automatizar processos de CI/CD (Continuous Integration and Delivery), automatizar processos de gerenciamento de infraestrutura por meio de IaC, familiarizar-se com metodologias de desenvolvimento de software e o ciclo de desenvolvimento em geral e implementar mecanismos de monitoramento necessários para validar o correto funcionamento das aplicações, entre outras tarefas.

Isso significa que se sua organização quiser se preparar para modernizar seus aplicativos e executar cargas de trabalho nativas da nuvem, ela também deverá pensar nas mudanças organizacionais que precisam acontecer. Isso pode significar duas coisas:

  • Prepare a equipe existente para adotar a mentalidade DevOps.
  • Contrate novos funcionários com experiência em DevOps.

A decisão reside no tamanho do impacto da mudança e no nível de conhecimento necessário para realizá-la.

IaC (Infraestrutura como Código)

O último tópico que gostaria de abordar é IaC ou Infraestrutura como Código. Um dos grandes problemas que muitas empresas enfrentam ao adotar a nuvem são os custos fantasmas.

Quais são os custos fantasmas? A nuvem oferece muitos serviços e para um desenvolvedor ou administrador utilizá-los basta ter as permissões adequadas, habilitá-los e integrá-los às aplicações. O que foi dito acima significa que manter o controle ou inventário dos serviços utilizados pode ser uma tarefa difícil e, às vezes, podemos ter surpresas inesperadas ao nível dos custos.

Uma forma eficaz e automática de controlar esse problema é implementar o IaC, que nada mais é do que um repositório de códigos que os administradores usam para criar, atualizar ou excluir recursos da infraestrutura em nuvem. Além disso, permite ter uma única fonte de verdade sobre o estado da infraestrutura que pode ser replicada em diferentes ambientes (dev, qa, prod).

Com IaC, podemos criar e gerenciar recursos de rede, computação, armazenamento, bancos de dados e até pipelines de CI/CD ao adotar processos DevOps. Este deve ser um passo importante a considerar quando a sua organização decidir adotar a nuvem ou modernizar a infraestrutura que já funciona na nuvem. Seus administradores e departamento financeiro agradecerão.

Em termos de IaC, eu recomendaria o Terraform, que geralmente já vem integrado aos serviços dos maiores provedores de nuvem.

Conclusão

A arquitetura nativa da nuvem tornou-se um fator impulsionador para o desenvolvimento de aplicações modernas que aproveitam a escalabilidade, flexibilidade e resiliência da nuvem. Ao adotar princípios e tecnologias nativas da nuvem, as organizações podem acelerar a inovação, melhorar a agilidade das suas equipes e obter maior eficiência de custos.

Espero que este guia seja útil. Sucesso em seus projetos!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.