Rolbacks e restauração da estabilidade
(Secção Tecnologia e Infraestrutura)
Resumo curto
O retrocesso é um retorno controlado para a última versão estável, com risco mínimo de perda de dados e violações SLO. O processo confiável inclui sinais SLO, gates claros e critérios de reversão, mecanismo de mudança (GitOps/Ingress/mesh), padrão de dados compatível, configs/segredos/cachês isolados, rounabook e um ciclo pós-incidente de melhorias.
1) Quando reverter (critérios de lançamento)
SLO/gates de negócios: p95/99 acima do limite, error-rate ↑, queda na conversão de pagamentos/taxas, aumento de temporizações PSP.
Tecsignais: craques de poda, vazamentos de memória, crescimento de filas, degradação de tokens/segundos (LLM), 5xx em Edge.
Risco de dados: migrações incorretas, frases incoerentes, transações/pagamentos órfãos.
Segurança/PII: Suspeita de fuga - reversão imediata/isolamento.
Regra: Se 2 + métricas-chave fora das liminares> N minutos, o retrocesso será iniciado.
2) Tipos de Rolback
1. Aplicativo: repasse de contêineres/pacote para a marca anterior.
2. Fichi: desligamento instantâneo através da função flag/kill-switch.
3. Rotação: retorno do peso para uma versão estável (canary→stable) ou Blue→Green.
4. Banco de dados: reversão lógica (compensação), recuperação gradual do esquema; O PITR é uma medida extrema.
5. Infraestrutura: reversão de manifestos/Plano de Terraform; O retorno das configurações de rede/WAF.
6. Dados/dinheiro/fila: reinstalação/deficiência/reaproveitamento de mensagens; Cases de versões.
3) Princípios arquitetônicos de reversão segura
Compatibilidade de diagramas: estratégia de expand→migrate→contract (o retrocesso pode ser feito entre expand e contract).
Dependências isoladas: segredos separados/configs/cachês/filas para revisões.
Operações Idumpotentes: reaproveitamento de migração e job - seguro.
Imutabilidade de artefatos - imagens, elenco, script SQL - versionados e assinados.
Verdade GitOps: A versão atual e o roteiro estão registrados no repositório de manifesto.
4) Reversão mecânica (Kubernetes/GitOps)
Argo Rollouts (retorno de peso)
yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: api }
spec:
strategy:
canary:
steps:
- setWeight: 5
- pause: { duration: 10m }
in case of analysis failure → automatic rollback to stable
GitOps reversão (ideia)
git revert <commit_with_bad_version>
git push # Argo CD/Flux revert cluster to previous revision
NGINX: Um suingue rápido em stable
nginx map $cookie_canary $to_canary { default 0; 1 1; }
upstream stable { server api-stable:80; }
upstream canary { server api-canary:80; }
server {
location / {
if ($to_canary) { proxy_pass http://canary; }
proxy_pass http ://stable; # removed canary cookie - instant rollback
}
}
5) Rolback BD e proteção de dados
Expand → Migrate → Contract:- Expand: adicione novos campos/índices, o código suporta um padrão antigo e novo.
- Migrate: O código começa a escrever no novo padrão, não quebramos o antigo.
- Contract: Só removemos o antigo após a estabilização.
- PITR/Snapshots: Use apenas se a compensação lógica não for possível.
- Compensações: seleções individuais/jobs para correção de inserções/balanços/pagamentos.
- Janelas read-only: Quando criticada, bloqueamos temporariamente a gravação para «congelar» o estado.
sql
-- expand
ALTER TABLE wallet ADD COLUMN bonus_balance NUMERIC DEFAULT 0 NULL;
CREATE INDEX CONCURRENTLY idx_wallet_bonus ON wallet(bonus_balance);
-- migrate in code, two-sided write
-- contract (after stabilization)
ALTER TABLE wallet DROP COLUMN legacy_bonus_balance;
6) Filas e cachês no revezamento
Dinheiro de versões: chaves com prefixo de versão ('v2:') → coexistência segura.
Deficiência: ao revezamento, limpeza em massa de 'v2:', retorno a 'v1:'.
Filas: partituras/topics em versão; reaproveitamento das mensagens «a partir do ponto de controle».
Duplicação/idempotidade: chaves de idempotação para reaproveitamento sem duplicação.
7) SLO-gates e revezamentos de carro
Métricas: p95/99, error-rate, saturações (CPU/IO/GPU), queue depth, tokens/segundos, conversão de pagamentos.
Política (exemplo):
if p95_latency_ms > 250 for 5m OR error_rate > 1. 5% for 3m OR payment_conv < baseline-0. 3%
then rollback release && open incident && freeze deploys
8) Runabuki (playbooks)
A) Crescimento p99 e 5xx após lançamento
1. Stop promote (congelar canary/blue-green).
2. Switch traffic para revisão estável.
3. Verificar hit em dinheiro/fila/atraso PSP.
4. Retire o diagnóstico: logs, perfis, versões de clientes/circuitos.
5. Comunicações: ChatOps, Canal de Status, Incidente-Cartão.
6. Iniciar ação corretiva: patch/fixe quente/cancelamento de fici.
B) Erro na migração do banco de dados
1. Freeze writes (read-only, resumido).
2. O retrocesso do aplicativo → uma versão estável (compatível com o esquema antigo).
3. Fazer compensações/script rollback.
4. Descongelar a gravação; observar a deriva/erro.
C) Degradação de pagamento (PSP)
1. Alterna a rotação PSP para a rota anterior.
2. Reativar o processamento.
3. Confecção de todos os pagamentos pendentes, repetição com chaves idumpotentes.
D) LLM/recomendações degradadas
1. Desativar novo modelo/parâmetro (função flag).
2. Recuperar o antigo endpoint/peso; limpar a nova revisão em dinheiro KV.
3. Verificar tocens/s, primeiro token latency, toxicidade.
9) Comunicação e congelamento de lançamentos
Freeze window: após a reversão, uma pausa de lançamento para RCA/fix.
Um único canal, status-update, cronologia das ações de quem fez o quê.
Steekholder: produto/CS/pagamentos/advogados (PII).
10) Pós-incidente: análise e prevenção
RCA (sem acusações): A causa primária, a contribuição dos fatores por que os gates não funcionaram (se não funcionaram).
Ações: testes de migração, limites, fichiflag gates, observabilidade.
Limiar SLO: ajuste se for muito «suave «/» duro ».
Documentação: atualizar runabooks, adicionar alertas, treinos (game-day).
11) Ferramentas e modelos
GitOps: Argo CD/Flux - 'revert '/' rollback' comit com a versão.
Progressive delivery: Argo Rollouts/Flagger - parar/retroceder em métricas.
Edge/Ingress: Routagem de peso, cookie routing, suingue rápido.
Feature flags: fractional rollout, kill-switch.
Migração DB: quadros de quadro com up/down, dry-run, throttling.
Observabilidade: dashboards «release compare» (stable vs canary) prontos.
12) Folha de cheque pronta para reversão
1. Artefatos versionados e assinados (imagens/elenco/SQL).
2. Configs de dois caminhos/segredos/cachês/filas (prefixos de versões).
3. Esquema de Base de Dados de expand→migrate→contract.
4. Lançamentos de canais e blue-green com gates SLO e auto-revezamentos.
5. Runabucky em cenários-chave (pagamentos/BD/dinheiro/LLM).
6. Botões ChatOps: '/rollback ', '/freeze', '/promote '.
7. Auditoria e logagem: quem, quando, o que reverteu; Artefactos de diagnóstico.
8. Treino de game-day: simulação de falhas e restaurações.
9. Um plano de comunicação com negócios e safort.
10. Métricas de comparação (stable vs new) na mesma tela.
13) Anti-pattern
Migrações destruidoras até o código (sem compatibilidade invertida).
Cachês compartilhados/filas sem versões → reversão suja.
Nenhum GitOps/histórico de alterações → redações manuais em proda.
Lançamento canário sem gates/telemetria → detecção posterior.
Retrocesso sem freeze e RCA → repetição do incidente.
Monitoramento apenas tecnométricas sem métricas de negócios (pagamentos/taxas).
«Segredos comuns» para todas as revisões é difícil isolar o incidente.
Resumo
Um rolback confiável não é um «pare-torneira», mas um processo incorporado aos lançamentos: versibilidade e compatibilidade, dependências isoladas, gates SLO, realidade GitOps, reversíveis automáticos e runabooks claros. Esta abordagem permite que as plataformas iGaming devolvam rapidamente a estabilidade, minimizando as perdas de dados e de receita e transformando cada incidente em uma fonte de melhorias.