Estratégias de implementação
- 4 minutos
As práticas do DevOps envolvem ciclos de lançamentos frequentes que beneficiam as organizações e os seus utilizadores finais de muitas formas. Como as implantações individuais são menores, elas são mais rápidas e menos estressantes, mas as coisas ainda podem dar errado. Para reduzir a possibilidade de problemas, você precisa adotar uma estratégia de implantação que melhor se adapte às necessidades da sua organização.
Você já conhece a abordagem de "implantação épica", que alguns chamam de estratégia de "big bang". Você sabe que esse método não funciona bem para aplicativos modernos. Existem muitas outras estratégias de implementação que se tornaram populares no contexto de operações modernas e cada uma tem as suas vantagens e desvantagens, consoante a situação.
Estratégia de implementação contínua
A estratégia de implantação contínua adota uma abordagem gradual para introduzir novas versões de código. A nova versão é introduzida gradualmente ao longo do tempo, aumentando gradualmente as instâncias do novo código enquanto diminui as instâncias do antigo. Como resultado, instâncias antigas e novas coexistem em todo o alvo de distribuição durante o processo de implementação. Por exemplo, pode atualizar o software num servidor, máquina virtual ou contentor de cada vez.
Uma vantagem dessa estratégia é que você pode monitorar o novo código no ambiente de produção para garantir que ele atenda ao seu desempenho, segurança, confiabilidade e outros padrões antes de ser amplamente implantado.
Estratégia de implementação azul-verde
A estratégia de implementação azul-verde utiliza dois ambientes separados que são mantidos o mais semelhantes possível e ambos capazes de servir o tráfego de produção. Um ambiente gere a carga de produção atual enquanto o outro aloja a nova versão do software para que possas validá-la antes de transferir o tráfego. Quando estiver satisfeito de que a nova versão está a funcionar corretamente, pode mudar todo o tráfego de uma só vez ou aumentar gradualmente a percentagem do tráfego que vai para o novo ambiente, monitorizando os resultados.
O ambiente azul é aquele que neste momento está a servir o tráfego de produção. O ambiente verde é o seu equivalente paralelo. Primeiro implementas a nova versão do software para verde, valida-a e depois encaminhas o tráfego de produção do azul para o verde. Após a transição, os papéis podem mudar: o verde torna-se o ambiente ao vivo e o azul pode ser preparado para o próximo lançamento.
Uma vantagem desta estratégia é que pode alternar rapidamente, muitas vezes com pouca ou nenhuma interrupção. Também é relativamente fácil direcionar o tráfego de volta para o ambiente anterior se surgir um problema depois de o novo ambiente entrar em funcionamento.
Estratégia de implementação gradual
A estratégia de implementação canário combina alguns elementos da implementação gradual com os da implementação azul-verde. Você não faz a mudança de uma só vez, mas implanta a nova versão em uma parte limitada do ambiente de produção e, em seguida, desloca gradualmente todo o tráfego para a nova versão. O software é implantado em etapas incrementais em um número limitado de instâncias ou usuários até que você verifique se ele funciona corretamente e, em seguida, é implantado para o restante da infraestrutura.
O nome tem origem na utilização de canários em minas de carvão como um sistema de aviso antecipado. Numa implementação canária, é possível realizar testes automatizados e usar monitorização e análise para obter um aviso antecipado de eventuais problemas com a nova versão dentro do subconjunto de instâncias ou utilizadores. Dessa forma, todo o ambiente de produção não é afetado.
Sinalizadores de funcionalidades
A ideia da bandeira de recurso é outra estratégia que exige um pouco mais de sofisticação por parte dos desenvolvedores. Em vez de teres duas versões separadas do mesmo software (uma antiga e outra nova com novas funcionalidades), envias uma única versão que contém o comportamento antigo mais as novas alterações. As novas alterações estão adormecidas por defeito e não são visíveis até que a correspondente "feature flag" seja ativada. Uma flag pode assumir várias formas, incluindo uma linha num ficheiro de configuração, um argumento de linha de comandos ou um valor recuperado de um serviço de configuração remoto e avaliado em tempo de execução.
Uma grande vantagem desta abordagem é a facilidade de reverter alterações caso surja um problema e a facilidade de implementar mudanças gradualmente. Em muitos casos, não é necessário lançar uma nova versão para expor ou esconder a funcionalidade. Podes simplesmente desligar ou ligar o indicador apropriado e permitir que a aplicação em execução reaja à nova configuração.
No Azure, a capacidade de gestão funcionalidades do Azure App Configuration fornece uma loja gerida de feature flags da qual as suas aplicações podem ler em tempo de execução, com suporte a SDK para .NET, Java, Python, JavaScript e Go.
Implementações baseadas em anel
Uma implementação baseada em anel é uma forma estruturada de implementação progressiva amplamente utilizada na Microsoft e no Azure. Novo código é lançado numa sequência de "anéis". Por exemplo, um anel interno ou de ração para cães, um anel de early adopter, um anel de implantação ampla e, finalmente, um anel de disponibilidade geral. Cada anel é maior do que o anterior, e a implantação só avança para o anel seguinte depois de os sinais de saúde do anel atual cumprirem critérios definidos. As implantações baseadas em anéis combinam a exposição gradual das implantações de canários com públicos explícitos e nomeados e portões de aprovação entre anéis.
Entrega progressiva
As estratégias acima (canário, em anel e flags de características) são frequentemente agrupadas sob o termo guarda-chuva de entrega progressiva. A ideia unificadora é que um lançamento é exposto a uma audiência controlada e crescente, instrumentado com métricas de saúde e negócio, e avançado ou revertido automaticamente com base nesses sinais. A entrega progressiva é cada vez mais o modelo padrão para serviços cloud de alta fiabilidade porque limita o raio de explosão de qualquer alteração individual.
Melhores práticas de implementação
Independentemente da estratégia de implementação que utilize, algumas boas práticas ajudam a minimizar riscos ao lançar novo software ou uma nova versão do software existente:
Use ferramentas adequadas, como o Azure Pipelines ou o GitHub Actions, para criar um pipeline contínuo de integração e implementação.
Integre os testes automatizados.
Use os canais de comunicação para notificar as partes certas sobre os resultados dos testes. Por exemplo, alerte as equipas quando as implementações falham ou encontram problemas.
Monitorize os problemas imediatamente após a implementação.
Tenha um plano para reverter caso uma nova versão não passe nas verificações de integridade ou não funcione corretamente.