Introducción: Transacciones distribuidas
El patrón Saga coordina una serie de pasos distribuidos con acciones de compensación si algo falla.
En lugar de un commit global, cada servicio confirma su paso y publica eventos. Si ocurre un error, se ejecutan compensaciones.
Esto permite consistencia eventual sin bloquear todo el sistema.

Prompt: Saga flow with forward and compensating steps, clean minimal style.
1. Naturaleza: Dominó con reversa
Imagina una fila de fichas de dominó que puedes revertir si algo falla.
En una Saga, cada paso tiene un “anti-paso” para deshacer la operación cuando sea necesario.

Prompt: Domino chain with undo arrows, soft illustration.
2. Mundo Real: Reserva de viaje
Reservas vuelo, luego hotel y luego auto. Si el hotel falla, debes cancelar el vuelo.
Las cancelaciones son compensaciones. Cada servicio maneja su propia lógica de reversa.
La Saga asegura que el sistema no quede en un estado inconsistente.

Prompt: Travel booking flow with compensations, clean flat style.
3. Implementación en C#: Código Paso a Paso
public class SagaState { public bool PagoOk; public bool StockOk; }
public class OrderSaga
{
public SagaState State = new();
public void OnPagoConfirmado() => State.PagoOk = true;
public void OnStockReservado() => State.StockOk = true;
public void CompensarPago() { /* revertir */ }
public void CompensarStock() { /* revertir */ }
}
Una Saga puede ser orquestada (con coordinador) o coreografiada (por eventos).
Lo importante es definir claramente los pasos y sus compensaciones.
4. Saga vs 2PC
2PC bloquea recursos hasta completar la transacción global. Saga no bloquea, pero acepta consistencia eventual.
Si necesitas alta disponibilidad, Saga suele ser mejor opción.
5. Diagrama UML

Prompt: UML diagram of saga pattern, clean vector layout.

Prompt: Saga compensation flow diagram, minimal infographic style.
⚠️ Cuándo NO Usar Saga
- Si necesitas transacciones ACID estrictas.
- Si las compensaciones son imposibles o demasiado costosas.
- Si el dominio es simple y no requiere distribución.
💪 Ejercicio
Define una Saga para un pedido: pago, inventario, envío. Especifica las compensaciones.
Conclusión
Saga es el patrón clave para transacciones distribuidas en microservicios.
Con pasos claros y compensaciones bien diseñadas, logras consistencia eventual sin sacrificar disponibilidad.