Назад к вопросам
СБЕР
Senior
4
Расскажи про паттерн SAGA: оркестрация и хореография.
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Паттерн SAGA используется для управления распределёнными транзакциями в микросервисной архитектуре, где классические транзакции ACID невозможны.
Основная идея:
- Транзакция разбивается на последовательность локальных транзакций в разных сервисах.
- Каждая локальная транзакция имеет компенсирующую операцию для отката в случае ошибки.
Существует два основных подхода реализации SAGA:
-
Оркестрация (Orchestration)
- Центральный компонент — оркестратор — управляет последовательностью шагов.
- Оркестратор вызывает сервисы по очереди, контролирует успех или неудачу каждого шага.
- При ошибке оркестратор инициирует компенсирующие транзакции для уже выполненных шагов.
-
Хореография (Choreography)
- Нет центрального контроллера.
- Каждый сервис публикует события о выполнении своих действий.
- Другие сервисы подписываются на эти события и реагируют, выполняя свои локальные транзакции.
- При ошибке сервисы самостоятельно запускают компенсирующие операции, основываясь на событиях.
Пример:
- При оформлении заказа (Order Service) создаётся заказ.
- Публикуется событие "OrderCreated".
- Сервис оплаты (Payment Service) слушает это событие, пытается провести оплату.
- Если оплата успешна, публикуется "PaymentSucceeded".
- Если оплата неудачна, публикуется "PaymentFailed", и Order Service запускает отмену заказа.
Выбор между оркестрацией и хореографией зависит от требований к контролю, сложности бизнес-логики и предпочтений в архитектуре.