Современные подходы к разработке программного обеспечения диктуют необходимость быстрого внедрения и изменения бизнес-сценариев прямо в продакшене. Особенно это критично для систем, где логика процессов часто корректируется — например, в финансовых, маркетинговых или рекламных платформах.

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

Немного теории:

Что такое оркестрация

Оркестрация — это управляемая последовательность действий и вызовов функций, организованная в определённую логику.

Проще говоря, это когда:

если условие X → выполняем действие A  
иначе → выполняем действие B 

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

Что такое BPMN

BPMN (Business Process Model and Notation) — это стандарт описания бизнес-процессов, позволяющий визуально моделировать логику работы системы.

Инструменты вроде Camunda Modeler дают возможность создавать диаграммы, которые можно прямо исполнять в коде.

Это ключевое преимущество: разработчик и аналитик работают над одной моделью, без двойного дублирования логики.

Camunda 7 Embedded: быстрая интеграция в код

Camunda 7 можно встроить прямо в Java-приложение как embedded-движок.

Это особенно удобно, если вы хотите локально тестировать или исполнять процессы без отдельного сервера.

Пример минимальной конфигурации:

<!-- pom.xml -->
<dependency>
  <groupId>org.camunda.bpm</groupId>
  <artifactId>camunda-engine</artifactId>
  <version>7.21.0</version>
</dependency>

Создадим простой процесс в Camunda Modeler — файл process.bpmn:

<bpmn:process id="example_process" isExecutable="true">
  <bpmn:startEvent id="StartEvent" name="Начало"/>
  <bpmn:serviceTask id="CheckCondition" name="Проверить условие"
                    camunda:class="com.example.CheckConditionDelegate"/>
  <bpmn:endEvent id="EndEvent" name="Конец"/>
  <bpmn:sequenceFlow id="Flow1" sourceRef="StartEvent" targetRef="CheckCondition"/>
  <bpmn:sequenceFlow id="Flow2" sourceRef="CheckCondition" targetRef="EndEvent"/>
</bpmn:process>

А теперь — код Java:

import org.camunda.bpm.engine.*;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import org.camunda.bpm.engine.delegate.JavaDelegate;
import org.camunda.bpm.engine.delegate.DelegateExecution;

public class Example {
    public static void main(String[] args) {
        ProcessEngine processEngine = ProcessEngineConfiguration
                .createStandaloneInMemProcessEngineConfiguration()
                .buildProcessEngine();

        RepositoryService repositoryService = processEngine.getRepositoryService();
        repositoryService.createDeployment()
                .addClasspathResource("process.bpmn")
                .deploy();

        ProcessInstance instance = processEngine.getRuntimeService()
                .startProcessInstanceByKey("example_process");

        System.out.println("Процесс запущен: " + instance.getId());
    }
}

class CheckConditionDelegate implements JavaDelegate {
    @Override
    public void execute(DelegateExecution execution) {
        boolean flag = Math.random() > 0.5;
        System.out.println("Условие = " + flag);
        execution.setVariable("result", flag ? "A" : "B");
    }
}

Проблемы и ограничения Camunda 7 Embedded

Camunda 7 требует постоянного соединения с базой данных (по умолчанию SQL). В продакшене чаще всего используется PostgreSQL, но у него ограниченный пул соединений, что при большом числе потоков может стать узким местом.

? В тестовой среде можно использовать H2 — это встроенная база, простая и быстрая. Однако Camunda официально не рекомендует её для продакшена.

Альтернативы: Picodata, Zeebe и др.

В некоторых случаях стоит рассмотреть Picodata — она совместима по протоколу с PostgreSQL и масштабируется горизонтально. Это может быть выходом, если требуется высокая производительность при одновременном доступе множества экземпляров Camunda.

Почему не Zeebe (Camunda 8)?

Zeebe требует отдельный кластер и дополнительную DevOps-инфраструктуру. Embedded-вариант Camunda 7 гораздо проще и быстрее встраивается в микросервисную архитектуру.

Итоги:

Оркестрация на BPMN — это не просто визуализация логики, а живое отражение бизнес-процесса в коде.

Интеграция Camunda 7 Embedded позволяет:

  • быстро вводить новые сценарии в продакшен

  • легко изменять последовательности действий без полной сборки приложения

  • использовать единый язык общения между аналитиками и разработчиками


