Сервис обмена сообщениями, управляемый процессами
Сервис обмена сообщениями, управляемый процессами (англ. process driven messaging service, PDMS) — это сервис, ориентированный на процессы и предназначенный для обмена сообщениями или данными. В таком сервисе задачи (jobs) и триггеры могут объединяться для создания рабочего процесса (workflow) передачи сообщения[1].[2] В отличие от традиционных систем обмена сообщениями, которые функционируют как пассивные каналы для передачи данных, PDMS является процессно-ориентированным, и логика перемещения данных изначально заложена в самом сервисе[1].
Платформы обмена сообщениями считаются ключевыми элементами инфраструктуры Интернета[3]. Помимо стандартных сообщений и данных, такие сервисы могут обрабатывать телефонные вызовы[2]. Изначально понятие охватывало в основном электронную почту и мгновенные сообщения, однако со временем оно эволюционировало, включив в себя сложную мультимедийную электронную почту, различные варианты мгновенного обмена сообщениями и связанные решения для стационарной и мобильной передачи. Можно утверждать, что всё, что передаётся по Интернету и беспроводным телекоммуникационным каналам, представляет собой сообщения.
Сервис обмена сообщениями, управляемый процессами, осуществляет обмен сообщениями и данными между системами, приложениями или людьми на основе событийно-управляемых цепочек процессов[3].
Структура
Сервис обмена сообщениями, управляемый процессами, — это сервис, в котором задачи и триггеры объединяются для создания рабочего процесса для сообщения; этот рабочий процесс можно рассматривать как отдельный процесс.
Рабочий процесс (workflow) исполняется при срабатывании триггера. Триггер активирует одну или несколько задач, которые в свою очередь могут запускать другие задачи. Даже если все задачи выполнены, рабочий процесс остаётся активным и ожидает повторного срабатывания[4]
Рабочие процессы
Рабочий процесс (workflow) в рамках PDMS служит «обёрткой» для триггеров и задач, обеспечивая последовательность действий и событий, которую можно многократно запускать без необходимости повторно её настраивать. Такой процесс выступает в роли контейнера: он группирует статусы и действия — например, переводит запись из одного состояния в другое.[5]. Помимо триггеров и задач контейнер может содержать группы или артефакты. Все элементы внутри рабочего процесса становятся доступны для всех его триггеров и задач.
Понятие рабочего процесса может рассматриваться как шаблон части или всего бизнес-процесса. Запуск workflow может происходить по самым разным причинам — например, при наступлении события в домене или при явном вызове.
Для стандартизации логики процессов применяется нотация BPMN (стандарт ISO 19510), определяющая семантику элементов рабочих процессов. В конвейерах обработки медиа используется стандарт ISO/IEC 23090-8, который определяет объекты рабочих процессов и документы их описания[6].
Когда рабочий процесс, его триггеры и задачи активны, он находится в состоянии ожидания исполнения.
При создании workflow последняя задача добавляется первой, то есть задачи перечисляются в обратном порядке их исполнения. Аналогичным образом триггеры и задачи должны указываться в обратном порядке выполнения[7].
Реализация рабочих процессов может осуществляться через паттерны оркестрации и хореографии. Оркестрация предполагает централизованное управление единым сервисом-координатором и оптимальна для сложных процессов, требующих строгого контроля. Хореография основана на децентрализованном асинхронном обмене сообщениями и применяется для систем малого масштаба[8][9].
Задачи
Задача (job) выполняет конкретное действие, например отправку сообщения или изменение объекта — например, изменение метаданных в определённой единице. Это описание того, что система должна выполнить: задачей может быть самый разный набор действий. После активации задача может запускать другие задачи (например, для доставки сообщения). Она определяет, как система работает с данными, и является деятельностью в пределах домена системы.
Задачи позволяют инкапсулировать процесс — каждая задача представляет собой конфигурацию с входными параметрами, этапами выполнения, фильтрами для выбора узлов, а также параметрами контроля, такими как параллельный запуск шагов. Некоторые действия могут выполняться систематически и стать рутинной процедурой; такие процессы могут быть инкапсулированы и использоваться как основа для последующих процедур.
Механизмы обеспечения отказоустойчивости и обработки исключений при выполнении задач включают автоматические повторы (RetryPolicy) с экспоненциальной задержкой для устранения временных ошибок. Для изоляции сбоев применяется ограничение по времени выполнения (TimeoutPolicy), которое отменяет текущую попытку при превышении лимита или отсутствии прогресса. В случае исчерпания лимита повторов процесс переходит к специальному обработчику ошибок, который выполняет компенсирующие действия (паттерн Saga), отменяя ранее успешно завершённые шаги[10].
Триггеры
Триггер — это механизм, который инициирует или запускает рабочий процесс, активируя выполнение соответствующих действий. Компоненты, определяющие бизнес-логику и поведение, называются триггерами. Можно создать и настроить любое количество триггеров для автоматической или программируемой проверки, уведомлений, обработки данных и других операций в момент создания, изменения или удаления записи[11]. В современных событийно-ориентированных архитектурах, помимо базовых CRUD-операций, для инициации рабочих процессов применяются следующие типы триггеров[12]:
- вебхуки (HTTP-колбэки от сторонних провайдеров);
- подписки на шину сообщений (подключение к системам pub/sub);
- запланированный опрос (клиентский pull-запрос по расписанию);
- CDC на уровне логов (чтение журнала транзакций базы данных).
Кроме того, выделяют временные и условные триггеры[13][14]:
- одноразовая задержка (активация в точно указанное время);
- периодический cron (запуск по расписанию);
- фиксированный интервал (регулярная активация через заданные промежутки времени);
- условный триггер (срабатывание по расписанию с динамическим извлечением данных);
- внешний API-триггер (запуск процесса по внешнему событию).
Процессы
Процесс начинается в определённый момент в системе — например, когда триггер запускает экземпляр рабочего процесса.
Сервис обмена сообщениями, управляемый процессами, обычно применяется для управления более или менее сложными бизнес-процессами.
В хорошо развитой платформе такого типа все триггеры и задачи можно сделать доступными через публичный программный интерфейс (API), что даёт возможность строить процессы непосредственно через API.
Технологии и программирование
Сервис обмена сообщениями, управляемый процессами, основан на событийно-управляемой архитектуре, применимой при проектировании и реализации приложений и систем, которые передают события между слабо связанными программными компонентами и сервисами. В отличие от традиционных информационных систем, работающих по принципу запрос-ответ, событийные системы реагируют на события по мере их возникновения, позволяя системе динамически реагировать и отправлять персонализированные данные в зависимости от адресата и ситуации[4]. Для стандартизированного описания событийных данных применяется спецификация CloudEvents от CNCF, а для их фильтрации и выполнения запросов — CloudEvents SQL[15]. В качестве единой шины событий используется Apache EventMesh, обеспечивающий нативную поддержку спецификации CloudEvents[16].
Области применения
Сервисы данного класса применяются для обмена сообщениями между системами (System to System), для приложений класса Application to Person (A2P), с возможностью включения произвольных типов сообщений, обмена между приложениями (Application to Application), системами и пользователями (System to Person), для машинных взаимодействий (M2M), а также для любых сообщений или передачи данных между системами, приложениями и/или людьми, основанных на событийно-управляемых процессах. В финансовом секторе сервисы обмена сообщениями, управляемые процессами, используются с применением стандартов ISO 20022 и ISO 8583[17].. В логистике и управлении цепочками поставок применяются сценарии координации с поставщиками (A2A) и автоматизации оборудования (M2M) с использованием стандарта ISO 9506[17]..