Saltar al contenido
Blog
#distributed-systems#patterns#kafka

Sagas: transacciones distribuidas sin two-phase commit

10 min de lectura

Por qué no 2PC

El two-phase commit acopla la disponibilidad de todos los participantes: si uno se cae con locks tomados, el resto espera. En sistemas de alta disponibilidad eso es inaceptable; las sagas cambian locks por compensaciones.

Anatomía de una saga

Una saga es una secuencia de transacciones locales. Si el paso n falla, se ejecutan las compensaciones de los pasos n-1..1:

reservar_stock → cobrar_pago → generar_envio
     ↓ (falla cobrar_pago)
liberar_stock ← [compensación]

¿Coreografía u orquestación?

  • Coreografía: cada servicio reacciona a eventos. Menos acoplamiento, pero el flujo global queda implícito y cuesta razonarlo.
  • Orquestación: un coordinador dirige los pasos. El flujo es explícito y testeable; el orquestador es un punto a operar con cuidado.

Mi regla práctica: coreografía para flujos de 2-3 pasos entre dominios cercanos; orquestación cuando hay ramificaciones, timeouts de negocio o compensaciones complejas.

Lecciones de producción

Toda compensación debe ser idempotente, todo paso debe tener timeout de negocio (no solo de red) y el estado de la saga debe ser consultable: cuando algo quede a medias —y va a pasar— operaciones necesita verlo.