Estratégias de Rollback
Nem todo deploy problemático pode ser revertido. Equipes de entrega escolhem entre reverter a imagem anterior, fazer uma correção futura com um patch, ou desativar uma flag de funcionalidade - com base na compatibilidade da migração e no tempo para mitigar.
Receita
Cartão de receita de referência rápida - pronto para copiar e colar.
## Decisão de Rollback (2 minutos)
1. Impacto ao cliente ativo? → mitigar primeiro
2. Deploy < 2h e sha-prev da imagem existe? → candidato a rollback
3. Migração destrutiva ou de contrato? → apenas correção futura
4. Bug isolado atrás de flag? → desligar flag, então planejar correção
5. Registrar decisão + comandos no thread #incidenteQuando usar isso:
- Definindo o "go/no-go" da lista de verificação de lançamento
- Treinando o plantão sobre opções de mitigação
- Projetando migrações para reversibilidade
- Revisão pós-incidente de rollback lento
Exemplo de Trabalho
"""rollback_decision.py - codifica a política da equipe como helpers testáveis."""
from __future__ import annotations
from dataclasses import dataclass
from enum import Enum
class Mitigation(str, Enum):
FLAG_OFF = "flag_off"
ROLLBACK_IMAGE = "rollback_image"
O que isso demonstra:
- A árvore de decisão é explícita e ensinável para o plantão
- Migrações de contrato bloqueiam o rollback da imagem automaticamente
- O desligamento da flag vence quando o raio de explosão é isolado
- A política pode ser testada unitariamente como código de aplicação
Análise Detalhada
Como Funciona
- Rollback de Imagem - Rápido quando o esquema e a configuração são retrocompatíveis.
- Correção Futura - Patch para frente quando o rollback quebraria suposições do banco de dados.
- Desligar Flag - Mudança de configuração sem reconstrução; o runbook documenta a chave do ambiente.
- Rollback de Dados - PITR é raro; separado do rollback da aplicação.
- Retenção - O registro mantém as últimas N SHAs para
rollout undo.
Matriz de Estratégia
| Situação | Estratégia Preferida |
|---|---|
| Lógica ruim, migração de expansão | Desligar flag ou rollback de imagem |
| Bloqueio de índice ruim | Migração de correção futura + talvez rollback |
| Coluna removida em produção | Apenas correção futura |
| Erro de digitação na configuração | Reverter configuração + reiniciar |
| Worker incompatível | Pausar workers, reverter API |
Notas Python
# Mantenha a imagem Gunicorn anterior à mão
docker pull $REGISTRY/orders-api:sha-prev
kubectl set image deploy/orders-api api=$REGISTRY/orders-api:sha-prevArmadilhas
- Assumir que o rollback é sempre um comando - Workers e migrações o bloqueiam. Correção: Checklist pré-voo no template de lançamento.
- Correção futura sob pressão sem testes - Segundo incidente. Correção: Branch de patch mínimo com um único teste de integração do caso de produção.
- Excluir imagens antigas - Desfazer impossível. Correção: Política de retenção mínima de 10 tags de produção.
- Rollback sem teste de fumaça - Falha parcial oculta. Correção: Testar tenant canário de escrita+leitura antes da promoção completa.
- Ignorar a fila Celery - Mensagens venenosas após o rollback. Correção: Pausar a fila conforme o runbook.
Alternativas
| Alternativa | Usar Quando | Não Usar Quando |
|---|---|---|
| Rollback automático em falha de canário | Métricas maduras | Esquema não compatível |
| Troca Blue-green | Pilha anterior pré-aquecida | Frota minúscula sensível a custos |
| Drenagem de tráfego | Requisições de longa duração | Necessidade de correção instantânea |
| Desativar funcionalidade no LB | Roteamento baseado em caminho | Bug em middleware compartilhado |
FAQs
Quão rápido o rollback deve ser concluído?
Meta de menos de 10 minutos a partir da decisão; pratique em game day trimestral.
Rollback vs. reverter commit?
Rollback é o artefato anterior promovido; reverter commit é o próximo deploy futuro - mais lento.
Quando a correção futura é obrigatória?
Migrações destrutivas, migrações de dados já aplicadas, ou imagem de rollback indisponível.
Funções serverless fazem rollback?
Mova o peso do alias para a versão anterior; mesma árvore de decisão no esquema.
Como testar o rollback em CI?
Deploy em ambiente efêmero, executar teste de fumaça, rollout undo, executar teste de fumaça novamente - opcionalmente noturno.
E o rollback do banco de dados?
O rollback da aplicação não desfaz DDL; use expand-contract e PITR para desastres.
Quem decide rollback vs. correção futura?
IC durante incidente; capitão de lançamento pré-produção. Documente no thread.
Modelos de ML podem fazer rollback?
Reverta a versão do artefato do modelo no registro; pode precisar de validação em sombra primeiro.
Como alinhar com DORA?
Monitore a taxa de falha de alteração e o MTTR; rollback rápido melhora ambos.
O uv lockfile afeta o rollback?
A imagem incorpora o hash do lock; o rollback restaura as dependências anteriores automaticamente.
Relacionados
- Runbooks de Rollback e Recuperação - passos de execução
- Flags de Funcionalidade e Entrega Progressiva - desligamento de flag
- Gerenciamento de Lançamentos - processo de treinamento
- Promoção de Ambientes e Configuração - promoção de artefatos
- Deploys sem Interrupção - mecânica de deploy
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.