Saga vs Process Manager: это одно и то же?
В мире распределенных систем существует множество подходов к управлению процессами и согласованностью данных. Часто для управления согласованностью применяют подходы, предназначенные для управления процессами, и наоборот. Часто вследствие неправильного применения подходов распределенные системы становятся неуправляемыми.
Один из источников путаницы - смешивание Saga и Process Manager. Давайте разберемся чем они концептуально отличаются.
Что такое Saga в классическом понимании
Saga - паттерн управления согласованностью данными и транзакциями в распределенных системах.
Суть паттерна: Вместо одной большой транзакции, процесс разбивается на несколько последовательных локальных транзакций. Каждая выполняется в своей ограниченной области и публикует события или команду для следующего шага.
Что такое Process Manager
Process Manager - это паттерн проектирования, который позволяет управлять сложными процессами, выступая в качестве центрального координатора/оркестратора.
Суть паттерна: В распределенной системе есть сервис (служба), выступающий в качестве центрального "мозга", координатора. Он хранит состояние процесса, реагирует на входящие события и на основе логики принимает решение, какую команду отправить следующему участнику.
Ключевые различия паттернов
Между этими паттернами есть фундаментальные различия.
Фокус
- Saga - это управление транзакциями и согласованностью данными, она решает проблему консистентности.
- Process Manager - управление workflow (потоком) и логикой процесса. Он решает проблему консистентности.
Состояние
- Saga обычно реализуется без сохранения состояния. Решения принимаются на основе входящих событий.
- Process Manager обязательно хранит состояние процесса. Часто реализуется как State Machine с сохранением состояния в хранилище.
Тип логики
- Saga - это последовательность локальных транзакций с механизмом отката. Это продвинутый "транзакционный скрипт" для распределённой среды.
- Process Manager - это движок workflow или State Machine. Управляет сложной логикой потока: условия (if/else), параллельные ветки (fork/join), циклы, ожидание внешних событий и триггеров.
Компенсации как обязательный элемент
- В Saga компенсации - неотъемлемая часть паттерна. Его центральный механизм.
- В Process Manager - компенсаций может и не быть. Процесс может завершиться каким-либо терминальным статусом, указывающим на ошибку - failed/cancelled.
Отношение между ними
- Saga - это инструмент согласованности данных и компенсаций.
- Process Manager — координатор/орchestrator, который может использовать Saga как шаги внутри более сложного процесса, для поддержки согласованность данных.
Заключение
Не путайте инструменты:
- Нужна согласованность в распределённой транзакции - используйте Saga.
- Нужен сложный, долгоживущий бизнес-процесс с состояниями, ветвлениями и правилами - Process Manager.
Часто в реальных проектах они комбинируются - и это нормально. Главное - понимать границы ответственности.
Мой телеграм-канал