Ответ
SAGA — это паттерн для управления распределёнными транзакциями в микросервисной архитектуре. Он разбивает длинную транзакцию на последовательность локальных операций, каждая из которых выполняется в своём сервисе. Если одна операция завершается неудачей, SAGA запускает компенсирующие транзакции для отката предыдущих шагов.
Пример сценария:
- Сервис заказов создаёт заказ (шаг 1).
- Сервис оплаты резервирует средства (шаг 2).
- Если доставка не может быть выполнена (ошибка на шаге 3), SAGA запускает компенсацию: отменяет резерв и удаляет заказ.
Типы реализации:
- Хореография (без центрального координатора, сервисы общаются через события).
- Оркестрация (центральный координатор управляет процессом).
// Пример оркестрации (псевдокод)
class OrderSaga {
async execute() {
try {
await orderService.create();
await paymentService.reserve();
await deliveryService.schedule();
} catch (error) {
await paymentService.cancelReserve(); // Компенсация
await orderService.cancel();
}
}
}