Что такое паттерн SAGA

Ответ

SAGA — это паттерн для управления распределёнными транзакциями в микросервисной архитектуре. Он разбивает длинную транзакцию на последовательность локальных операций, каждая из которых выполняется в своём сервисе. Если одна операция завершается неудачей, SAGA запускает компенсирующие транзакции для отката предыдущих шагов.

Пример сценария:

  1. Сервис заказов создаёт заказ (шаг 1).
  2. Сервис оплаты резервирует средства (шаг 2).
  3. Если доставка не может быть выполнена (ошибка на шаге 3), SAGA запускает компенсацию: отменяет резерв и удаляет заказ.

Типы реализации:

  • Хореография (без центрального координатора, сервисы общаются через события).
  • Оркестрация (центральный координатор управляет процессом).
// Пример оркестрации (псевдокод)
class OrderSaga {
  async execute() {
    try {
      await orderService.create();
      await paymentService.reserve();
      await deliveryService.schedule();
    } catch (error) {
      await paymentService.cancelReserve(); // Компенсация
      await orderService.cancel(); 
    }
  }
}