Вопрос проверяет понимание распределённых транзакций и способов управления согласованностью данных в микросервисах.
Saga — это паттерн управления распределёнными транзакциями без использования глобальных блокировок.
Он разбивает одну большую операцию на последовательность локальных транзакций.
Если один из шагов завершается ошибкой, выполняются компенсирующие действия.
Такой подход позволяет сохранять согласованность данных в распределённой системе.
В микросервисной архитектуре невозможно использовать классические ACID-транзакции между сервисами. Saga решает эту проблему через цепочку согласованных действий.
Saga — это последовательность локальных транзакций, каждая из которых имеет компенсирующую операцию.
Каждый шаг:
Выполняет изменение данных
Публикует событие о результате
Может быть отменён компенсирующим действием
Типичный сценарий:
Создание заказа
Резервирование оплаты
Резервирование склада
Если шаг 3 падает:
выполняется отмена оплаты
заказ помечается как отменённый
Компенсация:
не откатывает состояние буквально
приводит систему в логически корректное состояние
Пример идеи:
def reserve_payment():
...
def cancel_payment():
...
Saga используется:
в e-commerce
в платёжных системах
в любых распределённых бизнес-процессах
Saga — основной способ управления согласованностью данных в микросервисах без глобальных транзакций.