Evite desastres no deploy: Escolha a estratégia certa!

 

Se tem uma coisa que ninguém quer é um deployment que cause impacto negativo no negócio. Escolher a estratégia certa de deployment não é apenas uma decisão técnica, mas uma necessidade para garantir disponibilidade, estabilidade e experiência do usuário.

Cada mudança no seu sistema pode trazer riscos. Um erro no deploy pode causar downtime, afetar usuários e, pior, gerar perdas financeiras. Para minimizar o “blast radius” – ou seja, o impacto negativo de um erro –, é essencial contar com uma estratégia de deploy bem planejada e que atenda a suas necessidades.

Além disso, é claro que ter uma estratégia robusta de testes é fundamental, pois sem testes a estratégia de deployment somente irá mudar o tempo que você implementa em um erro no seu ambiente (Ex. vai colocando uma carga de 10% para nova versão sem saber se ela esta funcionando como esperado, ai é demais né ?! – sim, é raro mas acontece muito 👀) .


Conforme novas versões vão sendo liberadas, é crucial monitorar as métricas de negócio (podendo ser métricas como os golden signals ou de negócio como taxa de abandono de checkout) dos componentes. Dessa forma, se algo der errado, o deploy pode ser pausado ou revertido rapidamente.

Bom, vamos explorar algumas estratégias de deployment e entender como elas funcionam:

➡️ All at Once / Big Bang

🛠 Como funciona?

  • A nova versão é implantada para todos os usuários de uma vez.
  • Não há divisão de tráfego entre versões.

Vantagens:

  • Simples de implementar.
  • Rápido, já que a nova versão é liberada imediatamente.

Desvantagens:

  • Se algo der errado, todos os usuários são afetados.
  • Reversão pode ser difícil e demorada.

💡 Exemplo:
Imagine que um e-commerce lança uma nova funcionalidade de checkout. Se houver um erro na implementação, todos os usuários serão impactados ao mesmo tempo, podendo levar a quedas nas vendas.

➡️ Blue/Green Deployment

🛠 Como funciona?

  • Duas versões do sistema (Blue e Green) rodam simultaneamente.
  • O tráfego de produção sempre aponta apenas para blue OU green
  • A atualização é sempre feita na cor sem carga, quando está pronta e testada, o tráfego é alterado para cor com a nova versão

Vantagens:

  • Possibilita rollback imediato, bastando redirecionar o tráfego para a versão antiga.
  • Reduz downtime.

Desvantagens:

  • Custo operacional maior (duas versões rodando ao mesmo tempo).
  • Exige um bom balanceador de carga.

💡 Exemplo:
Se um banco online quiser atualizar sua interface de login, ele pode manter a versão antiga ativa enquanto testa a nova para um grupo seleto de usuários. Se não houver problemas, toda a base de usuários é migrada.

➡️ Canary Deployment (Gradual Deployment)

🛠 Como funciona?

  • A nova versão é liberada gradualmente para uma pequena porcentagem dos usuários. (Ex. 5 ondas de 20%, ou 10 ondas de 10%)
  • Se tudo estiver funcionando bem, o tráfego vai sendo aumentado até que todos estejam na nova versão.

Vantagens:

  • Permite testar a nova versão em produção com menor blast radius
  • Impacto reduzido em caso de falhas.

Desvantagens:

  • Necessidade de observabilidade avançada para monitorar métricas da nova versão.
  • Dependendo das funcionalidades da aplicação, pode gerar inconsistência pois requisições serão distribuidas para a versão N e N-1
  • rollout geralmente leva mais tempo

💡 Exemplo:

Uma empresa SaaS precisa atualizar sua API crítica. Em vez de substituir todas as instâncias de uma vez, ela inicia o deployment em apenas 5% dos servidores. Se os logs e métricas indicarem que a nova versão está estável, o rollout é expandido progressivamente até alcançar 100% da base.

➡️ Shadow Deployment

🛠 Como funciona?

  • Toda requisição gerada é duplicada, uma vai para a versão em produção e a outra para um ambiente “shadow / nova versão”
  • A nova versão recebe uma copia do tráfego real, mas as respostas não são servidas aos usuários finais.
  • Isso permite avaliar o comportamento da nova versão sem afetar a produção.

Vantagens:

  • Identifica problemas antes que a nova versão chegue aos usuários.
  • Ideal para testar carga e performance em ambiente real.

Desvantagens:

  • Custo elevado, pois duas versões estão processando requisições ao mesmo tempo.
  • Difícil capturar todos os cenários possíveis sem um conjunto amplo de testes.

💡 Exemplo:
Uma fintech quer testar um novo motor de processamento de transações. Ele pode rodar em Shadow Mode para validar se está pronto antes de assumir o processamento real dos pagamentos.

Note: Tem uma vertente aqui que é o shadow traffic, praticamente mesma coisa, porém não são 100% das requisições que são duplicadas, apenas uma amostragem é enviada para nova versão.

 

🔥 Feature Flag 🔥

Feature Flags não são exatamente uma estratégia de deployment, mas sim uma técnica poderosa para ativar ou desativar funcionalidades em tempo real sem precisar de um novo deploy. A ideia é fazer o deploy de uma versão segura do código onde a nova funcionalidade já está presente, mas desativada por padrão. Quando for o momento certo, basta ativá-la remotamente sem necessidade de uma nova implantação.

Feature flag é muito usado por empresas grandes e softwares críticos, exige uma maturidade alta porém os benéficos são grandes. Você consegue realizar uma estratégia de deploy canary simples e depois ativar/desativar uma funcionalidade em segundos. Isso trás muitos beneficios e reduz consideravelmente os impactos .

💡 Exemplo:
Imagine que um banco digital quer lançar um novo fluxo de autenticação para seus clientes. Em vez de liberar a funcionalidade para todos de uma vez, ele faz o deploy da nova versão com o código já preparado, mas desativado via Feature Flag. Assim, ele pode ativar a funcionalidade apenas para um pequeno grupo de usuários internos, coletar feedback, corrigir eventuais problemas e, só então, expandir a ativação para toda a base de clientes de forma segura e controlada.

🚀 Conclusão

Não existe uma única estratégia certa. A escolha depende do seu contexto, do risco aceitável e da maturidade do seu processo de deployment. O importante é sempre minimizar impacto e garantir uma experiência fluida para os usuários.

E aí, qual dessas estratégias você já utilizou? Tem alguma preferida? Conta pra gente!


Se curtiu esse conteúdo e quer aprender mais sobre arquitetura de software e um nível bem mais aprofundado, venha fazer parte da
Comunidade de Arquitetura Descomplicada (CaD)! Saiba mais em https://mugnos-it.com/cad/ 🚀

Até a próxima!

Abraços,
Douglas Mugnos
MUGNOS-IT

 

guest
0 Comentários
Mais Velhos
Mais Novos Mais Votados
Inline Feedbacks
Veja todos comentários
0
Gostaria muito de saber sua opinião!x