你的位置:首页 > ASP.net教程

[ASP.net教程]可扩展的工作流引擎设计


引言

一提到“流程”,各位看官就憋不住了:报销流程太慢了,流程五花八门,流程太不智能了。。
“工作流引擎”就是来解决这些问题的!小生之前应聘,集体面试环节有做当众答辩(一次很新鲜的经历),题目即工作流架构设计。

在这里把思路总结下来,仅仅是个思路,而且重点表达可扩展性。当然也曾经实现过轻型流程引擎,没这么强大。
小生不才,抛砖引鸡蛋,欢迎猛拍 ^D^

诉求

啥样的工作流引擎,才叫牛叉?需要满足高性能、可扩展等等,这还用说,这不是废话嘛 :D

对于身边那些剪不断、理还乱的各种流程,比如常见的“招聘流程”,如何让计算机来管理?那就是流程建模!用机器语言表达业务流程。

为了全球范围内规范流程管理,已有多个世界级组织,推行了很多工作流标准。我了解过几个,最熟悉的是BPMN,以下基于BPMN分析如何建立流程模型。建模细节可参考BPMN2.0:http://www.uml.org.cn/workclass/201206272.asp。
1.OMG(Object Management Group)定义的流程标准:BPMN(Business Process Modeling Notation)
2.WfMC(Workflow Management Coalition)定义的流程标准:XPDL(3.OASIS(Organization for the Advancement of Structured Information Standards)定义的流程标准:BPEL(Business Process Execution Language)

功能

要满足上述建模要求,需要哪些功能来支撑?其中的建模要素可谓广而全,囊括了各种千奇百怪的流程诉求,比如活动又分为循环、会签、消息、手工、脚本、规则等等,网关又分为排他、多路、并发、事件、条件等等。详见BPMN规范。

技术

用什么技术来实现上述需求?这么多功能,还要高性能,可扩展。。要求还真多==!下图主要表达“核心执行引擎”的实现:
1.工作流中间件主要模块:
流程上下文:好比足球运动中的球,贯彻整个任务过程,负责封装业务数据、流程请求、响应、状态数据;
流程应用程序:好比排兵布阵的教练员,负责调度流程过滤模块和活动处理器;
流程过滤模块:好比传球运动员,每次任务由多个模块完成,负责处理事件、网关、连接的逻辑,决定流程走向;
活动处理器等:好比射门运动员,每次任务由一个处理器完成,负责。。你懂得。
2.每个模块均有界面层、应用服务层,基于DDD领域驱动设计思想。
3.为了满足高性能,底层采用分布式云平台架构。

扩展

重点来了!如何实现可扩展性?
譬如在前文的招聘流程中,用(上)户(帝)要求在终面环节进行会签评审,逻辑如下。这么变态的需求,现有系统无法实现,只能扩展定制:
1.多人参与会签评审,主管位高权重,一票抵三票。
2.各个评审者对应聘者打分1到100。
3.最终得分是所有评审者的加权平均分,80以及上视为面试通过。

管道模型是什么鬼?!怎么实现以上特殊需求?
谈到扩展性,我们能想到的扩展性很好的框架是啥?没错,就是ASP.NET框架,使用经典的管道模型,兼容各种服务,神马HTML、ASP、WebForm、MVC,甚至图片、PDF、GIS信息等,无所不能!
在管道模型中,足球(图中圆点)从开球、传球、射门各个环节,都可以被人为干预(扩展定制),无非就是教练员(流程应用程序)强制换个射手(活动处理器),换上射手王——梅西! ^O^

数据

流程系统如何存储数据?大概列了一下对象关系,具体实现还要大量细化。


乐于分享,交流进步。