世界杯亚洲球队

(一)工作流系列——什么是流程引擎?

什么是流程引擎?

顾名思义,是支持流程编排,流程执行的引擎底座。在低代码平台、办公自动化(OA)、BPM平台、工作流系统均需要流程引擎功能。其解决的问题主要为复杂流程中状态的灵活管理以及可编排性。

BPMN(流程模型定义规范)

目前流程定义模型主要遵循BPMN规范,BPMN 最初由业务流程管理倡议组织(BPMI)开发。自 2005 年这两个组织合并后,BPMN 一直由对象管理组织(OMG)维护。BPMN 的 2.0 版本于 2011 年 1 月发布,此时名称被修订为业务流程模型和符号(Business Process Model and Notation),以反映引入了执行语义,这些执行语义与现有的符号和图表元素一起被引入。尽管它是 OMG 的规范,但 BPMN 也被批准为 ISO 19510。最新版本是 BPMN 2.0.2,于 2014 年 1 月发布。(来自wiki)

PVM(流程引擎执行)

另外流程引擎的主流执行模型目前遵循PVM的较多,PVM主要讨论的是如何定义流程的执行过程(Activiti and Transition),而不是关注流程模型的定义。(Activiti6移除了PVM,所以Flowable也不支持PVM)

public class PvmExecution {

private PvmActivity currentActivity;

private List transitions;

public void execute() {

// 执行当前活动

currentActivity.execute(this);

// 确定下一个活动

PvmTransition transition = findNextTransition();

if (transition != null) {

take(transition);

}

}

}

public class PvmCharacteristics {

// 1. 抽象执行模型

class ProcessInstance {

private PvmProcessDefinition processDefinition;

private Map variables;

private PvmExecution rootExecution;

}

// 2. 状态管理

class ExecutionImpl implements PvmExecution {

private PvmActivity activity;

private ExecutionImpl parent;

private List executions;

private boolean isActive;

}

// 3. 行为委托

interface ActivityBehavior {

void execute(ActivityExecution execution);

}

}

一个典型的流程生命周期

基本元素

一、事件(Event)

事件用圆圈表示,代表发生的事情,与活动(代表要做的事情)相区分。圆圈内的图标表示事件类型,如信封代表消息,时钟代表时间。

事件分为捕获型(Catching)和抛出型(Throwing)。

捕获型

抛出型

按所处环节分类

起始事件:作为流程触发点,有单一边框,只能是捕获型,用开放图标表示。

中间事件:发生在起始事件和结束事件之间,有双边框,可以是捕获型或抛出型,分别用开放或实心图标表示。例如,一个任务可以流向一个抛出消息的事件,然后在另一个池中,后续事件等待捕获响应后继续流程。

结束事件:代表流程的结果,有单一边框且较粗或为粗体,只能是抛出型,用实心图标表示。

二、活动(Activity)

任务(原子任务):代表不能进一步细分的单个工作单元,称为原子活动,是流程图表中所示的最低级别活动。一组任务可以代表高级程序。

子流程:用于隐藏或显示额外的业务流程细节。折叠时,子流程由矩形底部的加号表示;展开时,圆角矩形扩展以显示所有流对象、连接对象和工件。子流程被称为复合活动,有自己独立的起始和结束事件,父流程的序列流不能跨越边界。

Choreography Task(编排任务)

在一个任务节点中可以编排流程。但实际上主流的流程引擎都没有实现这个功能,因为可以通过嵌套子流程或者关联不同的主流程来实现。

三、网关(Gateway)

排他网关(XOR)

并行网关(AND)

包容网关(OR)

开源流程引擎选型

Jbpm4、activiti、flowable、camunda,smartEngine。其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,都衍生自Jbpm4。

Activiti

activiti6以及activiti5的代码官方已经暂停维护了,最新版本是7.0,但只是在6.0的内核基础上进行了一些应用层的封装。(6.0的一些bug可能还没修复)

https://www.activiti.org/

Flowable

flowable基于activiti6衍生出来的版本,flowable目前最新版本是v6.6.0,开发团队是从activiti中分裂出来的,修复了一众activiti6的bug,并在其基础上研发了DMN支持,BPEL支持等等,相对开源版,其商业版的功能会更强大。以flowable6.4.1版本为分水岭,大力发展其商业版产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表单生成器(表单引擎)、历史数据同步至其他数据源、ES等。(流程量过大的时候需要处理历史数据归档的问题)

