工作流引擎架构设计

一个应用MIS的系统的架构离不开工作流引擎,具有流程引擎思维的架构人员设计系统的时候就有流程的思维,他区别于过程思维,过程思维开发出来的系统,用户面对的是菜单、模块。而流程思维设计出来的系统就是发起、待办、在途、查询、近期等菜单,用户使用起来比较清爽、容易培训、学习成本低。比如:我们做一个工单系统,如果采用流程思维则创建通过创建一个工单流程,然后设计表单即可,如下图:

(流程引擎:流程设计器)

(表单引擎:表单设计器)

所有说软件系统的架构需要一个工作流引擎支撑系统的开发,您设计的系统就是面向流程的系统,在业务变化的时候,您可以随时调整,使用较小的成本来开发您的系统。

但随着同类需求不断增多,于是开始了工作流引擎的开发之路。查找了一些资料之后,开发了现阶段的工作流引擎,文章后面会有介绍。

虽然现在基本上能满足日常的需求,但感觉还不够智能,还有很多的优化空间,所以正好借此机会,详细了解了一些完善的工作流引擎框架,以及在架构设计上需要注意的点,形成了这篇文章,分享给大家。

什么是工作流

先看一下维基百科对于工作流的定义:

工作流(Workflow),是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流建模,即将工作流程中的工作如何前后组织在一起的逻辑和规则,在计算机中以恰当的模型表达并对其实施计算。

工作流要解决的主要问题是:为实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档、信息或者任务。

简单来说,工作流就是对业务的流程化抽象。WFMC(工作流程管理联盟) 给出了工作流参考模型如下:

举一个例子,比如公司办公的 OA 系统,就存在大量的申请审批流程。而在处理这些流程时,如果每一个流程都对应一套代码,显然是不现实的,这样会造成很大程度上的代码冗余,而且开发工作量也会骤增。

这个时候就需要一个业务无关的,高度抽象和封装的引擎来统一处理。通过这个引擎,可以灵活配置工作流程,并且可以自动化的根据配置进行状态变更和流程流转,这就是工作流引擎。

简单的工作流

那么,一个工作流引擎需要支持哪些功能呢?

这个问题并没有一个标准答案,需要根据实际的业务场景和需求来分析。在这里,我通过一个工单流程的演进,从简单到复杂,循序渐进地介绍一下都需要包含哪些基础功能。

  1. 最简单流程:

最简单的一个流程工单,申请人发起流程,每个节点审批人逐个审批,最终流程结束, 在ccflow看来,属于线性流程,每个节点都是线性节点,他是一条线。流程启动后,在一个时间点上,只有一个节点是活跃的。

会签定义

在这个过程中,节点分成了两大类:简单节点和复杂节点。简单节点处理逻辑不变,依然是处理完之后自动到下一个节点。复杂节点比如说会签节点,则不同,需要其下的所有子节点都处理完成,才能到下一个节点,在ccflow的概念里,属于同表单分合流、或者异表单分合流。

并行定义

如下并行流程图:

同样属于复杂节点,其任何一个子节点处理完成后,都可以进入到下一个节点。在ccflow概念中节点上多人处理规则中的协作模式,当前节点所有的人都完成后,由最后一个人发送到下一个节点上去,我们称为会签节点。

条件判断定义

需要根据不同的表单内容进入不同的分支流程,举一个例子,比如在进行休假申请时,请假一天需要直属领导审批,如果大于三天则需要部门领导审批。

在ccflow的概念中,方向条件分为表单字段、用户身份、用户部门、API、流程系统参数等,一个灵活高可配置的系统,需要支持多中场景,才能减少代码的开发。

动态审批人定义

审批节点的审批人需要动态获取,并且可配置。

审批人的获取方式可以分以下几种:

  1. 固定审批人
  2. 从申请表单中获取
  3. 根据组织架构,动态获取
  4. 从配置的角色组或者权限组中获取
  1. 撤销和驳回

节点状态变更可以有申请人撤回,审批人同意,审批人驳回。那么在驳回时,可以直接驳回到开始节点,流程结束,也可以到上一个节点。更复杂一些,甚至可以到前面流程的任意一个节点。在ccflow的概念中,撤销是发送人主动执行的动作,驳回责任处理人退回的动作。

自动化节点

有一些节点是不需要人工参与的,比如说联动其他系统自动处理,或者审批节点有时间限制,超时自动失效,自动化节点需要服务来支持,在ccflow的概念中,可以在节点属性的谁执行它,可以设置机器执行节点。

个性化通知

节点审批之后,可以配置不同的通知方式来通知相关人。

以上是我列举的一些比较常见的需求点,还有像加签,代理,脚本执行等功能,如果都实现的话,应该会是一个庞大的工作量。当然了,如果目标是做一个商业化产品的话,功能还是需要更丰富一些的。但把这些常见需求点都实现的话,应该基本可以满足大部分的需求了,至少对于我们系统的工单流程来说,目前是可以满足的。

工作流引擎对比

既然这是一个常见的需求,那么需要我们自己来开发吗?市面上有开源项目可以使用吗?答案是肯定的,目前,市场上比较有名的开源流程引擎有 Osworkflow、Jbpm、Activiti、Flowable、Camunda, CCFlow,JFlow 等等。其中:Jbpm、Activiti、Flowable、Camunda 四个框架同宗同源,属于国外的工作流引擎。CCFlow,JFlow是国产的工作流引擎,它集成的自己研发的表单引擎,融合了MIS系统开发中,业务流程、公文流程、工业流程下的多种业务规则,让其设计更具有适应性。流程引擎、表单引擎、数据、用户之间的关系,类似于车的控制系统、车厢、数据、操作员,如下图所示。

(图:流程引擎、表单引擎、业务数据、操作员的关系)

相关推荐
LunarCod9 小时前
WorkFlow源码剖析——Communicator之TCPServer(中)
后端·workflow·c/c++·网络框架·源码剖析·高性能高并发
BPM_宏天低代码1 个月前
统一认证与单点登录:简化用户体验的关键解决方案
低代码·bpm
K2_BPM1 个月前
实力问鼎!祝贺我司客户蒙牛集团、诺基亚贝尔斩获“鼎新杯”大奖
自动化·流程管理·bpm
NLP工程化4 个月前
dify/api/models/workflow.py文件中的数据表
workflow·dify
小崔爱读书4 个月前
普元EOS学习笔记-低开实现图书的增删改查
java·workflow·工作流·low-code·eos·高低开
此人未设置昵称5 个月前
【ai_agent】从零写一个agent框架(二)如何让一个workflow/agent跑起来,runtime模块设计
后端·llm·workflow
此人未设置昵称5 个月前
【ai_agent】从零写一个agent框架(一)打造最强开放agent编辑框架,拳打dify,脚踩coze
后端·openai·workflow
Pitayafruit5 个月前
SpringBoot整合Flowable【06】- 查询历史数据
spring boot·后端·workflow
CoderJie6 个月前
Activiti使用中的数据变化
后端·workflow·工作流引擎
canonical_entropy7 个月前
通过NopTaskFlow逻辑编排实现后台服务函数
后端·低代码·workflow