工作流框架研究
- 主流开源框架介绍
- OsWorkFlow
- JBPM
- Activiti
- Flowable
- Camunda
- Camunda 和Flowable对比
- 功能上对比
- 性能上对比
- 总结
主流开源框架介绍
OsWorkFlow
对于比较简单的流程,OsWorkFlow会是一个比较好的选择,对于复杂的流程就不推荐了,OsWorkFlow是一个轻量化的流程引擎,基于状态机制,数据库表很少,OSWorkFlow提供的工作流构成元素有:步骤(step)、条件(conditions)、循环(loops)、分支(splits)、合并(joins)等。但不支持会签、跳转、退回、加签等这些操作,需要自己扩展开发,有一定的难度。而且OsWorkFlow组件已过时。长时间没有版本升级了
JBPM
JBPM由JBoss公司开发,目前最高版本JBPM7,不过从JBPM5开始已经跟之前不是同一个产品了,JBPM5的代码基础不是JBPM4,而是Draools Flow 重新开始,基于Drools Flow技术在国内市场用的很少,所以不建议选择JBPM5以后的版本,JBMP4诞生的比较早,后来JBPM创建者Tom Baeyens 离开JBoss后,加入Alfresco后很快推出了新的基于JBMP4的开源工作流系统Activiti,另外JBPM以hibernate作为数据持久化ORM也已经不是主流技术,现在时间节点选择流程引擎,JBPM不是最佳选择。
Activiti
Activiti由Alfresco软件开发,目前最高版本Activiti7,Activiti的版本比较复杂,有activiti5,activiti6、activiti7几个主流版本,选型时让人晕头转向,有必要先了解一下activiti的几个版本的发展历史。Activiti5和activit6的核心leader是Tijs Rademakers,由于团队内部分歧,2017年Tijs Rademakers离开团队,创建了后来的Flowable,Activiti6以及Activiti7代码已经交接给了Salaboy团队,Activiti6以及Activiti5的代买官方已经暂停维护了。Salaboy团队目前在开发Activiti7,Activiti7内核使用的还是Activiti6。并没有为引擎注入更多的新的特性,只是在activiti之外的上次封装了一些应用。结论是Activiti谨慎使用。
Flowable
Flowable基于activiti6衍生出来的版本,flowable目前最新版本v6.7.2,开发团队是从activiti分离出来的,修复了一众的activiti6的bug,并在其基础上研发出了DMN支持,BPEL支持等等,相对开源版,其商业办的功能会更强大,以flowwable6.4.1版本为分水岭,大力发展其商业版本产品,开源版本维护不及时,部分功能已经不再开源版发布,比如表番生成器(表单引擎)、历史数据同步至其他数据源、ES等。
Flowanble是一个使用Java编写的轻量级业务流程引擎,使用Apache V2 Licence协议开源。2016年10月,Activiti工作引擎的主要开发者离开Alfresco公司并在Activiti分支基础上开启了Flowable开源项目、基于Activiti v6 bet4a发布第一个Flowable relase版本为6.0.Flowable项目包括BPMN引擎、CMMN引擎、DMN引擎、表单引擎等模块。
Camunda
Camunda基于Activiti5,所以其保留了PVM,最新版本Camunda7.17,保持每年发布2个版的的节奏,开发团队也是从activiti中分离出来的,发展轨迹与Flowable相似,同时也提供商业版本,不过对于一般企业应用,开源版本也就足够了,强烈推荐Camunda流程引擎,功能和性能表现稳定。
Camunda 和Flowable对比
功能上对比
Flowable和Camunda都是工作流程引擎,但在功能上有非常多的相似之处。我们罗列几个比较重要的给大家看看:
性能上对比
通过压力测试工具Jmeter分别对Flowable和Camunda进行高并发压力测试,并发数从100到1000,Jmeter设置Ramp-up为1,循环次数为1,测试数据如下:
并发数 | Flowable | Camunda | 性能对比 |
---|---|---|---|
100 | 2702 | 1154 | 50% |
200 | X | 2103 | |
400 | X | 4467 | |
600 | X | 4928 | |
800 | X | 6571 | |
1000 | X | 8780 | |
Camunda 我们还能正常测试,Flowable在并发100的情况下还可以但是在200的时候就直接没有了反应。 |
总结
因为我们业务对性能要求不高,所以最终选择了Flowable工作流。