Введение и определени.
Паттерн Saga (Сага) — это архитектурный шаблон проектирования, который используется для управления распределенными транзакциями и обеспечения консистентности данных в микросервисной архитектуре. Вместо одной глобальной транзакции (которая блокирует базы данных), Saga разбивает бизнес-процесс на цепочку отдельных локальных транзакций, где каждый микросервис обновляет свою собственную базу данных независимо от других.
Пример:
Успешный путь: [Шаг 1: Оплата] ---> [Шаг 2: Склад] ---> [Шаг 3: Доставка]
Путь сбоя: [Шаг 1: Оплата] ---> [Шаг 2: Склад (Ошибка!)]
|
(Компенсация: Возврат денег) <--- [Отмена брони товара]
Два способа реализации Saga
Существует два основных подхода к координации шагов в паттерне Saga:
- Хореография (Choreography)
Микросервисы общаются друг с другом напрямую через события (Event-Driven), без единого центра управления.
- Принцип: Сервис А выполняет действие и публикует событие. Сервис Б слушает это событие, выполняет свое действие и публикует новое событие.
- Плюсы: Нет единой точки отказа; просто добавить новые сервисы.
- Минусы: Сложно отслеживать общую логику процесса; риск запутаться в связях (спагетти-архитектура).
- Оркестрация (Orchestration)
Существует центральный элемент — Оркестратор (Saga Orchestrator), который управляет всем процессом.
- Принцип: Оркестратор отправляет команды сервисам, получает от них ответы и решает, какой шаг выполнять следующим или когда запускать компенсацию.
- Плюсы: Вся бизнес-логика процесса собрана в одном месте; легко тестировать и контролировать состояние.
- Минусы: Оркестратор может стать единой точкой отказа и усложнить архитектуру.
Сравнение подходов
| Характеристика | Хореография (Choreography) | Оркестрация (Orchestration) |
| Управление | Децентрализованное (на событиях) | Централизованное (команды) |
| Сложность | Высокая при росте системы | Ниже, логика в одном месте |
| Зависимости | Сервисы знают о событиях друг друга | Сервисы изолированы, знает только оркестратор |
| Подходит для | Подходит для Простых цепочек (2–3 шага) | Сложных бизнес-процессов (4+ шагов) |
Плюсы и минусы паттерна Saga
- Преимущества:
- Высокая производительность (нет долгих блокировок БД).
- Поддержка распределенных систем и разных типов БД (SQL, NoSQL).
- Высокая отказоустойчивость благодаря компенсациям.
- Недостатки:
- Сложность отладки и мониторинга.Отсутствие изоляции данных (другие транзакции могут видеть промежуточные «грязные» данные).
- Необходимость писать компенсирующий код для каждого шага.