Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

03 - Canary Deployment (Lançamento Gradual)

#canary#deploy-gradual#metricas#rollback#service-mesh
video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Canary Deployment (Lançamento Gradual)

O Canary Deployment é a estratégia que expõe a versão nova de um serviço a uma fração pequena e crescente do tráfego real, avaliando métricas de saúde a cada etapa antes de autorizar o aumento seguinte. O nome vem do canário de mina: uma pequena população sinaliza primeiro qualquer problema, protegendo a massa do tráfego. É a estratégia mais sofisticada das três formas de substituição de instâncias, porque não apenas lança gradualmente como também julga o resultado, promovendo ou revertendo automaticamente com base em dados observados. Em produção, o canary reduz o raio de explosão de um deploy ruim a percentuais controlados, tipicamente 5% ou menos na primeira etapa. O custo é a exigência de infraestrutura de roteamento por peso e de análise automatizada de métricas, peças que serviços pequenos nem sempre têm maturidade para operar.

Conceito e problema que resolve

O problema que o canary resolve é a incerteza estatística dos testes pré-produção. Nenhum ambiente de staging reproduz fielmente o volume, a variedade de dados e os padrões de uso da produção; bugs de performance, gargalos de memória e interações raras só aparecem sob tráfego real. O rolling update e o blue-green expõem todo mundo à versão nova com base em validações limitadas. O canary trata o lançamento como um experimento controlado: a versão nova prova seu valor numa amostra antes de receber o público inteiro.

Duas propriedades distinguem o canary do rolling update, embora ambos lancem por etapas. Primeiro, o canary roteia por peso explícito, e não por substituição natural de réplicas, de modo que a fração exposta é uma decisão consciente e não um efeito colateral da matemática de surge. Segundo, o canary tem um avaliador: cada etapa tem critérios de promoção baseados em métricas, e a falha deles interrompe e reverte o processo sem esperar humanos reagirem.

Funcionamento interno: rampa de percentuais

Uma rampa canary típica segue a sequência de 1%, 5%, 25%, 50% e 100%, com pausas de observação entre as etapas. A primeira etapa é a mais reveladora, pois as falhas grosseiras, como panics, erros de configuração e incompatibilidades de contrato, aparecem com pouquíssimos usuários afetados. As etapas finais concentram o teste de capacidade, porque é lá que o serviço novo precisa sustentar o volume total.

Cada pausa serve para acumular amostra suficiente de métricas e executar a análise. O intervalo precisa respeitar a duração dos ciclos de negócio relevantes; cinco minutos podem bastar para taxas de erro de infraestrutura, mas nada capturam de um fluxo de checkout que só ocorre dezenas de vezes por minuto. A duração de cada etapa é, portanto, uma decisão de estatística aplicada, e não de impaciência do pipeline.

# Roteamento por peso em service mesh: etapa canary de 5%
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: pagamentos-vs
spec:
  hosts:
    - pagamentos
  http:
    - route:
        - destination:
            host: pagamentos
            subset: stable      # versão atual recebe 95% do tráfego
          weight: 95
        - destination:
            host: pagamentos
            subset: canary      # versão nova recebe 5% do tráfego
          weight: 5
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: pagamentos-dr
spec:
  host: pagamentos
  subsets:
    - name: stable
      labels:
        version: v2.4.1         # rótulo da frota estável
    - name: canary
      labels:
        version: v2.5.0         # rótulo da frota canária

Na plataforma Kubernetes, operadores como Flagger e Argo Rollouts automatizam exatamente esse ciclo: criam o Deployment canário, manipulam os pesos do mesh ou do Ingress, consultam o Prometheus entre as etapas e executam promoção ou rollback conforme as regras declaradas. Em provedores de nuvem gerenciados, o mesmo padrão aparece no CodeDeploy com roteamento por canary e no App Mesh ou no Gateway API com pesos de backend.

Análise automatizada de métricas

O coração do canary é a análise. A cada etapa, o avaliador compara a frota canária com a estável nas mesmas janelas de tempo, neutralizando variações do tráfego global. Os candidatos naturais são os golden signals: taxa de erro, latência por percentil, throughput e saturação de recursos. Métricas de negócio, como conversão no checkout ou taxa de resposta em formulários, elevam a análise a outro patamar, porque capturam regressões funcionais que nenhuma métrica técnica revela.

A análise ingênua, que compara a canária com um valor absoluto fixo, produz dois vintões: falsas paradas por flutuação natural e passagens silenciosas com degradação real. A prática consolidada usa a frota estável como baseline simultâneo e exige margem relativa, por exemplo, a taxa de erro da canária não pode exceder a da estável em mais de um ponto percentual. Janelas de análise curtas demais acumulam amostra insuficiente para percentis de latência confiáveis, e o avaliador precisa considerar esse mínimo amostral antes de decidir.

  • Taxa de erro HTTP por código, comparada com o baseline da estável na mesma janela.
  • Latência p95 e p99, pois a média esconde as caudas onde os incidentes moram.
  • Throughput por instância, para detectar regressões de capacidade e gargalos.
  • Saturação, com CPU, memória e uso de pool de conexões por frota.
  • Métricas de negócio relevantes para o serviço, com a ressalva de janelas maiores.

