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

Расскажи про паттерн SAGA: оркестрация и хореография.

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

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

sobes.tech AI

Паттерн SAGA используется для управления распределёнными транзакциями в микросервисной архитектуре, где классические транзакции ACID невозможны.

Основная идея:

  • Транзакция разбивается на последовательность локальных транзакций в разных сервисах.
  • Каждая локальная транзакция имеет компенсирующую операцию для отката в случае ошибки.

Существует два основных подхода реализации SAGA:

  1. Оркестрация (Orchestration)

    • Центральный компонент — оркестратор — управляет последовательностью шагов.
    • Оркестратор вызывает сервисы по очереди, контролирует успех или неудачу каждого шага.
    • При ошибке оркестратор инициирует компенсирующие транзакции для уже выполненных шагов.
  2. Хореография (Choreography)

    • Нет центрального контроллера.
    • Каждый сервис публикует события о выполнении своих действий.
    • Другие сервисы подписываются на эти события и реагируют, выполняя свои локальные транзакции.
    • При ошибке сервисы самостоятельно запускают компенсирующие операции, основываясь на событиях.

Пример:

  • При оформлении заказа (Order Service) создаётся заказ.
  • Публикуется событие "OrderCreated".
  • Сервис оплаты (Payment Service) слушает это событие, пытается провести оплату.
  • Если оплата успешна, публикуется "PaymentSucceeded".
  • Если оплата неудачна, публикуется "PaymentFailed", и Order Service запускает отмену заказа.

Выбор между оркестрацией и хореографией зависит от требований к контролю, сложности бизнес-логики и предпочтений в архитектуре.