Vamos falar sobre práticas recomendadas para microsserviços. O "App de 12 fatores" é um conjunto de práticas recomendadas para criar aplicativos para a Web ou software como serviço. O projeto de 12 fatores ajuda a desacoplar componentes do aplicativo para que cada componente possa ser implantado na nuvem usando implantação contínua e escalonado verticalmente ou ter a escala vertical reduzida. Os princípios de projeto também maximizam a portabilidade para ambientes diferentes. Como os fatores são independentes de linguagens de programação ou de pilha de software, o projeto de 12 fatores pode ser aplicado em diversos tipos de aplicativos. Vamos ver essas práticas recomendadas. O primeiro fator é a base de código. Ela precisa ser rastreada em um controle de versão, como o Git. Os Cloud Source Repositories fornecem repositórios privados com todos os recursos. O segundo fator são as dependências. Há duas considerações principais quando se trata de dependências em apps de 12 fatores: a declaração e o isolamento de dependências. As dependências precisam ser declaradas explicitamente e armazenadas em controle de versões. O rastreamento de dependências é feito com ferramentas específicas da linguagem, como Mavem para Java e Pip para Python. Um app e as dependências dele podem ser isolados empacotando-os em um contêiner. O Container Registry pode ser usado para armazenar as imagens e fornecer controle de acesso detalhado. O terceiro fator é a configuração. Cada aplicativo tem uma configuração para cada ambiente, como de teste, de produção e de desenvolvimento. Essa configuração precisa ser externa ao código e, no geral, manter variáveis de ambiente para flexibilidade da implantação. O quarto fator são os serviços de suporte. Cada serviço de suporte, como banco de dados, cache ou mensagens, precisa ser acessado por URLs e definido pela configuração. Os serviços de suporte atuam como uma abstração para recursos subjacentes. O objetivo é poder trocar um serviço de suporte por uma implementação diferente com facilidade. O quinto fator é o build, o lançamento e a execução. O processo de implantação do software é dividido em três etapas: build, lançamento e execução. Cada etapa resulta em um artefato que tem uma identificação exclusiva. O build cria um pacote de implantação usando o código-fonte. Cada pacote de implantação vincula a um lançamento em específico. Isso é o resultado da combinação de uma configuração do ambiente de execução com um build. Com isso, é possível fazer reversões facilmente e ter uma trilha de auditoria do histórico de cada implantação de produção. A etapa de execução executa o aplicativo. O sexto fator são os processos. Aplicativos são executados como um ou mais processos sem estado. Se um estado for exigido, a técnica discutida anteriormente neste módulo para gerenciamento de estados é a mais adequada. Por exemplo, cada serviço precisa ter os próprios armazenamentos de dados e cache, por exemplo, memória armazenada no cache e dados comuns compartilhados entre serviços usados. O sétimo fator é a vinculação de portas. Serviços são expostos usando um número de porta. O aplicativo empacota o servidor da Web como parte do aplicativo, e não exige um servidor separado, como o Apache. No Google Cloud, esses apps podem ser implantados em serviços de plataforma, como o Compute Engine, o GKE, o App Engine ou o Cloud Run. O oitavo fator é simultaneidade. O aplicativo precisa ter a capacidade de escalonar horizontalmente, iniciando novos processos, e de retornar ao tamanho original a fim de cumprir a demanda ou as cargas. O nono fator é a descartabilidade. Aplicativos precisam ser escritos para ser mais confiáveis do que a infraestrutura em que são executados. Ou seja, eles precisam ser capazes de lidar com falhas temporárias na infraestrutura subjacente, bem como de desligar e reiniciar rapidamente. Aplicativos também têm que escalonar verticalmente e reduzir a escala vertical rapidamente, obtendo e lançando recursos conforme necessário. O décimo fator é a paridade entre desenvolvimento/produção. O objetivo é que os mesmos ambientes usados no desenvolvimento e no teste ou preparação sejam usados na produção. A infraestrutura como código e os contêineres do Docker facilitam isso. Ambientes podem ser provisionados e configurados rápida e consistentemente com variáveis de ambiente. O Google Cloud oferece várias ferramentas que podem ser usadas para criar fluxos de trabalho que mantêm os ambientes consistentes. Essas ferramentas incluem o Cloud Source Repositories, o Cloud Storage, o Container Registry e o Terraform. O Terraform usa as APIs subjacentes de cada serviço do Google Cloud para implantar os recursos. O 11º fator são os registros. Com eles, é possível ver a integridade dos aplicativos. É importante dissociar a coleta, o processamento e a análise de registros da lógica principal dos apps. Registros precisam ser gerados como uma saída padrão e agregados em uma só fonte. Isso é útil quando apps exigem escalonamento dinâmico e estão em execução em uma nuvem pública, porque isso elimina a sobrecarga de gerenciar o local de armazenamento dos registros e a agregação de VMs ou contêineres distribuídos e temporários. O Google Cloud oferece um pacote de ferramentas que ajuda com a coleta, processamento e análise estruturada de registros. O 12º fator são os processos do administrador. Geralmente, eles são realizados uma vez e precisam estar desacoplados do aplicativo. Eles precisam ser automatizados e reproduzíveis, em vez de processos manuais. Dependendo da sua implantação no Google Cloud, há várias opções para fazer isso, incluindo cron jobs no GKE, tarefas de nuvem no App Engine e o Cloud Scheduler.