trilha

System Design/05 - Reliability Patterns/Resiliency2 min

Compensating Transaction

Perguntas-guia
  • Que problema isso resolve?
  • Quando usar / quando NÃO usar?
  • Qual o principal trade-off?
  • Como isso falha em produção?

Conceito

Desfazer uma operação distribuída que falhou no meio, executando ações que revertem o efeito dos passos já concluídos — já que não existe ROLLBACK entre serviços.

1. reservar estoque   ✓
2. cobrar cartão      ✓
3. agendar entrega    ✗ falhou
   → compensar 2: estornar
   → compensar 1: liberar estoque

É o mecanismo central do padrão Saga: uma sequência de transações locais, cada uma com sua compensação.

Coreografada vs orquestrada

Choreography Orquestrada
Quem coordena Cada serviço reage a eventos Um coordenador (Scheduler Agent Supervisor)
Visibilidade Baixa Alta
Bom para 2-3 passos simples Fluxos longos com compensação

Trade-offs

O padrão existe porque a alternativa — transação distribuída com two-phase commit — trava recursos entre serviços e não escala. A saga troca atomicidade por disponibilidade.

O que se paga:

Compensar não é desfazer. Um estorno não apaga a cobrança: ele adiciona um lançamento contrário. O cliente viu a cobrança, talvez tenha recebido um e-mail, e a fatura mostrará ambos. O efeito no mundo é diferente de "nunca aconteceu".

Existe estado intermediário observável. Entre o passo 2 e a compensação, o sistema está inconsistente e alguém pode ler esse estado. Consistência é eventual, por construção.

Nem tudo é compensável. E-mail enviado, SMS entregue, item físico despachado. Para esses, a ordem dos passos importa: coloque o irreversível por último, quando tudo que podia falhar já passou.

A compensação também falha. E precisa de retry, idempotência e, no limite, intervenção humana. Uma compensação que falha em silêncio deixa o sistema num estado que ninguém sabe que existe — daí a necessidade de um supervisor que detecte processos travados.

Exemplo prático

Reserva de viagem: voo, hotel e carro, cada um num serviço externo.

✓ voo reservado
✓ hotel reservado
✗ carro indisponível
  → compensar hotel: cancelar (pode ter multa)
  → compensar voo:   cancelar (pode ter multa)

As multas ilustram o ponto: compensar tem custo real, e o custo é do negócio. Isso muda o desenho — vale ordenar os passos do mais provável de falhar para o menos, para que a compensação seja acionada o mais cedo possível, quando menos coisas precisam ser desfeitas.

E cada cancelamento precisa ser idempotente, porque o supervisor vai reexecutá-lo sem saber se já foi feito.

Relacionado


Parte de Resiliency · roadmap.sh/system-design

Buscar

Busca por título, seção e texto das notas