《从请假到云原生:读懂工作流引擎选型与实战》
工作流简单介绍以及实际运用
什么是工作流
工作流(Workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实施计算。
工作流要解决的主要问题是:为实现某个业务目标,在多个参与者之间,利用计算机,按某种预定规则自动传递文档、信息或者任务。
以请假为例,现在大多数公司的请假流程是这样的
员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑
采用工作流技术的公司的请假流程是这样的
员工使用账户登录系统——点击请假——上级登录系统点击允许
就这样,一个请假流程就结束了
有人会问,那上级不用向公司提交请假记录?公司不用将记录录入电脑?答案是,用的。但是这一切的工作都会在上级点击允许后自动运行!
这就是工作流技术。
Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完。
优点:
工作流系统,实现了工作流程的自动化,提高了企业运营效率、改善企业资源利用、提高企业运作的灵活性和适应性、提高量化考核业务处理的效率、减少浪费(时间就是金钱)。
而手工处理工作流程,一方面无法对整个流程状况进行有效跟踪、了解,另一方面难免会出现人为的失误和时间上的延时导致效率低下,特别是无法进行量化统计,不利于查询、报表及绩效评估。
工作流的应用
具体场景,凡是涉及到业务流程的所有场景
关键业务流程:订单、报价处理、合同审核、客户电话处理、供应链管理等。行政管理类:出差申请、加班申请、请假申请、用车申请、各种办公用品申请、购买申请、日报周报等凡是原来手工流转处理的行政表单。人事管理类:员工培训安排、绩效考评、职位变动处理、员工档案信息管理等。财务相关类:付款请求、应收款处理、日常报销处理、出差报销、预算和计划申请等.。客户服务类:客户信息管理、客户投诉、请求处理、售后服务管理等。
在了解工作流引擎之前我们先来了解一下什么是BPMN
官方解释如下:
标准的业务流程模型和符号 (BPMN) 将为企业提供以图形符号理解其内部业务程序的能力,并使组织能够以标准方式交流这些程序。此外,图形符号将有助于理解组织之间的绩效协作和业务交易。这将确保企业了解自身和业务参与者,并使组织能够快速适应新的内部和 B2B 业务环境。
简单来说BPMN(业务流程模型和符号)是一种用于可视化业务流程的标准化图形符号,就像是绘制流程地图的通用语言。
BPMN 就是用图形化的方式描述业务流程的“地图”。
流程线 :代表业务流程的路径,就像地图上的道路,指示业务流程的走向和顺序,比如从一个任务到下一个任务的过程。
任务和活动 :表示流程中的具体工作或操作,就像是地图上的关键地点,例如员工提交请假申请、部门经理审批等。
网关 :代表流程中的决策点或分支点,类似于地图上的岔路口,根据不同的条件决定流程的去向,比如判断请假天数是否超过一定天数来决定是否需要更高层的审批。
事件 :表示流程的开始、结束或中间发生的某些情况,就像地图上的起点和终点, 例如流程的开始事件(员工发起请假流程)、结束事件(请假申请完成审批流程)等。
通过 BPMN,可以让复杂的业务流程变得清晰直观,便于业务人员和开发人员共同理解和交流,确保流程的准确性和一致性。
三大工作流引擎技术
- 工作流引擎技术的发展史
Activiti、Camunda、Flowable它们都起源于jbpm,从jbpm4开始,随后诞生了Activiti5。然而,在Activiti5的发展过程中,核心团队成员间的分歧导致了Camunda的诞生。在Activiti5持续发展了大约四年后,Flowable作为新的分支应运而生。
1、Activiti:一个开源的业务流程管理和工作流引擎,基于BPMN 2.0标准,与Spring框架无缝集成,提供了API和工具,用于设计、执行、管理和监控业务流程,能帮助用户自动化业务流程。
2、Camunda:开源的工作流和业务流程管理平台,以Activiti5为基础发展而来,支持BPMN、CMMN等多种标准,具有轻量级和高性能的特点。除了核心工作流引擎外,Camunda还发展了丰富的生态系统,包括模型设计器、表单管理、任务管理、事件处理和分析工具等,为用户提供更多完整的业务流程管理体验。
3、Flowable
Flowable是由Activiti的部分核心开发人员创建的,旨在继承Activiti的优点并进行进一步的优化和改进。Flowable致力于提供易用、高性能和可扩展的工作流引擎。
Flowable也提供商业支持和开源版本供用户选择。与Camunda类似,Flowable也发展了丰富的生态系统,包括模型设计器、表单管理、任务管理等工具,以提供更完整的业务流程管理解决方案。
总结来说,这三个工作流引擎在技术发展上有着共同的起源和各自的发展历程。它们都基于BPMN 2.0规范,致力于提供强大的流程管理和自动化功能。然而,它们在发展过程中形成了各自独特的技术路线和功能特性,以满足不同用户的需求。在选择时,可以根据项目的具体需求、团队的技术能力和偏好以及商业支持和服务等因素进行综合考虑。
以下请假审批流程场景的例子来介绍三大工作流引擎技术 Activiti、Camunda、Flowable 的区别和作用:
1. Activiti:如同简洁实用的工具箱,适合中小企业的简单请假审批流程。员工提交请假单后,直接交由部门经理审批,通过后即生效。Activiti 能快速实现流程自动化,串联请假申请和审批环节,让信息顺畅流转,提高审批效率。
2. Camunda:如同强大的瑞士军刀,适合大型企业的复杂请假审批流程。在跨国公司中,员工请假需经部门经理审批、人力资源审核假期余额、财务核算薪酬等多环节。Camunda 提供可视化监控和分析工具,助力管理者优化流程和决策。
3. Flowable:如同灵活高效的快递员,适合高并发、云原生环境下的请假审批流程。在大型互联网企业中,面对大量同时发起的请假请求,Flowable 能快速响应并高效处理,与微服务架构完美契合,可灵活集成其他业务模块,实现复杂业务逻辑和自动化流程。
- 目前主流工作流Flowable
- 三大工作流引擎技术原理
Camunda、Flowable和Activiti都是基于BPMN(Business Process Model and Notation)标准的工作流引擎,它们在技术原理和使用流程上有很多相似之处,同时也有一些差异。
模型驱动:都采用模型驱动方法,通过 BPMN 流程图描述业务流程。流程执行时,引擎解析 BPMN 模型并执行相应业务逻辑。
事件驱动:在流程执行中触发各种事件(如流程启动、任务完成等),开发者可注册监听器捕获事件,执行自定义逻辑。
持久化存储:通常将流程实例状态和数据持久化存储到数据库,在流程执行的时候引擎会不断更新数据库中的状态数据,确保流程的可靠性和可恢复性。
- 三大工作流引擎的使用流程
1. 定义 BPMN 流程图:使用相应建模工具(如 Camunda Modeler、Flowable Designer 或 Activiti Designer)定义 BPMN 流程图,描述业务流程的环节、任务及依赖关系。
2. 部署流程:把 BPMN 流程图的 XML 文件上传到引擎存储库,创建流程定义。
3. 启动流程实例:通过调用引擎的 API 或管理界面启动流程实例,引擎解析流程定义并创建相应的流程实例和数据结构。
4. 执行任务:流程执行中,引擎根据任务节点创建任务并分配给相应用户或组。用户可通过任务列表界面查看、认领任务并执行业务操作。
5. 监听事件:开发者可注册监听器捕获流程执行中的事件(如任务完成、流程结束等),在事件发生时执行自定义逻辑,如发送通知、更新业务数据。
6. 查询和监控:提供查询和监控功能,方便查看流程实例状态、任务执行情况和历史数据,助力流程优化和调整。
- 三大工作流引擎的性能差异
Camunda、Flowable和Activiti都是基于BPMN(Business Process Model and Notation)的工作流引擎,它们在性能上可能存在一定的差异。然而,具体的性能差异会受到多个因素的影响,包括系统配置、工作负载、测试方法等。因此,很难提供具体的参考测试数据,因为每个用例都可能有不同的结果。
Camunda在性能上通常表现出色。它经过优化,可以处理高并发的工作负载,并且具有较低的延迟。Camunda还提供了丰富的功能和工具,如历史数据管理、事件处理、任务管理等,这些功能在复杂流程中可能会增加一些开销,但总体上,Camunda在性能上被认为是相当稳定和高效的。
Activiti作为较早的工作流引擎之一,在性能上也有一定的表现。然而,随着时间的 推移,Activiti的发展速度可能有所放缓,并且在某些方面可能不如Camunda和Flowable。特别是在处理高并发和大规模流程时,Activiti可能会遇到一些性能瓶颈。但需要注意的是,Activiti仍然是一个广泛使用的开源工作流引擎,并且在许多项目中得到验证。
Flowable作为Activiti的分支,在性能上也有所表现。Flowable团队对引擎进行了一些优化,以提高性能和可扩展性。然而,与Camunda相比,Flowable可能在某些方面稍逊一筹,特别是在处理高并发和复杂流程时。但总体而言,Flowable仍然是一个可靠和高效的工作流引擎。
要明确的是,以上只是基于一些定性反馈和普遍观察的评估,并不代表确切的测试结果。因为系统配置、工作负载、测试方法不同,每个具体用例的结果都可能不一样。要是想精准了解它们之间的性能差异,最好的办法是在实际环境中,用相同的测试数据和场景做基准测试。
而且,选工作流引擎不能只看性能,还要考虑功能需求、易用性、社区支持和生态系统等。总之,要结合项目具体情况,全方位评估,才能挑出最合适的工作流引擎。
- 三大工作流引擎的详细对比
对比项 | Activiti5.x | Activiti-7.x | Flowable-6.x | Camunda |
商业化 | x | √ | √ | √ |
路线(Roadmap) | 工具型 | 云 | 工具型 | 轻&工具型 |
PVM引擎 | √ | x | x | √ |
BPMN2引擎 | x | √ | √ | √ |
CMMN引擎 | x | √ | √ | √ |
DMN引擎 | x | x | √(开源版支持不太好) | √ |
流程设计器 | Eclipse/IDEA插件 | Eclipse/IDEA插件 | Eclipse/IDEA插件 | Camunda Modeler |
流程设计器Web | x | Activiti-explorer | flowable-modeler | Web Modeler |
建模工具内容 | BPMN2 | BPMN2 | BPMN2/CMMN/DMN | BPMN2/CMMN/DMN |
扩展节点(HttpTask等) | x | x | √ | √ |
Spring Boot | √ | √ | √ | √ |
Spring Cloud | x | √ | x | √ |
Web控制台 | x | √ | √ | √ |
Rest接口 | x | √ | √ | √ |
历史异步归档 | x | x | √ | x |
异步任务全局锁 | x | x | √ | √ |
流程调度 | 需二次开发 | 需二次开发 | 原生API部分支持 | 原生API支持 |
流程实例的迁移 | 需二次开发 | 需二次开发 | 需二次开发 | 原生API支持 |
双异步机制 | x | x | x | √ |
多种脚本语言 | JUEL、groovy | JUEL、groovy | JUEL、groovy | python、ruby、groovy、JUEL |
nosql支持 | x | x | √ | 不原生支持,提供解决方案 |
外部任务 | x | x | x | √ |
流程图片生成API | √ | √ | √ | x |
其他关注点:
是否收费
Activiti7 :不收费开源,采用 Apache-2.0 开源协议,用户可免费使用和修改代码。
Flowable :部分开源部分收费。如 form 表单模块商业化,开源版不再维护;6.5 版本后,开源版技术支持可能不再提供。
Camunda :收费,虽有免费版,但部分功能和生产环境使用需付费,其社区开源版本由社区维护。
活跃度
Activiti7 :2019 - 2020 年活跃度高,但现发展速度放缓。
Flowable :活跃度稳定但一般。
Camunda :活跃度逐渐降低。
开放度
Activiti7 :完全开源,但功能较少,需自行开发很多功能。
Flowable :部分开源,6.5 版本是商业版与开源版的分水岭,后续开源版本功能和支持有所减少。
Camunda :部分开源,开源版功能比 Activiti7 多,性能较好。
java主流工作流框架发展趋势
- 云原生架构 随着云计算的快速发展,云原生架构成为 Java 主流工作流框架的发展趋势。Flowable 和 Activiti 都在积极拥抱云原生架构,以适应企业级应用的需求。
- 微服务架构 微服务架构是当前软件开发的主流趋势。Java 主流工作流框架将逐渐向微服务架构转型,以适应企业级应用的需求。
- 开源与社区 开源和社区是 Java 主流工作流框架发展的基石。Flowable 和 Activiti 将继续加强社区建设,吸引更多开发者参与,推动工作流技术的发展。
结论: Flowable 与 Activiti 作为 Java 主流工作流框架,各有优势和特点。在深入剖析两者对比的基础上,本文揭示了 Java 主流工作流框架的发展趋势。企业应根据自身需求,选择合适的工作流框架,以实现业务流程的优化和提升。