“É uma prática na qual os membros de uma equipe integram o trabalho com frequência…” “Cada integração é verificada por uma build automatizada (incluindo testes) para identificar erros de integração o mais rápido possível” Continuous Integration - https://martinfowler.com/articles/continuousIntegration.html
“É a capacidade de aplicar as alterações de todos os tipos - incluindo novos recursos, alterações de configurações, correções de bugs e experimentos - em produção ou nas mãos dos usuários, com segurança e rapidez, de maneira sustentável.” https://continuousdelivery.com/
“Continuous deployment é a prática de liberar toda boa construção de artefato para os usuários” Jez Humble - Continuous Delivery vs Continuous Deployment
Recreate/In-Place Processo simplificado Não há múltiplas versões funcionando de forma concorrente Operação pode ser tornar complexa A aplicação fica indisponível no período da troca das versões Prós Contras
Rolling Deployment/Ramped Sem downtime Mitigação do risco de implementação, bugs podem ser identificados antes de completar o deploy em todas as instâncias. Rollback pode ser lento e complexo Retrocompatibilidade com versões anteriores (banco de dados, apis, etc.) Prós Contras
Blue/Green Sem downtime Rollback instantâneo Segregação de ambientes Necessário o dobro de recursos computacionais Retrocompatibilidade com versões anteriores (banco de dados, apis, etc.) Prós Contras
Canary Sem Downtime Testes com usuários de produção Rollback rápido Permite testar múltiplas versões em produção gerenciando tráfego entre elas Mais lento comparado com outras estratégias Os testes devem ter um monitoramento eficiente da infraestrutura envolvida e da stack da aplicação Aplicação e banco de dados preparados para suportar múltiplas versões Gerenciamento da transição (tráfego) é mais complexo Prós Contras
A/B Test Sem Downtime Testes com usuários de produção Permite múltiplas versões simultâneas Gerenciamento da distribuição de tráfego Rollback rápido Implementação Complexa Os testes devem ter um monitoramento eficiente da infraestrutura envolvida e da stack da aplicação Aplicação e banco de dados preparados para suportar múltiplas versões Gerenciamento da transição (tráfego) é mais complexo Prós Contras
Shadow Minimiza o impacto da aplicação em produção Possibilita testar as funcionalidades de backend usando o tráfego legítimo (produção) Cuidado com integração de terceiros que mudam os dados Aumenta a complexidade operacional Ele funciona melhor quando aplicado com outra estratégia como Canary Aumenta o custo de recursos computacionais Prós Contras
DarkLaunch Segrega deploy do release de novas funcionalidades Possibilita realizar testes por segmento de usuários Desabilita facilmente a funcionalidade via Feature Flag/Toggle Necessário implementar ciclo de vida da flag Aumenta a complexidade operacional Observabilidade (Monitoramento, Introspecção, centralização de logs) devem ser implementados para rastrear problemas. Arquitetura da aplicação deve suportar múltiplas versões concorrentes Prós Contras
Circles Sem Downtime Testes com usuários de produção Permite múltiplas versões simultâneas Gerenciamento da distribuição de tráfego Rollback rápido Multinant Dependente de um orquestrador de container Arquitetura da aplicação deve suportar múltiplas versões concorrentes Aumenta a complexidade operacional Observabilidade (Monitoramento, Introspecção, centralização de logs) devem ser implementados para rastrear problemas. Prós Contras
Comparação de estratégias Estratégia Downtime Teste real de tráfego Usuário Alvos Custo de Recursos (servidores) Duração de Rollback Impacto para Usuário Complexidade para Implementar Complexidade Operacional Recreate/In-Place Não Não Não Baixo Alto Alto Muito Baixo Alto Rolling Deployment Sim Não Não Baixo Baixo Baixo Baixo Baixo Blue/Green Sim Não Não Alto Muito Baixo Médio Médio Médio Canary Sim Sim Não Baixo Baixo Baixo Médio Médio A/B Testing Sim Sim Sim Baixo Baixo Baixo Alto Alto Shadow Sim Sim Não Alto N/A Muito Baixo Alto Alto Dark Launch Sim Sim Sim Baixo Muito Baixo Baixo Alto Alto Circle Sim Sim Sim Baixo Baixo Baixo Médio Médio
Boas práticas Compatibilidade com versões anteriores CD²+CI Automação Gerenciamento de configuração (ambientes mais semelhantes possível) Estratégias de Rollback Observabilidade (Observability)