`
ww2
  • 浏览: 416074 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

工作流模式详解之流程控制模式(12、13、14、15)——Multiple Instances

阅读更多

1. 理论模型

  此模型翻译可叫多实例并发模式。其一般的示意图如下:

  

  途中,运行到B 的时候,便生成了 N =3 各工作单元。

  然而这个示意图并不能说明多实例模式的各种细节,具体区分的4种不同的情况。而这里要将这四个模式放在一起论述,是因为我觉得这四种模式一般不会单独使用,很可能是其中的2种之间的契合。

2. 四种多实例

  (12)Multiple Instances without Synchronization
  注意看到这个模式,主要是用于表示实例之间的运行相互"非同步"的状态。按照普遍比较接受的说法是:N个实例之间相互独立而且并发执行,互不干扰。这类似于在程序上的进程/线程概念。

  (13)Multiple Instances with a Priori Design-Time Knowledge
  这一模式是用于确立多实例的入口方式。入口主要处理的问题就是确定所需要生成的实例个数 N 。而这个 N 在设计流程的时候就确定了。

  (14)Multiple Instances with a Priori Run-Time Knowledge
  入口方式也可以动态确定,这一模式是表示在流程运行的过程中,B 中第一个实例产生以前就确定 N 。当然了,确定这个N 的时机可以是前面 A,也可以是 A 前的工作任务。总之是在第一个实例产生前就确定下来的,也可以视作该模式的应用。

  (15)Multiple Instances without a Priori Run-Time Knowledge
  与上面模式相反,是在 B 产生最后一个实例以前(或者所有实例合并以前),都可以产生新的实例,而且不限数量。

3. 一点思考

  从上面四种模式可以看到,四种多实例模式实际上分成了两大部分。我总结为"实例生成"模式和"运行时关系"模式。"实例生成"模式,指明了多实例模式所需要的前提条件(主要是实例个数N),而"运行时关系"模式,则给出了多个实例产生以后的相互关系。所以,多实例模式的应用是通过"实例生成"模式和"运行时关系"模式的结合,才能完整的表示多实例的业务。

  "运行时关系"模式,只有(12)Multiple Instances without Synchronization,其余的则是属于"实例生成"模式。

  一些朋友曾经问,为什么没有 Multiple Instances with Synchronization 模式。在我的观点看来是一个设计重复性的问题。试试来看这个同步的多实例:所谓的同步,即是多个相同的实例轮流运行,从设计的角度来说,这种与顺序方式同构:

  

  这样铺展以后,相信都已经很清楚了,这实际上是一种循环模式,用(4)Exclusive Choice可以实现,如:

  

  可见,如果有 Multiple Instances with Synchronization 这种说法,那实际上只是一种循环而已(循环模式在后面再详细论述)。

4. 各种多实例实现方式的比较

  多实例实现方式之多,恐怕是各种工作流引擎中差异最大的,因为不同的解决方案带来了整体的拓扑结构迥异,也是得这些不同方式所能表示业务的能力相差很大。跟据我所知,大致有如下几种:

  ☆单一个工作单元的多实例
  这是一种最为简单的,即在一个 Active/Task 之中带一个数量参数 N。当这个 Active/Task 初始化的时候就生成 N 个实例,实例之间并发执行。但是有一个难点,就是签收(或者资源模式中Offer的概念中,这个概念类似于待签收状态,在以后讲述工作流资源模式中再详细铺展)中要特别处理,否则可能会出现有多个相同的任务出现在签收列表中而引起混乱。而在一些情况下,更要加一些额外的处理,譬如不能让两个实例给同一个人签收等(这些在工作流资源模式中另有解决方案,但是在流程模式中并没有考虑,我就在这里先提出来)。
  这种方式的优点是对于初级用户较好理解,而且使用较为简单。但是缺点也是很显然的,就是表述业务的能力有限制,无法表示每个实例内有多各流程步骤的情况,而且技术实现上要做特殊处理,尤其是在多实例完成后合并的方式没有给流程的设计者太多的选择余地。

  ☆多实例与子流程的结合
  
这种方式的出现,主要是为了解决上面方式中无法表示多实例内部的流程。其实现主要是利用上面的实现方式,在可生成多个实例的 Active/Task 的内部嵌入了子流程。当进入当中某一个实例中,便启动子流程。同样,这种方式仍然容易在签收的环节引起混乱。
  同样,这种方式对于初级用户来说也很好理解,使用学习也并不复杂。但是流程设计的操作可能较为繁琐,而且并不很直观,对于工作流的高级应用:分析、优化等都是一个较难处理的环节。还有仍然存在上一个实现方式的缺点:多实例的合并方式选择余地不多。

  ☆区块/分组
  
区块/分组的方式,是指限定一些 Active/Task 的子集,方便重用。而有的引擎则更进了一步,让一个区块/分组也引入了数量的概念,如单一工作单元多实例的处理方式一样的可以初始化多个实例。如:
  
  
  一般说,区块/分组要特别处理名字,使其不产生冲突。而多实例的应用,更增加了这个区块名字空间处理的复杂度,所以鉴于技术难度很少引擎会采用这种方式。但是这种方式是把子流程扁平化了,对于最终用户来说也非常直观,而且区块/分组的概念,让一些分析、优化的算法更容易实现与整个流程而不会被子流程所隔断。

  ☆拓扑实现
  
这种方式则更为直接的对应了多实例方式。就是工作单元自身以独立的方式复制副本,其后的执行则形成拓扑结构的分支。这种方式只能在动态生成 Active/Task 的引擎中实现。一般来说,实现一个工作流引擎有两种方式,一种是较为简单的根据流程定义执行任务代码.(这种方式实现简单,一般是针对状态机的。这种实现来说,流程的推进根据定义,只是执行 Active/Task 中的业务代码);另外一种方式则是根据定义生成 Active/Task 实例,再由任务实例执行业务代码。而后一种方式,因为 Active/Task 是独立实例而且动态创建,所以当一个 Active/Task 自己 Clone 了自己以后,两个实例都根据定义找到了自己的后趋 Active/Task,也生成了各自独立的后趋。如:
  
  这里看到,B1 只要 Clone 了自身,便可产生多个分支流程。单这种实现显然设计的时候并不直观,因为设计流程的时候可能是这样子的:
  
  最终用户可能会比较难以理解这个图本身的意义,因此可能在分析设计阶段引起沟通的障碍。但是这种方式好处也是很显然,首先是可以任意扩展多实例中间的步骤,其次是可以任意选择实例的合并方式,在设计上灵活性很较大。

  就我所知道的这几种实现方式来说,也有的是两三种不同方式的组合,再多的方式就限于个人见识了。

5. 应用

  这个模式的应用就十分的广泛了,譬如工程中多个部门的合作、协办、汇签等业务。汇签的例子:

  

  注意我使用这种拓扑实现的方式,其好处是可以随便换去合并方式。若投票选举,N个副总只需要半数通过,就可以通过这个业务,则 AND 的合并方式可以改成 N选M 的模式。若是要求全数通过,则是用 AND 的方式。若是只需要得到其中一个副总的通过,那就用 OR 的方式。这个流程设计就显得很简单了。若不是采用拓扑实现,那业务上如果变更汇签的方式,则要用硬代码实现了。

分享到:
评论

相关推荐

    Making Multiple Instances of an Application run in the Same

    Making Multiple Instances of an Application run in the Same Process Space as different Threads (56KB)

    weka源码解析 instances类

    ### Weka源码解析:Instances类详解 #### 一、Weka及Instances类简介 Weka是一款开源的数据挖掘工具,支持多种数据预处理、分类、回归、聚类、关联规则等机器学习算法,并且提供了丰富的图形用户界面以及API接口。...

    基于关系数据库的工作流系统设计与实现

    工作流模型是描述业务流程的形式化表示,通常包括活动(Activities)、决策(Decisions)和流程实例(Instances)。这些模型可以采用各种形式,如顺序流模型、状态机模型或Petri网模型。作者可能详细介绍了如何根据...

    k2.net介绍 K2.net 是SourceCode公司的一款工作流产品

    - **k2.net 2003**: 这是基于.NET Framework构建的工作流平台,为早期版本,提供了基础的流程管理功能。 - **k2.net blackpearl**: 基于Windows Workflow Foundation开发,进一步提升了流程处理能力和灵活性。 - **...

    Manage Multiple Instances of OSPF with SNMP Contexts [IP Application Services] - Cisco Systems

    Manage Multiple Instances of OSPF with SNMP Contexts [IP Application Services] - Cisco Systems

    4流实战_工作流中的概念与JBPM相关API调用

    工作流管理系统(WfMS)则是支持工作流实施的软件工具,它负责定义、执行和控制工作流程。 JBPM是Red Hat公司开发的一款强大且灵活的工作流和业务规则引擎,它提供了一整套工具和服务,用于建模、部署和执行工作流...

    instances_valminusminival2014.json和instances_minival2014.json

    本文将深入探讨两个关键文件——`instances_valminusminival2014.json`和`instances_minival2014.json`,它们与COCO标签的关系及其在实际应用中的作用。 COCO数据集由Microsoft Research团队创建,旨在促进多种视觉...

    instances_minival2014.json和instances_valminusminival2014.json

    《深度学习数据集的标注与验证:以instances_minival2014.json和instances_valminusminival2014.json为例》 在计算机视觉领域,数据集是模型训练的基础,而有效的标注则决定了模型的性能。当我们谈论"instances_...

    工作流引擎例子(连库Oracle)

    1. **数据库设计**:工作流引擎通常需要一个数据库模式来存储流程定义、实例、任务、变量和其他元数据。这可能包括表如`WF_PROCESS_DEFINITIONS`(流程定义)、`WF_PROCESS_INSTANCES`(流程实例)和`WF_TASKS`...

    php设计模式之单例模式_.docx

    ### PHP设计模式之单例模式详解 #### 一、引言 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决特定类型的问题。PHP作为一种流行的服务器端脚本语言,同样可以从这些设计模式中受益。本文将详细介绍...

    多例模式学习笔记

    **多例模式学习笔记** 在软件设计模式中,多例模式(Multiton)是一种扩展了单例模式的设计模式。单例模式确保一个类只有一个实例,而多例模式则允许一个类有多个实例,但通常数量是有限的。这种模式常用于资源管理...

    使用C++11实现线程安全的单例模式

    std::cout << "Error: Multiple instances created." ; } return 0; } ``` 这个程序会输出"Both references point to the same singleton instance.",证明了单例模式的正确实现。 总结来说,C++11通过`std::...

    instances_trainval35k.

    标题“instances_trainval35k”指的是一个特定的数据集,它是针对对象检测任务的一个训练和验证集合。在计算机视觉领域,对象检测是一项重要的任务,它旨在识别和定位图像中的各个对象。这个数据集,结合了训练...

    spark之Standalone模式部署配置详解

    Spark 之 Standalone 模式部署配置详解 Spark 是一个基于内存的集群计算引擎,它可以在多种模式下运行,包括本地模式、伪分布式模式、集群模式等。在这些模式中,Standalone 模式是 Spark 的自带模式,对于大多数...

    linux+programming+instances网络编程教程代码

    首先,我们要理解Linux网络编程的基础——套接字(Sockets)。套接字是网络通信的接口,提供了进程间的通信能力,可以实现不同主机间的通信。在Linux中,主要使用Berkeley套接字API,包括socket()函数用于创建套接字...

    instances and results.rar

    《实例与结果——深入解析压缩包“instances and results.rar”》 在信息技术领域,数据的存储和传输常常需要经过压缩处理,以节省空间并提高效率。"instances and results.rar"是一个压缩包文件,通常用于存储一...

Global site tag (gtag.js) - Google Analytics