Чем кластеризация в Acitivti 5.X отличается от JBPM 5.X?

Сценарий, на котором я основываюсь

             Load Balancer
                     |
------------------------------------------
|                    |                   |
Node 1             Node 2              Node 3
|                    |                   |
------------------------------------------
                     |
               Common Database

Узлы 1, 2 и 3 будут иметь свои собственные одноэлементные экземпляры Process Engine. Все серверы находятся в конфигурации «активный-активный», что означает, что запросы маршрутизируются на каждый узел более или менее циклически.

Сценарий 1 Запрос направляется на узел 1, который запускает процесс с идентификатором 100. Activiti немедленно сбрасывает это состояние в базу данных. Другой запрос направляется на узел 2, где пользователь может захотеть выполнить неавтоматизированная задача (например, утверждение) для экземпляра процесса с тем же идентификатором, то есть 100. Хотя экземпляр процесса не находится в памяти 2-го узла, если механизм процесса на этом конкретном узле запрашивает базу данных, он получит его, загрузит и разрешит пользователь для выполнения задачи. Так что нет никаких проблем. Однако, поскольку JBPM 5.4 не сбрасывает свое состояние немедленно в базу данных, это вызовет проблемы. Я прав?

Сценарий 2 Это сценарий проверки производителя. Две программы проверки подключены к Узлу 1 и Узлу 2 соответственно. Первый контролер утверждает рабочий элемент. Второй контролер утверждает тот же рабочий элемент. Как Activti с этим справляется?. Сгенерирует ли он исключение или будет вести себя идемпотентным образом и позволит обеим операциям успешно завершиться? И как с этим справляется JBPM?


person Swapnonil Mukherjee    schedule 23.02.2014    source источник


Ответы (1)


надеюсь, что этот ответ не слишком поздно.

Мы используем активность в кластерной среде, и она работает очень хорошо, ничего не делая. С нуля движок Activiti настроен на работу в кластерном режиме. Никакой дополнительной настройки не требуется. Просто создайте несколько процессоров (на машине или на нескольких машинах все равно) и подключите их к одной базе данных. Все движки процессов, подключенные к одной базе данных, взаимодействуют друг с другом (используя базу данных) и обрабатывают их сами.

Также в документации / форуме Activiti говорится, что нет особой необходимости или работы, потому что сама деятельность является потокобезопасной даже в кластерном приложении. Мы используем описанный выше подход уже более 6 месяцев в продакшене, и у нас нет проблем с ним.

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

Работает как шарм ...

person NeoP5    schedule 17.03.2014