Event-Driven Business Process Orchestration

Рассмотрим очередной популярный подход к проектированию систем для управления и координации выполнения бизнес-задач или процессов на основе событий. В общем случае это микс Хореографии и Оркестрации. Рассмотрим их подробнее.

Хореография

Для привлечения внимания и реального примера работы хореографии
Для привлечения внимания и реального примера работы хореографии

Хореография — разработка систем, где взаимодействие между компонентами или службами происходит без необходимости в центральном контроллере (организаторе, дирижёре — как вам ближе). В таких системах каждый компонент отвечает за понимание своей роли и координацию общения с другими компонентами системы. Чем-то похоже на балет, где у каждой балерины своя роль, но в сумме получается выступление, а не соло программа со случайными столкновениями участниц на сцене.

Можно выделить основные стороны архитектуры:

  1. Децентрализованное управление: система распределяет управление между участвующими компонентами. Каждый из них самостоятельно решает, как реагировать на события или сообщения, которые он получает.

  2. Автономность: компоненты в отлаженной системе должны работать автономно, не полагаясь на внешнюю координацию (как балерины: у них нет суфлера или человека, бегающего за ними с криками: «Куда ты, Света!!!»). Они отвечают за интерпретацию входящих сообщений и запуск соответствующих действий на основе своей внутренней логики.

  3. Слабая связь: данный подход способствует слабой связи между компонентами, позволяя им взаимодействовать без сильной зависимости от реализаций друг друга. Этот аспект повышает гибкость системы и облегчает обслуживание и масштабируемость.

  4. Асинхронная связь: связь между компонентами в хореографических системах обычно асинхронная. Компоненты обмениваются сообщениями или событиями, не требующими немедленного реагирования, что обеспечивает лучшую масштабируемость и отказоустойчивость.

  5. Управляемые события: компоненты реагируют на события или изменения состояния системы. События запускают действия внутри отдельных компонентов, и поведение системы определяется коллективными реакциями этих компонентов.

Хореография обычно используется там, где системы должны быть масштабируемыми, устойчивыми и адаптируемыми. Для примера — абстрактная архитектура микросервисов, где каждая служба выполняет определенную функцию и взаимодействует с другими службами посредством асинхронного обмена сообщениями. Каждый сервис знает только свою маленькую часть, и нет жестких рамок на выполнение определенной, четко поставленной, ограниченной временем, глобальной задачи.

Оркестрация

Куда нам без парня с палкой
Куда нам без парня с палкой

Вообще считается (правда, не знаю, кем), что эволюция обезьяны в человека началась с того, что одна из них взяла палку в руки и заставила других работать.

В нашем же случае оркестрация — разработка систем, где взаимодействие между компонентами или службами происходит при координации центральным контроллером или оркестратором — дирижёром — который координирует выполнение различных задач или процессов, направляя их к соответствующим участникам или системам на основе заранее определенных правил и условий. В контексте программирования и архитектуры систем это означает централизованное управление потоком задач и действий в системе. Пример из реального мира: оркестр под управлением дирижёра. Благодаря его командам мы слышим прекрасную музыку (интересно, есть ли выступление моргенштерна с оркестром? Если да, то этот принцип работает не всегда), а не какофонию.

Можно выделить основные стороны архитектуры:

  1. Централизованное управление: оркестратор или центральный контроллер определяет порядок выполнения задач и управляет их распределением между участниками системы.

  2. Жестко заданные процессы: порядок выполнения задач заранее определяется и настраивается в рамках оркеструемого процесса. Это может включать в себя последовательность шагов, условия выполнения и прочее.

  3. Управление состоянием: дирижёр может отслеживать состояние выполнения процесса и реагировать на изменения, например, перераспределяя задачи или принимая решения на основе текущего контекста.

  4. Управление ресурсами: оркестрация также может включать в себя управление ресурсами, такими как выделение вычислительных мощностей, доступ к данным и другие аспекты, необходимые для выполнения процесса.

Оркестрация часто используется в распределенных системах, микросервисной архитектуре и облачных вычислениях для координации выполнения сложных задач, например деплой, управление контейнерами, автоматизация документооборота.

Событийно-ориентированная оркестрация бизнес-процессов

В нашем случае это смесь подходов, так как только ситхи возводят все в абсолют. А если серьезно, то сложно добиться использования одного подхода, чаще всего это вопрос акцентов.

Для понимания скрещивания различных подходов
Для понимания скрещивания различных подходов

Это подход к проектированию, используемый для управления и координации выполнения задач или процессов на основе асинхронных событий. Он предполагает использование принципов событийной архитектуры(Event‑Driven) для организации потока действий внутри системы.