Promoção e rollback automáticos

O resultado da análise é binário por etapa: promover para o próximo peso ou reverter para o estado estável. A promoção eleva o peso do canário conforme a rampa declarada; a reversão devolve o peso a zero, remove a frota canária e deixa o serviço exatamente como estava, em minutos. O rollback pode ser acionado manualmente a qualquer momento, e é justamente a existência do botão, somada à certeza de que ele funciona, que autoriza deploys mais frequentes e ambiciosos.

# Políticas de análise do Flagger: critérios de promoção e rollback
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: pagamentos
spec:
  targetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: pagamentos
  progressDeadlineSeconds: 600
  service:
    port: 80
  analysis:
    interval: 2m               # janela de análise de cada etapa
    threshold: 3               # 3 falhas seguidas disparam rollback
    stepWeight: 10             # rampa de 10% por etapa
    maxWeight: 50              # teto antes da promoção final
    metrics:
      - name: error-rate
        templateRef:
          name: error-rate-template
        thresholdRange:
          max: 1               # erro acima de 1% relativo reprova
      - name: latency-p99
        templateRef:
          name: latency-p99-template
        thresholdRange:
          max: 500             # p99 acima de 500ms reprova
    webhooks:
      - name: smoke-test       # gate funcional adicional por etapa
        type: pre-rollout
        url: http://tester.ambiente/verificar

O threshold de falhas seguidas evita o rollback por ruído: uma etapa com uma métrica fora da margem por um ciclo pode ser estatística, três ciclos seguidos fora raramente são. O progressDeadline impede o cenário patológico da rampa eternamente parada, e o gate pre-rollout acrescenta a camada funcional, com testes de fumaça executados contra a frota canária antes da primeira etapa de tráfego.

Golden signals na avaliação

A escolha das métricas define a sensibilidade e a especificidade do canário. Os quatro golden signals do Google SRE formam a base consensual, e cada um captura uma classe distinta de falha.

Golden signal Classe de falha detectada Limiar típico de reprova
Taxa de erro Bugs de lógica, contratos quebrados, dependências falhando Erro relativo acima da estável em margem declarada
Latência Regressões de performance, faltas de cache, N+1 p99 acima da estável em percentual ou milissegundos
Throughput Perda de capacidade, quedas de tráfego anormais Desvio relevante em requisições por segundo
Saturação Gargalos de recursos, vazamentos de memória CPU ou memória sistematicamente acima da estável

Nenhum sinal é suficiente sozinho. Taxa de erro baixa com p99 elevado indica degradação silenciosa de latência; throughput estável com saturação crescente antecipa um colapso por memória. A análise conjunta é o que dá ao canário sua confiabilidade como juiz.

Comparação com blue-green e rolling update

O canary e o blue-green compartilham a coexistência de duas frotas, mas divergem no propósito: o blue-green troca o tráfego por completo após validação sintética, enquanto o canário valida com tráfego real fracionado. O canary e o rolling update compartilham a exposição gradual, mas divergem no controle: o rolling update não roteia por peso e não analisa métricas por etapa.

Critério Canary Blue-Green Rolling Update
Roteamento Por peso, fracionado Binário, tudo ou nada Por substituição de réplicas
Validação Tráfego real e métricas Fumaça e espelho antes do switch Health checks por onda
Rollback Minutos, peso a zero Segundos, switch reverso Minutos, onda por onda
Infra extra Pequena, frota canária Dobro, ambiente completo Zero
Custo de operação Alto, análise e mesh Médio Baixo
Melhor uso Serviços críticos de alto tráfego Serviços com rollback sensível Serviços simples e rotineiros

Erros comuns e boas práticas

Os erros clássicos transformam o canário de instrumento de segurança em burocracia de pipeline.

  • Etapas curtas demais, com amostra insuficiente para os percentis; a análise aprova por falta de dados, e não por qualidade.
  • Baseline ausente, comparando a canária com valores absolutos herdados de outro horário de tráfego, o que gera falsas reprovações e falsas aprovações.
  • Ignorar a contaminação da amostra: sessões com estado em cache de roteamento ou sticky session podem concentrar o mesmo usuário na canária, distorcendo a avaliação.
  • Rampas idênticas para serviços diferentes; um serviço de autenticação e um worker de relatório exigem métricas e durações distintas.
  • Canário sem teste de carga final, deixando a etapa de 100% sem cobertura de capacidade verificada.
  • Falha de rollback não testada, descobrindo em incidente que o caminho de reversão está quebrado por mudança de rótulos ou de gateway.

Entre as boas práticas, comece a rampa em percentuais baixos o bastante para o pior bug não virar incidente, use a frota estável como baseline simultâneo, declare thresholds como código versionado no repositório, e complemente métricas técnicas com ao menos uma métrica de negócio. Para serviços onde a análise estatística não é viável, o canário degenera em rollout gradual com pausas, o que já captura grande parte da proteção; a análise automática é o aprimoramento, não o pré-requisito.