Подписывайтесь на канал для получения информации от ИТ архитектора с более чем 20 летним стажем.

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


  1. AstarothAst
    26.10.2025 11:24

    А теперь задание со звездочкой - быстро и на кончиках пальцев понять в каком месте bpmn используется произвольный кусок кода? И в обратную сторону - какой конкретно код лежит под каждым кубиком диаграммы? Пока двусторонний переход из bpmn в код и обратно нельзя будет сделать по привычному ctrl+клик использование камунды в продакшене будет мучением для развития и поддержки.


    1. askid Автор
      26.10.2025 11:24

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


      1. AstarothAst
        26.10.2025 11:24

        вызывает функцию описанную в JAVA

        Всего одну? Вы понимаете, что по сути каждый элемент bpmn будет ссылаться на "какой-то код" - каждый кубик, каждая стрелка будет смотреть в java-код. Не имея быстрого и надежного средства навигации туда-сюда поддержка и развитие превратится в адЪ, где львиная доля времени будет уходить на поиски откуда ноги растут.


    1. eigrad
      26.10.2025 11:24

      А без BPMN? Зная, примерно, что какая-то функциональность должна быть реализована в коде, как ее найти? И по коду, как разобраться за какую часть бизнес процесса этот код отвечает? Ctrl+клик не сложно реализовать, но имхо это повлияет не так сильно, как в целом наличие описанных процессов в BPMN. (Впрочем это не оправдывает пост, который обрывается на середине слившись во что-то странное после спорного аргумента против postgresql)


      1. askid Автор
        26.10.2025 11:24

        Ваши представления строятся на достаточно небольших проектах, в которых видимо нет тестовой, дев и прод среды. Не прописаны регламенты вывода в прод, проведение определенных процедур для деплоя. Мысль в первую очередь в том чтобы пройти этот путь, задеплоить сервис и при необходимости быстро менять бизнес процессы (в определенных пределах конечно) и не ждать 1-2 спринта пока изменения появятся на проде. Использование bpmn решает эту задачу т.е. ускоряя time-to-market практически до минут, а не дней и недель.

        Если у вас коротки процесс вывода в прод и бизнес логика примитивна (простая), bpmn вам только помешает и не предоставит тех возможностей о которых я говорил.

        Насчет PG - все просто попробуйте его нагрузить 100к параллельными запросами и потом я готов обсудить как вы себя чувствуете после этого, как вырос SLA и т.п.

        То что я описал релевантно для больших, корпоративных, высоконагруженных проектов.


        1. eigrad
          26.10.2025 11:24

          Не знаю почему этот комментарий адресован сюда. Я работал с системой где на postgresql кластере было легко получить 100к параллельно висящих запросов но не заметить при этом больших проблем на проде.


        1. AstarothAst
          26.10.2025 11:24

          Новый правленый bpmn точно так же нужно выводить в прод, его точно так же нужно тестировать. На круг сам по себе его наличие ничего не ускоряет.


      1. AstarothAst
        26.10.2025 11:24

        Давай так - имея только код ориентироваться будет на круг всяко легче, чем имея код И bpmn, который связан с кодом совершенно не очевидным образом. К тому же у нас микросервисный мир, в котором есть такая штука, как api, которое является единой точкой входа в сервис, имея эту точку разматывать клубок становится сильно легче, а для камунды ничего подобного нет - все в не явном виде на текстовых метках, по которым нет толком ни поиска, ни навигации.


  1. DenSigma
    26.10.2025 11:24

    Проблема этих систем, которые позволяют "менять логику прямо в проде" в том, что они ужасные в плане дебага, ужасные в плане обработки ошибок, ужасные в плане разработки самих схем. Это все настолько геморно и тяжело, что пользователи тупо перестают пользоватеься этим "счастьем", которое "быстро и удобно", и пишут тикет на разработку компании-разработчику. Проще и быстрее дать деняк.

    И разработчики, которых заставили написать "инструмент" "кодлесс" для пользователей, вынуждены САМИ "разрабатывать" процессы в том, что они наваяли. Вместо удобного и привычного кодинга-дебаггинга на Java - в каком-то.... позоре.

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

    Я знаю, и с камундой связывался, и с самописными отчетными системами.


  1. svetayet
    26.10.2025 11:24

    Я вас расстрою, но то понятие, которое вы привели для оркестрации - это не оркестрация. Оркестрация - это когда есть те, кого надо оркестрировать. А у вас понятие алгоритма просто дано.

    Не надо называть оркестрацией то, что ей не является.