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 completo

Two-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 completo

Por 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.