O que são Canary deploys e a origem do nome
A metáfora da mineração aplicada ao software
O termo canary vem da prática de mineiros que levavam canários para detectar gases tóxicos nas minas — o pássaro morria antes que o gás atingisse concentração fatal para humanos. Em software, um canary deploy direciona uma fração pequena do tráfego real para a nova versão antes de expô-la a todos os usuários. Se a nova versão tiver problemas, apenas uma parcela pequena dos usuários é afetada — o canário "morreu" e o time pode reverter antes de causar um incidente amplo. É uma estratégia de validação em produção com dados reais, mas com risco controlado e superfície de impacto mínima.
Splitting de tráfego — percentuais e estratégias
Como direcionar usuários para a nova versão
O splitting de tráfego pode ser feito por diferentes mecanismos. No nível de load balancer, pesos definem o percentual de requisições para cada versão — 5% para o canary, 95% para a versão estável. Service meshes como Istio e Linkerd permitem splitting baseado em headers HTTP, user-agent, cookies ou ID do usuário, criando cohorts determinísticos. Sticky sessions garantem que um usuário que caiu no canary continue no canary durante toda a sessão, evitando comportamentos inconsistentes. Percentuais típicos começam em 1-5% e avançam em estágios: 5%, 10%, 25%, 50%, 100%, com períodos de observação entre cada avanço.
Critérios de promoção — quando expandir o canary
Métricas que autorizam avançar o percentual
A promoção do canary não deve ser manual nem baseada em intuição — deve ser orientada por métricas objetivas. As métricas típicas de promoção incluem: taxa de erros HTTP 5xx abaixo do baseline histórico, latência P99 não aumentando mais de X% em relação à versão estável, zero aumento na taxa de exceções monitoradas via APM, e ausência de alertas de negócio (carrinho abandonado, falhas de pagamento). Ferramentas como Argo Rollouts e Flagger automatizam essa análise: consultam o sistema de métricas (Prometheus, Datadog) em intervalos definidos e avançam o percentual automaticamente quando os critérios são atendidos.
Critérios de rollback — métricas que disparam retrocesso
Detectar e reverter antes do impacto escalar
O rollback automático é a proteção mais importante do canary. Qualquer métrica crítica acima do threshold configurado dispara a reversão: taxa de erros acima de 1%, latência P99 aumentando mais de 20%, aumento de exceções de negócio, redução de conversion rate acima de X%. Ferramentas de análise como Kayenta (Netflix) e o provider de análise do Argo Rollouts comparam o canary com a versão baseline usando statistical significance, evitando rollbacks por ruído estatístico. O rollback reverte o splitting de tráfego para 0% no canary e o orquestrador remove os pods da nova versão. Todo o processo pode acontecer em menos de 2 minutos após a detecção da anomalia.
Canary em Kubernetes — Argo Rollouts e Flagger
Automação nativa para releases progressivos
Argo Rollouts estende o Kubernetes com um custom resource Rollout que substitui o Deployment padrão e adiciona estratégias de canary e blue-green nativas. O Rollout define os steps do canary (setWeight, pause, análise de métricas) e o Argo Rollouts Controller executa automaticamente cada etapa. Flagger é uma alternativa que funciona com qualquer service mesh (Istio, Linkerd, AWS App Mesh) e monitora métricas de tráfego para promover ou reverter automaticamente. Ambas as ferramentas integram com Prometheus para análise de métricas e com sistemas de notificação para alertar o time sobre o progresso do canary. A escolha entre elas depende do ecossistema já adotado no cluster.
Feature flags como canary controlado
Segmentação de usuários mais granular que splitting de tráfego
Feature flags permitem um tipo de canary mais preciso: em vez de percentual aleatório de tráfego, a nova feature é ativada para cohorts específicos — usuários beta, clientes enterprise, usuários de uma região geográfica ou um ID de usuário específico. Plataformas como LaunchDarkly, Unleash e Split.io oferecem targeting rules e rollout percentual com persistência de cohort. A combinação de canary de infraestrutura (splitting de tráfego) com feature flags é poderosa: o código da nova versão está em produção, mas a feature fica desativada por flag até que métricas de infraestrutura confirmem estabilidade. Só então a flag é ativada progressivamente para os usuários.
A/B testing vs Canary — diferenças de objetivo
Validação técnica vs validação de negócio
Canary e A/B testing são frequentemente confundidos por usarem splitting de tráfego, mas têm objetivos diferentes. Canary valida estabilidade técnica: a nova versão está estável? A latência aumentou? As taxas de erro pioraram? O critério de sucesso é técnico. A/B testing valida hipóteses de negócio: qual versão do botão tem mais cliques? Qual fluxo de checkout converte mais? O critério é métrica de negócio e requer significância estatística com amostras grandes. A/B tests rodam por semanas para atingir significância; canary deploys duram horas. É possível e desejável combinar ambos: validar estabilidade técnica com canary e, após promoção completa, iniciar um A/B test para otimizar métricas de negócio.
Métricas de sucesso para canary
O que medir e como interpretar
Um canary saudável deve manter as métricas do canary dentro de um intervalo de confiança em relação ao baseline. As métricas essenciais são: taxa de sucesso de requisições (porcentagem de respostas 2xx), latência P50, P95 e P99, taxa de erros de negócio (pagamentos falhos, logins falhos) e métricas de recursos (CPU, memória, conexões de banco). A análise deve ser comparativa, não absoluta: se o baseline tem P99 de 200ms, o canary com P99 de 210ms pode ser aceitável; com P99 de 400ms, claramente não. Ferramentas de progressive delivery calculam essas comparações automaticamente usando modelos estatísticos para separar sinal de ruído amostral.
Canary e banco de dados — compatibilidade entre versões
O desafio de duas versões escrevendo no mesmo banco
Durante um canary deploy, as versões antiga e nova da aplicação coexistem e acessam o mesmo banco de dados simultaneamente. Isso exige que todas as mudanças de schema sejam retrocompatíveis: adicionar colunas com valor default é seguro; remover ou renomear colunas enquanto o código antigo ainda as usa causa erros. A regra é: nunca deploy de código e schema migration destrutiva no mesmo canary. Primeiro faça a migration aditiva (nova coluna, nova tabela) e aguarde estabilizar; depois faça o deploy do código que usa a nova estrutura; depois, em um terceiro deploy, remova as estruturas antigas. Essa disciplina de expand-contract protege canary e blue-green igualmente.
Conclusão
Canary deploy como prática de release engineering madura
Continue em: Fundamentos obrigatórios antes de produção.
Vídeos — Canary Deploys e Progressive Delivery
Canary Deploys explicados — progressive delivery
Argo Rollouts — canary e blue-green no Kubernetes
Flagger — progressive delivery automático
Feature flags e canary — controle de releases
A/B testing vs Canary — quando usar cada um
Deploy progressivo com métricas automáticas
Conceitos-chave — Canary Deploys
Splitting de Tráfego
Percentuais definem quanto tráfego vai para o canary: começa em 1-5% e avança em estágios monitorados.
Promoção Automática
Argo Rollouts e Flagger consultam Prometheus para avançar o percentual quando métricas estão dentro do threshold.
Rollback Automático
Qualquer métrica acima do limite dispara reversão automática para 0% no canary em menos de 2 minutos.
Canary vs A/B
Canary = estabilidade técnica em horas. A/B = hipóteses de negócio em semanas com significância estatística.
Expand-Contract
Schema migrations durante canary devem ser aditivas. Remoções ficam para deploy separado após estabilização.
Feature Flags
Permitem ativar features para cohorts específicos de usuários, mais granular que splitting percentual aleatório.
ByteByteGo — Release Engineering
@bytebytego
Reels — Sistemas e Arquitetura
@bytebytego
ByteByteGo no Facebook
Threads sobre Deploy Progressivo
Como testar que sua API é resiliente e segura para produção real
Ver post completo no X →Implementando padrões de resiliência em .NET Core com exemplos reais
Ver post completo no X →Vertical Slice Architecture — organizando sistemas para escala
Ver post completo no X →5 anos com Clean Architecture — lições de sistemas em produção
Ver post completo no X →Design de APIs resilientes — retry, backoff e idempotência juntos
Ver post completo no X →Monolito vs Microsserviços — como escolher para cada contexto
Ver post completo no X →Links Úteis
O que dizem
A diferença entre canary e A/B testing finalmente ficou clara. Conteúdo muito preciso e bem explicado.
A seção sobre banco de dados e expand-contract é ouro. Evita erros caros em produção.
Argo Rollouts vs Flagger bem comparados. Facilitou muito nossa decisão de arquitetura.