Глоссарий

Saga Pattern

Saga — паттерн управления распределёнными транзакциями без использования 2PC. Длинная бизнес-транзакция разбивается на последовательность локальных транзакций. Каждая локальная транзакция публикует событие или сообщение. При сбое — выполняются компенсирующие транзакции.

Два типа

Пример: оформление заказа

CreateOrder → ReserveInventory → ProcessPayment → ShipOrder
  если ProcessPayment fails:
    → ReleaseInventory (компенсирующая)
    → CancelOrder (компенсирующая)

Сложности

Компенсирующие транзакции не всегда возможны (отправленное сообщение не отзовёшь). Saga даёт Eventual Consistency, а не ACID. Дебаг сложнее, чем обычная транзакция.