Что такое Saga Pattern
Распределённые транзакции через последовательность событий
Saga Pattern — паттерн для управления распределёнными транзакциями через последовательность локальных транзакций с компенсирующими действиями при сбоях.
Проблема
- Микросервисы имеют свои базы данных
- Классические ACID-транзакции невозможны
- Нужна согласованность между сервисами
Типы Saga
- Хореография — сервисы обмениваются событиями
- Оркестрация — центральный координатор управляет
Хореография
- Сервисы подписаны на события друг друга
- Каждый сервис публикует результат
- Нет единой точки отказа
- Сложнее отслеживать состояние
Оркестрация
- Saga-координатор управляет потоком
- Вызывает сервисы последовательно
- Проще отслеживать и отлаживать
- Риск единой точки отказа
Компенсирующие транзакции
- Отмена уже выполненных шагов
- Должны быть идемпотентными
- Семантическая отмена (не rollback)
- Пример: возврат платежа вместо отмены