Padrões de deploy blue-green e canary em ambientes produtivos
1. Fundamentos dos padrões de deploy modernos
Por que deploy não é mais "subir arquivo via FTP"
O deploy tradicional — subir arquivos via FTP, substituir binários manualmente ou executar scripts em servidores de produção — está obsoleto. Essas práticas introduzem risco de inconsistência, downtime prolongado e rollback complexo. As estratégias modernas de liberação controlada (blue-green, canary, rolling update) automatizam o processo via pipelines CI/CD, garantindo que cada versão passe por validações antes de atingir os usuários.
Risco zero não existe: mitigando impacto com padrões
Todo deploy carrega risco. A diferença está no blast radius — o alcance do impacto em caso de falha. Blue-green e canary reduzem esse raio, permitindo que você defina um downtime budget aceitável. O trade-off é claro: velocidade de entrega vs. segurança. Padrões modernos equilibram ambos.
Pré-requisitos técnicos
Para implementar blue-green e canary, você precisa de:
- Balanceador de carga (NGINX, HAProxy, AWS ALB, Kubernetes Ingress)
- DNS ou IP virtual para roteamento
- Health checks automatizados (liveness/readiness probes)
- Feature flags ou mecanismos de segmentação de tráfego
2. Padrão blue-green: ambientes gêmeos para troca instantânea
Arquitetura básica
Blue-green mantém dois ambientes idênticos: o azul (versão atual) e o verde (nova versão). Apenas um recebe tráfego de produção por vez. O roteamento é feito via load balancer, que alterna o destino.
Desafio crítico: sincronia de banco de dados. Se a nova versão modifica o schema, a versão antiga deve continuar funcionando. Soluções incluem migrações retrocompatíveis ou dual-writes.
Fluxo de deploy passo a passo
- Prepare o ambiente verde (inativo) com a nova versão
- Execute health checks e smoke tests no ambiente verde
- Troque o tráfego do load balancer do azul para o verde
- Valide a versão verde em produção
- Mantenha o azul por um período de observação (cooldown)
- Descarte o ambiente azul ou reutilize para o próximo deploy
Vantagens e limitações
Vantagens: rollback instantâneo (basta reverter o roteamento), zero downtime, deploy previsível.
Limitações: custo dobrado de infraestrutura (dois ambientes completos), problemas com migrações de banco de dados não retrocompatíveis (ex.: remover colunas que a versão antiga ainda usa).
3. Padrão canary: liberação gradual e observabilidade
Conceito
Canary expõe a nova versão a um subconjunto de usuários, aumentando gradualmente o percentual. Percentuais típicos: 1%, 5%, 10%, 50%, 100%. A progressão depende de métricas de saúde.
Segmentação: por usuário (cookie, ID), região geográfica, faixa de IP, ou aleatoriamente com peso.
Implementação com balanceadores de carga
Exemplo de roteamento ponderado com NGINX:
upstream backend {
server app-v1.example.com weight=90;
server app-v2.example.com weight=10;
}
Com service mesh (Istio):
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: app-canary
spec:
hosts:
- app.example.com
http:
- route:
- destination:
host: app-v1
weight: 90
- destination:
host: app-v2
weight: 10
Métricas críticas para promover ou abortar
- Taxa de erro HTTP (4xx/5xx)
- Latência percentil 95/99
- Throughput (requests por segundo)
- Logs de exceção do backend
Gatilho automático de rollback: se a taxa de erro 5xx aumentar 5% em relação à versão estável, o canary é abortado automaticamente.
4. Comparação direta: blue-green vs. canary
| Característica | Blue-Green | Canary |
|---|---|---|
| Risco | Baixo (troca total) | Muito baixo (gradual) |
| Velocidade de rollout | Instantânea | Lenta (horas/dias) |
| Custo de infraestrutura | Alto (2x) | Baixo (1x + overhead) |
| Complexidade de monitoramento | Baixa | Alta |
| Rollback | Imediato | Imediato (abortar progressão) |
Quando usar cada padrão:
- Blue-green: releases grandes, mudanças estruturais, compliance rigoroso (ex.: PCI DSS)
- Canary: features arriscadas, testes A/B, validação de performance em produção
Cenário híbrido: blue-green com canary interno — o ambiente azul recebe 10% do tráfego antes da troca total, combinando os dois padrões.
5. Implementação prática com ferramentas comuns
Deploy blue-green com Kubernetes e Ingress Controller
# Criar deployment da versão verde
kubectl apply -f deployment-v2.yaml
# Aguardar health checks
kubectl rollout status deployment/app-v2
# Trocar o service para apontar para o novo deployment
kubectl patch service app -p '{"spec":{"selector":{"version":"v2"}}}'
# Validar e depois remover o deployment antigo
kubectl delete deployment app-v1
Deploy canary com Argo Rollouts
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: app-canary
spec:
replicas: 10
strategy:
canary:
steps:
- setWeight: 10
- pause: {duration: 5m}
- setWeight: 50
- pause: {duration: 10m}
- setWeight: 100
template:
metadata:
labels:
app: app
spec:
containers:
- name: app
image: app:v2
Automação com CI/CD (GitLab CI)
stages:
- deploy-canary
- promote
deploy-canary:
stage: deploy-canary
script:
- kubectl set image deployment/app app=$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- kubectl annotate deployment/app canary=true
only:
- main
promote:
stage: promote
script:
- kubectl annotate deployment/app canary=false
- kubectl rollout status deployment/app
when: manual
6. Armadilhas comuns e como evitá-las
Estado compartilhado: banco de dados, cache e sessões
Migrações de banco de dados devem ser retrocompatíveis (expansão antes de contração). Exemplo: adicionar coluna nova, depois migrar dados, depois remover coluna antiga. Cache e sessões devem ser compartilhados entre versões ou invalidados.
Testes insuficientes no ambiente inativo
Sempre execute smoke tests automatizados e synthetic monitoring no ambiente inativo antes da troca. Ferramentas como Checkly, Grafana Synthetic Monitoring ou scripts curl com health checks.
Falsa sensação de segurança
Blue-green não protege contra bugs de lógica que afetam ambas as versões (ex.: erro no banco de dados compartilhado). Canary pode mascarar problemas de escalabilidade se a amostra for pequena — um bug que só aparece com 1000 req/s pode não ser detectado com 1% do tráfego.
7. Estratégias de rollback dentro dos padrões
Rollback em blue-green
Simples reversão de tráfego no load balancer. Tempo de recuperação: segundos. Exemplo com NGINX:
# Reverter para a versão azul
upstream backend {
server app-v1.example.com weight=100;
server app-v2.example.com weight=0;
}
Rollback em canary
Abortar a progressão e redirecionar 100% do tráfego para a versão estável. Cuidado com thundering herd ao reverter rapidamente — use circuit breakers ou ramp-up reverso.
Registro de estado e audit trail
Cada deploy deve gerar logs com: versão, timestamp, percentual de tráfego, métricas no momento da troca. Ferramentas como AWS CloudTrail, GitLab Audit Events ou logs estruturados no SIEM.
8. Tendências e evolução dos padrões de deploy
Feature flags como camada adicional
Combinar feature flags com blue-green/canary permite liberar funcionalidades por usuário sem novo deploy. Ferramentas: LaunchDarkly, Unleash, Flagsmith.
Deploy progressivo multi-estágio
Combinação de canary + shadow testing (espelhar tráfego para a nova versão sem afetar usuários) + dark launches (ativar funcionalidades ocultas para teste interno).
Serverless e deploy imutável
Em plataformas serverless (AWS Lambda, Cloud Run), o deploy é imutável — cada versão é uma nova função/container. Blue-green é simplificado (troca de alias), mas canary exige configuração de tráfego ponderado (ex.: Lambda aliases com weights).
Referências
- Kubernetes Deployments — Rolling Update e Canary — Documentação oficial do Kubernetes sobre estratégias de deploy, incluindo rolling updates e canary deployments.
- Argo Rollouts — Blue-Green e Canary Deployments — Ferramenta open-source para deploy progressivo no Kubernetes, com suporte a blue-green, canary e análise automática de métricas.
- NGINX — Blue-Green Deployment — Tutorial prático da NGINX sobre como implementar blue-green deployment com balanceamento de carga.
- AWS — Canary Deployments com AWS CodeDeploy — Documentação da AWS sobre configurações de deploy canary e linear no CodeDeploy.
- Martin Fowler — BlueGreenDeployment — Artigo clássico de Martin Fowler explicando o padrão blue-green e suas variações.
- Flagger — Canary Deployments com Istio e Prometheus — Ferramenta open-source que automatiza canary deployments com service mesh (Istio, Linkerd) e métricas do Prometheus.
- GitLab CI/CD — Canary Deployments — Guia oficial do GitLab sobre como configurar canary deployments no pipeline CI/CD.