Укротитель хаоса: как Process Manager спасает ваши распределенные системы от "спагетти-вызовов"
В распределенных системах, помимо задач управления данными и транзакциями, существуют задачи управления самими процессами. Бывают сложные сценарии с множеством ветвлений, условиями, повторными попытками, откатами и длительными ожиданиями. В таких случаях уже невозможно либо очень трудно использовать простые цепочки вызовов и реакцию на события, это быстро превращает нашу систему в «спагетти» — запутанную, хрупкую и неподдающуюся тестированию.
На помощь приходит паттерн Process Manager.
Что из себя представляет Process Manager
Process Manager — паттерн проектирования, который позволяет управлять логикой сложных процессов, в том числе и в распределенных системах. Он выступает в роли центрального координатора, отслеживающего каждый шаг процесса и принимающего решения о дальнейших действиях.
Типичная реализация Process Manager — надстройка над другим паттерном — State Machine или State Charts. Но в отличие от состояния, Process Manager это сохраняемая (персистентная) State Machine. Он знает на каком шаге в данный момент находится процесс и решает, что делать на основе входящих событий.
Важно уточнить, что Process Manager не владеет данными, он владеет только состоянием процесса.
Каноническое описание паттерна было представлено в книге "Enterprise Integration Patterns" (Gregor Hohpe, Bobby Woolf), там он определялся как компонент/маршрутизатор, управляющий состоянием долгоживущих процессов и, реагируя на сообщения, принимающий решения о запуске действий в других частях системы.
Но наибольшую популярность этот паттерн получил в работах Chris Richardson, посвященных микросервисам.
Требования к инфраструктуре
Для внедрения и реализации Process Manager в распределенной системе необходимо обеспечить определенные требования к инфраструктуре:
- Система обмена сообщениями с надежным механизмом доставки.
- Идемпотентность обработчиков сообщений.
- Хранилище состояния для персистентного сохранения/загрузки текущего состояния.
- Обработка таймаутов и повторный запуск (retry) для управления задержками, повторными запусками и эскалацией.
- Мониторинг и логирование для отслеживания процесса.
Без этих требований реализация паттерна будет ненадежной, возможны ошибки в процессах и потери состояния.
В чем его отличие от SAGA
SAGA — это паттерн для управления распределенными долгоживущими транзакциями. Process Manager фокусируется на общем управлении workflow. Более того, Process Manager может включать несколько SAGA внутри себя.
SAGA решает проблемы консистентности (consistency), Process Manager — проблемы координации (coordination).
Когда стоит применять Process Manager
Какими свойствами должен обладать процесс, чтобы мы поняли, что нужно применять Process Manager:
- Сложность и ветвления: процесс имеет условные шаги, параллельные ветки или циклы (например, повторные проверки).
- Долгоживущий процесс: шаги растянуты во времени, с ожиданием внешних событий (таймауты, асинхронные ответы).
- Необходимость состояния: требует хранения промежуточных данных и необходима возможность восстановления (например, сбои).
- Множество участников: одновременно вовлекаются несколько сервисов или внешних систем, где простая SAGA уже не справляется.
Часто Process Manager применяют в таких сценариях:
- Обработка заказа. После размещения заказа Process Manager координирует проверку платежа, резервирование товаров, подготовку доставки. Если нужно, то инициирует повтор шага, альтернативные сценарии или отмену.
- Одобрение кредита. Процесс включает проверку кредитной истории, оценку рисков, верификацию документов, иногда даже ручное участие. Process Manager управляет ветвлениями: если риски высоки — запрос дополнительных данных, активация альтернативных веток; если одобрен — активация счета.
- Назначение лечения. В системах для больниц и врачей Process Manager отслеживает этапы: диагностику, консультации специалистов, назначение терапии. Он реагирует на события вроде результатов тестов и эскалирует при задержках.
Мой канал в телеграм