前文
最近开发中有工作流审批流程需求,就做了下开发中常用的工作流引擎比较分析。
工作流引擎是一种软件工具或服务,用于自动化、管理和执行组织内的业务流程或工作流程。它可以帮助组织优化业务流程、提高效率,并确保任务按照预定的规则和顺序完成。 工作流引擎通常具有以下特征:
- 流程建模: 允许用户设计和创建业务流程的可视化模型。这些模型描述了任务、决策点、参与者以及任务之间的依赖关系。
- 自动化执行: 能够自动执行设计好的业务流程,根据定义的规则和条件触发相关的任务。
- 任务分配和协调: 能够将任务分配给合适的参与者,并确保任务按照正确的顺序协调完成。
- 状态跟踪: 提供对业务流程状态的实时监控和跟踪,使组织能够了解流程的执行情况。
- 异常处理: 能够处理业务流程中可能发生的异常情况,并采取相应的措施,例如发送通知或触发修复流程。
- 报告和分析: 收集和分析有关业务流程执行的数据,以便组织能够进行性能评估和持续改进。
工作流引擎可以应用于各种行业和领域,包括制造业、金融服务、医疗保健、客户服务等。通过使用工作流引擎,组织可以更有效地管理复杂的业务流程,提高生产力,减少错误,加强合规性,并更灵活地应对变化。 市场上比较有名的开源流程引擎有 jbpm、activiti、flowable、camunda,flowlong-designer;其中:Jbpm4、Activiti、Flowable、camunda四个框架同宗同源,祖先都是Jbpm4,开发者只要用过其中一个框架,基本上就会用其它三个;flowlong-designer是国产开源的工作流引擎,满足部分标准 BPMN 功能的同时支持🚩中国特色流程操作概念。 商用有驰骋BPM工作流引擎、泛微BPM工作流引擎等等。 在开发低代码平台、OA系统、BPM软件均需要流程可视化功能,而流程可视化核心是流程引擎和流程设计器,对于市场上如此多的开源流程引擎,哪个功能和性能好,该如何选型呢?
一、流程引擎选型
开源工作流引擎
-
JBPM由JBoss公司开发,目前最高版本JPBM7,不过从JBPM5开始已经跟之前不是同一个产品了,JBPM5的代码基础不是JBPM4,而是从Drools Flow重新开始,基于Drools Flow技术在国内市场上用的很少,所有不建议选择jBPM5以后版本,jBPM4诞生的比较早,后来JBPM4创建者Tom Baeyens离开JBoss后,加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti, 另外JBPM以hibernate作为数据持久化ORM也已不是主流技术。官方网站:www.jbpm.org/
-
Activiti由Alfresco软件开发,目前最高版本activiti 7。activiti的版本比较复杂,有activiti5、activiti6、activiti7几个主流版本,选型时让人晕头转向,有必要先了解一下activiti这几个版本的发展历史。
- activiti5和activiti6:activiti5以及ativiti6的核心开发团队是Tijs Rademakers团队,activiti6最终版本由Salaboy团队发布的,因为Tijs Rademakers团队后来去开发flowable流程引擎了。activiti5和activiti6的代码在github上已经4年没有更新了,官方已经停止维护和发展,新开发项目不建议选择activiti5以及ativiti6。
- activiti7即Activiti Cloud:定位云产品,完全面向云原生架构设计开发,依赖k8s等多个CNCF云原生组件,开发、集成、部署和运维均比较复杂,对团队技术人员能力要求高,一般中小型项目,不建议选择Activiti7,大型项目需谨慎选择Activiti7。官方网站:www.activiti.org/
-
Flowable基于activiti6衍生出来的版本,Flowable除了提供开源版本flowable-engine,它还提供了商业收费版本:Flowable Work、Flowable Orchestrate和Flowable Engage 。
- Flowable开源版最新版本是Flowable-7.0.0-M1,开源版本仅仅提供了流程引擎、CMMN引擎、DMN引擎功能,其它功能需要扩展开发。Flowable开源版本目前仍在持续发展,其github上源码工程较多,有技术能力的团队,可用选择Flowable进行扩展开发。
- Flowable Orchestrate除了支持Flowable开源版本的功能,还支持Automation Models、Case & Process Instances、High Availability & Scalability等功能。
- Flowable Work是一个功能强大的低代码自动化平台。它建立在我们引擎的开源版本上,但通过将三个开放标准BPMN、CMMN和DMN的强大功能与低代码功能相结合,将业务流程管理提升到了一个新的水平。 Flowable Work是一个基于SaaS化的商业收费版本。官方网站:flowable.com/open-source...
-
Camunda基于activiti5,所以其保留了PVM,最新版本Camunda7.15,保持每年发布2个小版本的节奏,开发团队也是从activiti中分裂出来的,发展轨迹与flowable相似,同时也提供了商业版,不过对于一般企业应用,开源版本也足够了。官方网站:docs.camunda.org/manual/7.15...。
- 选择camunda的理由:
- 通过压力测试验证Camunda BPMN引擎性能和稳定性更好。详细见:lowcode.blog.csdn.net/article/det...
- 功能比较完善,除了BPMN,Camunda还支持企业和社区版本中的CMMN(案例管理)和DMN(决策自动化)。Camunda不仅带有引擎,还带有非常强大的工具,用于建模,任务管理,操作监控和用户管理,所有这些都是开源的。详细见:lowcode.blog.csdn.net/article/det...
- 选择camunda的理由:
-
FlowLong 是基于 snakerflow 重构的工作流引擎,是一个国产工作流引擎,它使用 json 格式实例模型,仿飞书钉钉审批流程设计器,为中国特色审批匠心打造1。它支持多种功能,包括顺序会签、并行会签、或签、票签、抄送、驳回、分配、转办、委派、跳转、拿回、撤销、加签、减签、认领、已阅、催办、沟通、终止等。官方网站:flowlong.gitee.io/docs/prefac...
各大工作流引擎比较
特性/工作流引擎 | Activiti | Camunda | Flowable | jBPM | FlowLong |
---|---|---|---|---|---|
BPMN 支持 | 是 | 是 | 是 | 是 | 是 |
决策建模支持 | 否 | 是 | 否 | 是 | 是 |
语言 | Java | Java | Java | Java | Java |
集成 | Spring | Java,Spring | Spring | Java,Spring | Java, Spring |
可扩展性 | 是 | 是 | 是 | 是 | 否 |
分布式支持 | 否 | 是 | 是 | 是 | 否 |
社区活跃度 | 活跃 | 活跃 | 活跃 | 活跃 | 活跃 |
文档质量 | 良好 | 良好 | 良好 | 良好 | 一般 |
性能 | 中等 | 良好 | 良好 | 良好 | 待测试 |
安全性 | 标准 | 标准 | 标准 | 标准 | 标准 |
任务编排支持 | 是 | 是 | 是 | 是 | 是 |
规则引擎集成 | 否 | 是 | 否 | 是 | 是 |
支持的数据库 | 关系型数据库 | 关系型数据库 | 关系型数据库 | 关系型数据库 | 关系型数据库 |
工作流设计器 | 是 | 是 | 是 | 是 | 是 |
商用工作流引擎
驰骋BPM工作流引擎 官网 ccflow.org/index.html 泛微BPM工作流引擎 官网 www.weaver.com.cn/new/product...
二、流程设计器选型
对于低代码平台中的流程可视化,流程设计器是重要的支撑工具;目前市场上比较主流的流程设计器有bpmn-js、mxGraph、Activiti-Modeler、flowable-modeler、easy-flow、bpmn2-modeler、flowlong-designer插件等。
flowlong-designer
flowlong-designer是flowlong配套的流程设计器,仿钉钉飞书流程设计风格,支持顺序会签、并行会签、或签、票签、抄送、驳回、分配、转办、委派、跳转、拿回、撤销、加签、减签、认领、已阅、催办、沟通、终止等。
bpmn-js
bpmn-js 是 BPMN 2.0 渲染工具包和 Web 模型。bpmn-js 正在努力成为 Camunda BPM 的一部分。bpmn-js 使用 Web 建模工具可以很方便的构建 BPMN 图表,可以把 BPMN 图表嵌入到你的项目中,容易扩展。bpmn-js是基于原生js开发,支持集成到vue、react等开源框架中。
官方网站:bpmn.io/
mxGraph
mxGraph是一个强大的JavaScript流程图前端库,可以快速创建交互式图表和图表应用程序,国内外著名的ProcessOne和draw.io都是使用该库创建的强大的在线流程图绘制网站. 由于mxGraph是一个开放的js绘图开发框架,我们可以开发出很炫的样式,或者完全按照项目需求定制。官方网站:jgraph.github.io/mxgraph/
Activiti-Modeler
Activiti 开源版本中带了web版流程设计器,在Activiti-explorer项目中有Activiti-Modeler,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
flowable-modeler
flowable开源版本中带了web版流程设计器,展示风格和功能基本跟Activiti-Modeler一样,优点是集成简单,开发工作量小,缺点是界面不美观,用户体验差。
easy-flow
码云上开源的流程设计器,没有深入研究,感觉离真正的BPMN流程图设计差距较大,不过至少有个框架。
Eclipse插件bpmn2-modeler
C/S版本的流程设计器,如果没有强调基于浏览器设计流程图,也可以考虑Eclipse插件版流程设计器bpmn2-modeler。官方地址:www.eclipse.org/bpmn2-model...
三、选型推荐
- 从市场上看来,大部分使用开源的工作流引擎,从各个社区论坛反馈来说,大家都比较推荐flowable。
- Activiti是比较老的开源工作流引擎,社区是比较活跃的。但是由于节点定义概念和缺乏详细的节点实例和任务实例关系轨迹等问题国内慢慢的使用Activiti不多了。
- flowable 社区比较活跃,中文文档和相关文章比较多,相关文章也很多功能也比较全,国内flowable占用份额最大。
- camunda社区最不活跃,中文文档和相关文章比较少,开发难度比较大,但是性能最强。camunda性能比flowablet提升最小10%,最大39%,而且camunda无报错,flowable有报错,camunda在高并发场景下稳定性更好。
- github活跃度来看, activiti和flowable比较相似,camunda不算太活跃(可能是过去国人关注的少,中文文档也欠缺)。
activiti与flowable对比
flowable目前已经支持加签、动态增加实例中的节点、支持cmmn、dmn规范。这些都是activiti6目前版本没有的。
- flowable已经支持所有的历史数据使用mongdb存储,activiti没有。
- flowable支持事务子流程,activiti没有。
- flowable支持多实例加签、减签,activiti没有。
- flowable支持httpTask等新的类型节点,activiti没有。
- flowable支持在流程中动态添加任务节点,activiti没有。
- flowable支持历史任务数据通过消息中间件发送,activiti没有。
- flowable支持java11,activiti没有。
- flowable支持动态脚本,,activiti没有。
- flowable支持条件表达式中自定义juel函数,activiti没有。
- flowable支持cmmn规范,activiti没有。
- flowable修复了dmn规范设计器,activit用的dmn设计器还是旧的框架,bug太多。
- flowable屏蔽了pvm,activiti6也屏蔽了pvm(因为6版本官方提供了加签功能,发现pvm设计的过于臃肿,索性直接移除,这样加签实现起来更简洁、事实确实如此,如果需要获取节点、连线等信息可以使用bpmnmodel替代)。
- flowable与activiti提供了新的事务监听器。activiti5版本只有事件监听器、任务监听器、执行监听器。
- flowable对activiti的代码大量的进行了重构。
- activiti以及flowable支持的数据库有h2、hsql、mysql、oracle、postgres、mssql、db2。其他数据库不支持的。使用国产数据库的可能有点失望了,需要修改源码了。
- flowable支持jms、rabbitmq、mongodb方式处理历史数据,activiti没有
camunda与flowable对比
功能方面对比,由于Flowable与Camunda好多功能都是类似的,因此在这里重点罗列差异化的功能
- camunda支持流程实例的迁移,比如同一个流程有多个实例,多个流程版本,不同流程实例运行在不同的版本中,camunda支持任意版本的实例迁移到指定的流程版本中,并可以在迁移的过程中支持从哪个节点开始。
- camunda基于PVM技术,所以用户从Activii5迁移到camunda基本上毫无差异。flowable没有pvm了,所以迁移工作量更大(实例的迁移,流程定义的迁移、定时器的迁移都非常麻烦)。
- camunda对于每一个CMD命令类都提供了权限校验机制,flowable没有。
- camunda继续每一个API都有批处理的影子,flowable几乎没有。比如批量挂起流程、激活流程等,使用camunda可以直接使用API操作,使用Flowable则只能自己去查询集合,然后循环遍历集合并操作。
- camunda很多API均支持批处理,在批量处理的时候可以指定是异步方式操作或者是同步方式操作。异步的话定时器会去执行。Flowable没有异步批处理的机制。比如批量异步删除所有的历史数据。
- camunda启动实例的时候支持从哪个节点开始,而不是仅仅只能从开始节点运转实例。Flowable仅仅只能从开始节点运转实例。
- camunda支持任意节点的跳转,可以跳转到连线也可以跳转到节点,并且在跳转的过程中支持是否触发目标节点的监听器。flowable没有改原生API需用户去扩展。
- camunda支持双异步机制,第一个异步即节点可以异步执行,第二个异步方式是:完成异步任务后,还可以继续异步去执行任务后面的连线。所以称之为双异步机制,flowable只有第一种异步方式。
- camunda支持多种脚本语言,这些脚本语言可以在连线上进行条件表达式的配置,开箱即用。比如python、ruby、groovy、JUEL。flowable仅仅支持JUEL、groovy。开箱即用的意思就是如果想用python直接引入jython包就可以用了,不需要额外配置。
- camunda支持外部任务,比如我们有时候想在一个节点中执行调用第三方的API或者完成一些特定的逻辑操作,就可以使用外部任务,外部任务有两种表,并支持第三方系统定期来抓取并锁定外部任务,然后执行业务完毕之后,完成外部任务,流程实例继续往下执行。外部任务的好处就是解决了分布式事物的问题。在flowable中我们可以使用httpTask任务,我个人更倾向于camunda外部任务,因为这个外部任务有外部系统决定什么时候完成,httpTask是不等待任务,实例走到这个节点之后,调用一个api就直接往下跑了,外部任务不会继续往下跑,有外部系统去决定啥时候往下跑。
- camunda支持为用户定制一些个性化的偏好查找API,比如张三每次查询任务的时候,一般固定点击某某三个查询条件过滤数据,使用camunda就可以将这三个查询条件进行持久化,下次张三来了,就可以直接根据他的偏好进行数据的过滤,类似机器学习。
- camunda支持历史数据的批量删除或者批量迁移到其他介质,比如批量迁移到es,flowable没有该机制。
- camunda支持在高并发部署流程的时候,是否使用锁机制,flowable没有该机制。
- camunda支持单引擎多组合、多引擎多库。flowable仅仅支持单引擎多组合。
- camunda支持流程实例跨流程定义跳转,flowable没有该机制。
- camunda支持分布式定时器,flowable没有该机制。
- flowable支持nosql,camunda只有nosql的解决方案。
- camunda支持优化流程,以及了解流程引擎的瓶颈所在和每个环节的耗时,flowable没有该机制。
- camunda修改了流程模板xml解析方式,相比flowable性能更好。
- camunda在解析流程模板xml的时候,去除了activiti5的双解析机制,相对而言耗时时间更短。flowable没有了pvm所以规避了双解析机制。
- camunda可以在任意节点添加任意的属性,flowable原生API没有,需要自己扩展。
- camunda框架没有为流程生成图片的API(所有流程图展示以及高亮均在前端动态计算),activiti5/6/flowable5/flowable6有图片生成以及高亮的API.
- camunda可以在节点中定义定时作业的优先级,也可以在流程中进行全局优先级的定义。当节点没有定义优先级的时候可以使用全局的优先级字段。activiti5/6/flowable5/flowable6没有改功能。
- camunda可以再流程中定义流程的tag标记,activiti5/6/flowable5/flowable6没有改功能。
- camunda/activiti5/6/flowable5/flowable6 均不支持国产数据库,比如人大金仓 和 达梦。
- flowable6支持LDAP,openLDAP,camunda不支持。activiti5不支持。
最后从我个人开发经验来讲也是比较偏向推荐flowable的,社区文章多教程也多,容易上手。
参考文档
常见的工作流引擎(osworkflow、jbpm、activiti、flowable、camunda)比较-CSDN博客
全网最火的工作流框架Flowable完整教程-Flowable核心基础-云社区-华为云
SpringBoot+Vue+Flowable,模拟一个请假审批流程! - 掘金
开源可用的项目实例:dingding-mid 项目集成工作流引擎和前端集成项目