Сага — это паттерн управления распределёнными транзакциями в микросервисной архитектуре. Она представляет собой последовательность локальных транзакций, где каждая транзакция обновляет данные в рамках одного сервиса.
Если какая-либо локальная транзакция в последовательности завершается неудачей, сага выполняет набор компенсирующих транзакций, чтобы отменить изменения, сделанные предыдущими успешно завершёнными локальными транзакциями, восстанавливая таким образом целостность системы.
Два основных подхода к реализации саг:
Хореография (Choreography): Сервисы напрямую обмениваются событиями, не полагаясь на центральный координатор. Каждый сервис слушает события, генерируемые другими сервисами, и выполняет свои локальные транзакции и/или публикует новые события в ответ.
Оркестровка (Orchestration): Центральный оркестратор (сага-оркестратор) управляет последовательностью выполнения локальных транзакций. Оркестратор отправляет команды сервисам, чтобы они выполнили свои локальные транзакции, и реагирует на события, возвращаемые сервисами (успех/неудача), для принятия решений о следующем шаге или запуске компенсирующих транзакций.
Выбор реализации зависит от сложности бизнес-процесса, количества вовлеченных сервисов и требований к управляемости и наблюдаемости. Сага не обеспечивает атомарность в классическом понимании (ACID), но гарантирует eventual consistency.