Conceptos

Patrón Saga

Patrón para gestionar transacciones distribuidas en microservicios mediante una secuencia de transacciones locales con acciones de compensación para manejar fallos.

seed#saga#pattern#transactions#distributed#compensation#microservices

¿Qué es?

El patrón Saga gestiona transacciones que abarcan múltiples microservicios. En lugar de una transacción ACID distribuida (costosa y frágil), una saga es una secuencia de transacciones locales donde cada paso tiene una acción de compensación en caso de fallo.

Tipos

Coreografía

Cada servicio escucha eventos y decide qué hacer:

Pedido creado → Inventario reservado → Pago procesado → Pedido confirmado
                                     ↓ (fallo)
                              Inventario liberado ← Pago rechazado

Orquestación

Un orquestador central coordina los pasos:

Orquestador → Reservar inventario → Procesar pago → Confirmar pedido
           ← Compensar si falla algún paso

Coreografía vs Orquestación

AspectoCoreografíaOrquestación
AcoplamientoBajoMedio
VisibilidadDifícil de rastrearFlujo claro
ComplejidadCrece con serviciosCentralizada

¿Cuándo usarlo?

  • Transacciones que cruzan múltiples servicios (pedidos, pagos, inventario)
  • Cuando la consistencia eventual es aceptable
  • Procesos de negocio de larga duración (días o semanas)

¿Cuándo no usarlo?

  • Si puedes resolver con una sola base de datos — no agregues complejidad innecesaria
  • Cuando necesitas consistencia fuerte inmediata (transferencias bancarias en tiempo real)
  • Si tienes menos de 3 servicios involucrados — probablemente no vale la pena

Principios de diseño

  • Idempotencia — cada paso debe poder ejecutarse múltiples veces sin efectos secundarios
  • Compensaciones explícitas — cada transacción local necesita su reversa definida de antemano
  • Observabilidad — sin trazabilidad distribuida, depurar sagas es una pesadilla
  • Timeouts — definir cuánto esperar antes de considerar un paso como fallido

¿Por qué importa?

En sistemas distribuidos, las transacciones ACID no cruzan fronteras de servicio. El patrón saga coordina transacciones distribuidas mediante una secuencia de transacciones locales con compensaciones, manteniendo la consistencia eventual sin bloqueos distribuidos.

Referencias

  • Saga Pattern — Chris Richardson. Referencia canónica del patrón.
  • Sagas — Hector Garcia-Molina, Kenneth Salem, 1987. El paper original de Princeton.
  • Saga Pattern — Azure — Microsoft, 2024. Guía de implementación del patrón saga.
Conceptos