Можно выделить основные стороны архитектуры:

  1. Децентрализованное выполнение: в то время как центральный контроллер управляет логикой оркестровки, выполнение задач обычно децентрализовано. Потребители событий работают автономно, выполняя назначенные им действия в ответ на события без прямых инструкций от контролера. Децентрализация обеспечивает большую масштабируемость, гибкость и отказоустойчивость системы.

  2. Асинхронная связь: события создаются и потребляются асинхронно без необходимости немедленного реагирования. Такая асинхронная природа позволяет системам обрабатывать большие объемы событий и поддерживать оперативность реагирования даже при различных нагрузках.

  3. Динамическая адаптация: данный подход обеспечивает динамическую адаптацию рабочих процессов на основе изменяющихся условий или требований. Рабочие процессы могут эволюционировать с течением времени по мере возникновения новых событий или изменения состояния системы, что обеспечивает оперативное и гибкое управление процессами.

Для лучшего понимания рассмотрим также ключевые компоненты:

  1. Потребители событий — компоненты или службы в системе, которые отслеживают события и реагируют на них. Эти потребители отвечают за обработку событий и инициирование соответствующих действий или рабочих процессов. Они подписываются на определенные типы событий и выполняют задачи на основе данных о событиях.

  2. Брокеры событий — очереди сообщений или системы публикации‑подписки, облегчают взаимодействие между производителями (компонентами, генерирующими события) и потребителями событий. Они действуют как посредники, которые направляют события соответствующим потребителям на основе критериев подписки.

  3. Контроллер (Дирижёр) — это центральный компонент, ответственный за координацию потока действий на основе полученных событий. Он анализирует входящие события, определяет последовательность задач или действий, которые необходимо выполнить, и делегирует выполнение соответствующим компонентам или службам. Организатор может поддерживать состояние текущих рабочих процессов и управлять общей логикой выполнения.

«Хорошо, но это even driven orchestration, — возразите вы, — какие плюсы от бизнес-процессов?» Ниже рассмотрим основные плюсы:

  1. Централизация процесса принятия решений: инструменты для организации процессов, такие как Camunda, предназначены для принятия решений о том, что должно происходить в бизнес‑процессе, а затем — для выполнения соответствующих действий. Поэтому ответственность за принятие решений может быть удалена из мест, которым она не принадлежит. Кроме того, легче вносить изменения в соответствии с меняющимися техническими и/или бизнес‑требованиями.

  2. Использование BPMN (Business Process Model and Notation) диаграмм в разработке: процессы описываются с помощью визуальных диаграмм, это автоматически и документация, и легкий способ внести изменения в процессы, провести быстрый аудит системы, оперативно находить логические ошибки в процессах, напрямую использовать опыт людей, понимающих в бизнес‑процессах, но не знающих ничего о программировании или UML-диаграммах. Кроме того, BPMN предоставляет отличный набор способов обработки «плохих сценариев».

Микро-пример: «Доставка еды»:

Описание процесса
Описание процесса

*Для простоты пример реализует только поток успешного выполнения.

Ключевые Компоненты:

Служба-Дирижер (Моя доставка) — это микросервис SpringBoot, включающий Camunda (Community edition) в качестве встроенного движка процессов BPMN. Camunda добавляется как библиотека приложений и может запускаться, останавливаться и масштабироваться вместе с нашим микросервисом.

Бизнес‑модель в нотации BPMN 

BPMN
BPMN

Компоненты модели:

  1. Сервисные задачи используются для вызова или запуска бизнес‑логики. У нас это проверка наличия продуктов, готовка еды, поиск доставщика и непосредственно доставка.

  2. Событие перехвата промежуточного сообщения (Intermediate Message Catch Event): этап процесса, на котором соответствующий экземпляр процесса ожидает входящего сообщения перед началом потока.

  3. События «Старт» и «Стоп»: думаю, тут объяснение будет лишним.

  4. Параллельный шлюз позволяет запускать процессы параллельно, мы предполагаем, что поиск доставщика и приготовление еды можно делать параллельно, и отдавать на доставку, только если оба процесса завершены.

Для простоты и уменьшения количества кода (написанного левой ногой сегодня) сторонние микросервисы представлены как слушатели событий в нашем же приложении (com.delivery.camunda.listeners). В реале этот будут приложения, где повар или доставщик будет реагировать на получение заказа. Обработчики процессов: com.delivery.camunda.delegates. В нашем случае для упрощения они просто перенаправляют сообщение.

https://github.com/kain64/deliveryexample/tree/main

Вообще интересная это штука, камунда, надо будет... вообще про BPMN и Camunda много раз писали, поэтому не надо. Так что концовка скомкана. Надеюсь, не утомил того, кто осилил, своими рассуждениями.

пара-пара-пам
пара-пара-пам

Комментарии (0)