https://flowable.com/open-source/

Camunda

Camunda基于activiti5,所以其保留了PVM,最新版本Camunda7.15,保持每年发布2个小版本的节奏,开发团队也是从activiti中分裂出来的,发展轨迹与flowable相似,同时也提供了商业版,不过对于一般企业应用,开源版本也足够了,强烈推荐camunda流程引擎,功能和性能表现稳定。

选择camunda的理由:

1)通过压力测试验证Camunda BPMN引擎性能和稳定性更好。

2)功能比较完善,除了BPMN,Camunda还支持企业和社区版本中的CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的。

https://docs.camunda.org/manual/7.15/introduction/

性能测试

https://lowcode.blog.csdn.net/article/details/109030329

结论上来看Camunda > Flowable

功能对比

td {white-space:nowrap;border:1px solid #dee0e3;font-size:10pt;font-style:normal;font-weight:normal;vertical-align:middle;word-break:normal;word-wrap:normal;}

Activiti 7

Flowable 6

Camunda bpm

JBPM 7

JFLOW(国产的)

功能

会签

回退

×

驳回

×

自定义流转

×

×

加签、减签

×

多实例

事务子流程

版本迁移

×

×

×

×

兼容性及二次开发

支持的流程格式

BPMN2.0、XPDL、PDL

BPMN2.0、XPDL、XPDL

BPMN2.0、XPDL、XPDL

BPMN2.0

BPMN2.0

开源情况

开源

提供商业和开源版

提供商业和开源版

开源

开源

开发基础

jBPM4

Activiti 5 & 6

Activiti 5

版本5之后Drools Flow

自开发

直接支持的脚本

JUEL、groovy

JUEL、groovy

python、ruby、groovy、JUEL

引擎核心(跟代码兼容有关)

去除PVM

去除PVM

流程虚拟机(PVM)(迁移上有优势)

Drools

自研

Spring结合

二次开发难度

一般

一般

一般

较难

一般

未来拓展

CMMN支持

×

×

×

DMN支持

√(6.4之前不稳定)

×

历史数据处理(NoSql)

×

√(只提供了解决方案)

×

支持数据库

Oracle、SQL Server、MySQL

Oracle、SQL Server、MySQL、postgre

Oracle、SQL Server、MySQL、postgre

Mysql,postgre

oracle,sqlserver,mysql

集群部署

√(6.5版本支持)

云部署

其他特性

持久化框架

Mybatis

JPA二次封装

Hibernate

JPA

架构

spring boot 2

spring boot 1.5

spring boot 2

Kie

spring boot 2(特别版本)

事务管理

MyBatis机制/Spring事务控制

hibernate机制/Spring事务控制

hibernate机制/Spring事务控制

Bitronix,基于JTA事务管理

分布式事务

MyBatis机制/Spring事务控制

补偿机制,SAGA 模式

Bitronix,基于JTA事务管理

开发手册

https://activiti.gitbook.io/activiti-7-developers-guide/部分网页打不开

http://www.shareniu.com/flowable6.5_zh_document/bpm/index.html

https://docs.camunda.org/manual/7.13/user-guide/

https://docs.jboss.org/jbpm/release/7.40.0.Final/jbpm-docs/html_single/

http://ccbpm.mydoc.io/

运行模式

独立运行和内嵌

独立运行和内嵌

独立运行和内嵌

源码活跃度

相对活跃

相对活跃

比较活跃

相对活跃

一般

源码地址

https://github.com/Activiti/Activiti

https://github.com/flowable/flowable-engine

https://github.com/camunda/camunda-bpm-platform

https://github.com/kiegroup/jbpm

https://gitee.com/opencc/JFlow

设计器

集成idea eclipse,web

自提供,eclipse

自提供,eclipse

Eclipse

自提供,.net开发

集成接口

SOAP、Mule、RESTful

SOAP、Mule、RESTful

SOAP、Mule、RESTful

消息通讯

SOAP、Mule、RESTful

内部服务通讯

Service间通过API调用

Service间通过API调用

Service间通过API调用

基于Apache Mina异步通讯

参考文档

流程引擎Activti原理

开源流程引擎选型

Activiti Github

BPMN Wiki