Release strategy = como uma nova versão chega aos usuários. O trade-off central é simplicidade vs controle de risco. A escolha depende de: criticidade do serviço, observabilidade disponível, capacity pra infra adicional, e tolerância a downtime. Database schema compatibility é pré-requisito transversal a todas — sem ela, qualquer estratégia quebra no primeiro rollback.

Rolling Update

Default do Kubernetes Deployment. Substitui Pods em batches configuráveis. Durante o rollout, mix de versões antigas e novas servem tráfego simultaneamente.

t0t1t2t3t4v1v1v1v1v1v1v1v2v1v1v2v2v1v2v2v2v2v2v2v2t4 — rollout completov1 (antigo)v2 (novo) Durante o rollout: mix de v1 e v2 — clientes podem alternar entre versões em requests consecutivos

YAML — strategy: RollingUpdate

apiVersion: apps/v1 kind: Deployment metadata: name: mtg-engine-api spec: replicas: 4 selector: matchLabels: app: mtg-engine-api strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 # máx. 1 Pod fora durante rollout maxSurge: 1 # máx. 1 Pod extra acima dos 4 desejados template: metadata: labels: app: mtg-engine-api spec: containers: - name: api image: mtg-engine:v2 ports: - containerPort: 8080 readinessProbe: httpGet: path: /health/ready port: 8080 initialDelaySeconds: 5 periodSeconds: 5 livenessProbe: httpGet: path: /health/live port: 8080 periodSeconds: 10

Quando usar / NÃO usar

Use quandoEvite quando
Aplicações statelessMudanças com breaking changes na API (mix de versões = bugs)
Mudanças backward-compatibleSistemas de pagamentos / financeiros críticos
Times pequenos sem infra de deploy dedicadaQuando precisa de rollback em segundos
Default seguro para serviços não-críticosMudanças com risco alto sem possibilidade de teste em prod

Vantagens

  • Zero infra adicional
  • Nativo do Kubernetes — não precisa de operator ou service mesh
  • Simples de operar; default de muitos clusters

Desvantagens

  • Mix de versões durante rollout — clientes podem ver respostas inconsistentes
  • Rollback é lento — você precisa rolar a v1 de volta sobre a v2 (mesma operação reversa)
  • Detecção de bugs é tardia — quando 50% já está em v2, blast radius já é grande