Saga × Two-Phase Commit (2PC)
Dois padrões que costumam ser trocados um pelo outro, e o que de fato os separa.
Em uma frase
Os dois coordenam uma operação que cruza vários sistemas. O 2PC busca atomicidade travada: todos preparam, travam e commitam juntos. A Saga aceita consistência eventual: cada passo commita na hora, e uma falha é desfeita por compensação. Um trava para garantir; o outro não trava e conserta depois.
Critério a critério
O que garante ao fim?
- Saga
- Consistência eventual: existe uma janela em que o sistema está parcialmente aplicado.
- Two-Phase Commit (2PC)
- Atomicidade imediata: ou todos commitam, ou nenhum, sem estado intermediário visível.
Trava recursos?
- Saga
- Não. Cada passo commita local e libera na hora; nada fica preso esperando os outros.
- Two-Phase Commit (2PC)
- Sim. Do prepare ao commit, todos os participantes seguram os recursos travados.
Como desfaz uma falha?
- Saga
- Com ações de compensação que revertem os passos já feitos (estornar, liberar reserva).
- Two-Phase Commit (2PC)
- Com abort na segunda fase: quem preparou desfaz antes de ter commitado de verdade.
E se o coordenador cai?
- Saga
- Não há coordenador travando ninguém; o fluxo retoma ou compensa, sem recurso preso.
- Two-Phase Commit (2PC)
- Participantes ficam in-doubt: travados, sem saber se commitam ou abortam, até ele voltar.
Como escala com mais participantes?
- Saga
- Bem: cada serviço é independente, e um lento não trava os outros.
- Two-Phase Commit (2PC)
- Mal: a disponibilidade é o produto das de cada participante, e cai a cada um que entra.
Quando escolher cada um
Saga
Os passos vivem em serviços independentes, toleram acontecer em momentos diferentes e podem ser desfeitos por compensação.
Ver o conceito completoTwo-Phase Commit (2PC)
A atomicidade é inegociável, os passos são curtos e os participantes ficam numa fronteira confiável e de baixa latência, como XA entre um banco e um broker.
Ver o conceito completoPor que confundem
Achar que a Saga é 'um 2PC para microsserviços'. São filosofias opostas: o 2PC compra atomicidade real ao preço de travar recursos e derrubar a disponibilidade, e por isso é inviável entre serviços independentes; a Saga abre mão da atomicidade instantânea justamente para não travar nada e sobreviver a participantes que falham. Usar 2PC entre microsserviços é a armadilha clássica — a resposta quase sempre é uma saga.