Sobes.tech
Назад к вопросам
Senior
4

Сталкивались ли с проблемой распределённых транзакций? Расскажите про паттерн Saga.

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

Распределённые транзакции возникают, когда одна бизнес-операция затрагивает несколько независимых сервисов или баз данных, и нужно обеспечить согласованность данных между ними. Классический подход с двухфазным коммитом (2PC) часто сложен и плохо масштабируется.

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

Пример:

  • Сервис заказов создаёт заказ.
  • Сервис оплаты резервирует средства.
  • Сервис доставки планирует доставку.

Если, например, планирование доставки не удалось, то запускаются компенсирующие операции: отмена резерва средств и отмена заказа.

Saga может быть реализована двумя способами:

  • Оркестрация: центральный координатор управляет выполнением шагов и компенсирующих транзакций.
  • Хореография: каждый сервис публикует события и реагирует на них, без центрального координатора.

Этот паттерн помогает добиться согласованности в распределённых системах без блокировок и сложных протоколов.