Вопрос проверяет понимание согласованности данных в распределённых системах и отказа от классических транзакций.
Saga решает проблему распределённых транзакций в микросервисах.
Вместо одной глобальной транзакции используется цепочка локальных операций.
Каждый шаг имеет компенсирующее действие.
Это позволяет системе оставаться согласованной при ошибках.
Подход хорошо масштабируется.
В микросервисной архитектуре невозможно использовать классические ACID-транзакции между сервисами.
Проблемы распределённых транзакций:
разные базы данных
сетевые сбои
высокая связанность сервисов
Использование двухфазного коммита:
сложно масштабировать
снижает надёжность
Saga — это последовательность локальных транзакций, где:
каждая операция выполняется в своём сервисе
при ошибке выполняются компенсирующие действия
Пример:
создать заказ
зарезервировать оплату
зарезервировать товар
Если шаг 3 не удался:
отменяется резерв оплаты
заказ помечается как отменённый
нет глобальной блокировки
каждый сервис автономен
система достигает eventual consistency
Saga позволяет управлять согласованностью данных в микросервисах без использования распределённых транзакций.