Факториал 100 через рекурсию процесса в Camunda
Придумал тест для BPM системы. Ну или забаву для BPM системы. Почему бы не посчитать факториал числа 100 рекурсией процесса в BPM системе? Предполагаю, что это хороший тест ядра BPM системы, выдержит ли ядро 100 вложенных вызовов процесса. И вернет ли результат из самого нижнего 100-го подпроцесса обратно в 1-й родительский процесс.
Из рекламного буклета Camunda:
Разработан для обеспечения производительности: высокая пропускная способность, готовность к работе с кластерами и масштабируемость с очень легким (<3 МБ) механизмом выполнения моделей рабочих процессов BPMN.
Ok! Проверим рекламу! )))
Да, до тестирования Camunda, попробовал рекурсию процессов в двух других системах, правда не совсем BPM. Под рукой были две CRM системы, в которых есть дизайнер процессов.
В первой CRM/BPM системе нельзя вызвать в качестве подпроцесса этот же процесс, то есть рекурсия запрещена. Причем обмануть ограничение не удалось, создав две копии процесса, чтобы они друг друга вызывали. Система увидела, что в дизайне процесса из второго процесса вызывается снова первый, и выдала ошибку при попытке сохранить процесс.
Во второй CRM/BPM системе рекурсия запустилась, и факториал от 10 удалось посчитать, а вот для чисел выше 10, система зависала, зависший процесс приходилось убивать.
Итого, в Camunda в Modeler нарисовал процесс:
В начале процесса условием «Check Init» выполняется проверка, если параметры процесса еще не инициализированы, то выполняется инициализация.
Активность «Recursion Input» считывает входящие параметры.
Условием «Check End 1» проверяется количество рекурсий, если все рекурсии вызваны, то процесс завершается.
Активность «Call Self» собственно вызов самого себя, с передачей параметров в процесс, и получением параметров из процесса.
Условием «Check End 2» проверяется количество рекурсий, если все рекурсии вызваны, то создается задача, и выводится полученный из вызванного процесса результат.
Активность «Recursion Output» передает параметры из процесса.
Повозиться пришлось с типом получаемых на входе параметров, пришлось вместо Text поменять на Script, иначе экспоненциальная форма числа не проходила.
Процесс отработал примерно за 20 секунд:
Подводя итог: Camunda это круто! ))) Я уверен, что мало какие из BPM систем выдержат такое издевательство над ядром системы.
PS: К сожалению, больше про Camunda писать не буду, переключился на другие темы.