流程平台的意义
当只有一个项目中有流程的时候,其实是不需要流程平台的。但是当有多个项目中都具有流程,并且这些项目的用户交叉时,就需要有一个统一的流程平台,来让用户能从一个页面中查看或处理自己的所有相关流程。
流程相关的一些数据
- 流程的原生数据(act_*的一些表数据),下文中用
数据A
来标识 - 流程的扩展配置信息(为了方便使用流程,进行的一些扩展配置:如业务表单的配置、流程节点支持的操作的配置等),下文中用
数据B
来标识
实现流程平台的三种思路
一、 流程平台完全独立(数据A数据B
都存于平台)
业务系统完全通过流程平台提供的对外接口来实现流程发起、提交、取消等操作。所有的流程相关数据都存储于流程平台中。
优点
- 完全跟业务系统解耦
- 流程的完整数据都存储于同一个地方,便于取用
缺点
- 所有实现都需通过对外接口来实现,增加了网络交互,降低性能
- 当业务系统的业务处理跟流程操作需要在一个事物中处理时,事物的一致性不容易保证(虽然可以采用分布式事物来解决,但是分布式事物会增加使用成本和降低性能)
- 流程平台的处理压力大
二、 流程平台最小化(数据A数据B
都存于业务系统)
流程平台只保留一个任务列表的查询功能,所有的其他功能都集成到业务系统中(流程平台提供一个jar包)。所有的流程相关数据都存储于业务系统的数据库中,业务系统进行流程操作(流程发起、取消等)时,将数据同步(根据业务需要,可以实时同步也可以利用mq异步同步)到流程平台对应的数据库中(一般为nosql数据库,如mongodb)
优点
- 性能高
- 无事物问题
缺点
- 流程相关配置信息分布在各个业务系统中,比较分散,不方便取用
- 业务系统的处理压力大
三、兼顾方案一和方案二(数据A
存于业务系统,数据B
存于平台)
流程平台只包含任务列表的查询功能和对流程配置信息(数据B
)的配置功能,业务系统配置多数据源,包含业务本身的数据源和流程配置信息的数据源,业务本身的数据源为主数据源存在事物,流程配置的数据源为只读数据源,不需要事物,从而保证多数据源的事物一致
优点
- 性能高
- 无事物问题
- 流程配置集中管理
缺陷
- 需要配置多数据源,增加配置复杂度
- 业务系统的处理压力大
最后再说几句
个人更倾向于第三种方案,既能满足事物的一致性,又能尽最大可能的统一管理配置信息。
本人写作功底较差,无法完整表述清楚三种方案。如有疑问,欢迎留言讨论。