Cloud Computing + Boas Práticas em Aplicações: Twelve-Factor App

Renato Groffe
3 min readMay 2, 2021

--

Como podemos melhorar a implementação de aplicações na nuvem, tirando proveito de boas práticas e obtendo assim aplicações escaláveis, com alta disponibilidade, uma maior tolerância a falhas e se ainda valendo dos benefícios de automação no build/deployment oferecidos por DevOps?

E já que estamos falando em cloud applications, como tornar mais eficiente o gerenciamento de configurações, pacotes, ambientes e logs, obtendo assim uma maior produtividade a partir de serviços na nuvem?

A metodologia conhecida como The Twelve-Factor App (Doze Fatores) oferece uma série de recomendações úteis para estas questões e necessidades do dia a dia. No final de Março/2021 abordei com meu amigo Robson Rocha de Araújo em uma live no Canal .NET estes 12 fatores, destacando de que maneira soluções como Azure DevOps, GitHub Actions e o Microsoft Azure podem ser úteis na implementação de tais orientações.

A gravação está disponível no YouTube e pode ser assistida gratuitamente:

Ao longo desta apresentação frisamos aspectos como:

  • Codebase (base de código): com o Git tendo se tornado padrão quando o assunto é versionamento, temos no Azure Repos (um dos serviços que integra o Azure DevOps) e no GitHub excelentes alternativas para o gerenciamento de nossos códigos (e compatíveis com Git!);
  • Dependências: gerar pacotes NuGet ou npm não deve ser visto como uma exclusividade de projetos open source, já que podemos nos valer de repositórios privados para compartilhar bibliotecas de uso geral entre times de Desenvolvimento;
  • Configurações: a dependência de arquivos de configuração deve ser evitada ao máximo, já que aplicações modernas podem fazer uso de variáveis de ambientes e soluções de gerenciamento de configurações (Azure App Configuration, Azure Key Vault);
  • Backing Services (serviços de apoio): o conceito de Inversão de Dependências e o uso de injeção de dependências podem contribuir para que se opte por uma tecnologia ao invés de outra anteriormente empregada, sem que isto implique em grandes mudanças de código;
  • Build, release e run: soluções como Azure DevOps e GitHub Actions simplificam em muito a automação de build e deployment de aplicações;
  • Process (Stateless): implementações stateless são fundamentais ao se pensar em escalabilidade, com o Redis representando uma excelente alternativa quando da necessidade armazenamento de estados;
  • Port binding: implementar aplicações auto-contidas (self-contained) pode evitar lock-ins com soluções de hospedagem. O ASP.NET Core se encaixa muito bem nesta recomendação, com aplicações baseadas no mesmo sendo executadas por meio de containers, a partir de servidores como o IIS ou através de alternativas Paas como o Azure App Service;
  • Concorrência: implementações stateless, processamentos de longa duração separados em Worker Services e a possibilidade de escalar uma aplicação horizontalmente são pontos importantes a se considerar dentro deste fator;
  • Descartabilidade (Disposability): instâncias de uma aplicação (sobretudo considerando containers) devem ser encaradas como estruturas efêmeras. Estratégias de deployment como Blue Green e Release Canary são importantes para garantir uma alta disponibilidade;
  • Paridade entre ambientes: containers, Docker Compose e Helm são opções para conseguir emular em ambientes de Desenvolvimento e Testes os recursos presentes em Produção;
  • Logs: soluções como o Application Insights simplificam a manipulação de logs, contribuindo para uma maior observabilidade das aplicações;
  • Admin Processes (Processos Administrativos): scripts de tarefas pontuais e Migrations também devem ser versionados. É comum nestes casos o uso de PowerShell ou Bash, com o Azure Automation constituindo uma excelente alternativa para gerenciar tais ações.

Os slides foram disponibilizados no SlideShare:

A seguir estão diversos posts que escrevi, cobrindo o uso de serviços do Azure, Azure DevOps, GitHub Actions, Docker e Kubernetes:

.NET + NuGet: automatizando a publicação de packages com GitHub Actions

Melhorando o gerenciamento de configurações com Azure App Configuration e Key Vault

MasterClass Azure DevOps: saiba como foi, participe gratuitamente e receba um certificado

MasterClass GitHub Actions: saiba como foi, participe gratuitamente e receba um certificado

Microsoft Azure: dicas, truques, conteúdos e eventos gratuitos | vol. 1

10 Serviços do Azure que você precisa conhecer na prática

Aprendendo Cloud Computing na faixa: artigos, vídeos, canais, comunidades…

Aprendendo DevOps na faixa: artigos, vídeos, canais, comunidades…

Docker — Guia de Referência Gratuito

Kubernetes — Guia de Referência Gratuito

GitHub Actions — Guia de Referência Gratuito

Azure DevOps — Guia de Referência Gratuito

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet