Release Strategies
Rolling Update · Blue-Green · Canary — como a nova versão chega aos usuários
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.
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 quando | Evite quando |
|---|---|
| Aplicações stateless | Mudanças com breaking changes na API (mix de versões = bugs) |
| Mudanças backward-compatible | Sistemas de pagamentos / financeiros críticos |
| Times pequenos sem infra de deploy dedicada | Quando precisa de rollback em segundos |
| Default seguro para serviços não-críticos | Mudanç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