首页> 中国专利> 用于在事件驱动环境中制定业务流程的方法和系统

用于在事件驱动环境中制定业务流程的方法和系统

摘要

本发明提供一种用于在采用计算机管理的制造执行系统(MES)或制造操作管理(MOM)系统的生产设施中制定业务流程的方法和系统,其中,所述MES/MOM系统基于由事件协调的处理例程在事件驱动环境中操作。该方法包括以下步骤:提供业务流程的模型(61);解析业务流程模型(62);作为解析的结果,创建预编译的封闭源命令处理例程和事件处理例程(63);在系统的操作域中创建工作流程模型的实体(64);以及基于所述工作流程模型,通过使用预编译的封闭源命令处理例程和事件处理例程来运行使业务流程实例化的工作流程,命令处理例程在令牌上工作,所述令牌针对不同类型的元素而区分,由针对由所述制定提供的运行中的每个元素的命令处理例程创建,并且针对每个元素,根据令牌所属的运行实际上被执行还是被跳过而区分。

著录项

  • 公开/公告号CN112868038A

    专利类型发明专利

  • 公开/公告日2021-05-28

    原文格式PDF

  • 申请/专利权人 西门子股份公司;

    申请/专利号CN201980068668.0

  • 申请日2019-09-24

  • 分类号G06Q10/06(20060101);G06F8/35(20060101);

  • 代理机构11227 北京集佳知识产权代理有限公司;

  • 代理人康建峰;陈炜

  • 地址 德国慕尼黑

  • 入库时间 2023-06-19 11:06:50

说明书

本发明涉及一种用于在采用计算机管理的制造执行系统(MES)或制造操作管理(MOM)系统的生产设施中制定业务流程(business process)的方法和系统。更具体地,本发明涉及在事件驱动环境中制定业务流程。

在采用MES/MOM系统的生产设施中,通常借助于所谓的业务流程来描述活动,所述业务流程基本上是被设计成生产某一产品或服务的一系列步骤。

有时,要同时制定的流程的数目非常多,并且由于系统无法达到可接受的性能,因此需要对流程本身进行再设计。此外,业务流程没有使用类似程序的、面向流程的表示例如UML活动图来建模,而是使用类似BPMN(业务流程建模标注)的形式来建模,这种形式具有更强的表达性,但是在这种形式中,除非对模型进行再设计,否则制定是不可能的。

用于业务流程制定的最常见解决方案是基于编译代码技术,根据该编译代码技术,根据BPMN规范准备的模型被转换成可执行代码。该技术本身是复杂的,原因在于该技术既在限定BPMN模型时又在每当BPMN被修改时需要对可执行程序进行编译、安装和记录。此外,使编译代码用于不同的主机也是复杂的操作。

即使在事件驱动架构即其中制定被设计为一连串事件和命令的架构中,也不能省去编译,所述事件和命令由相应的处理例程(handler)处理。同样在这种情况下,处理例程将针对每种特定情况并且在模型中的每次变化时来准备和编译。

因此,本发明的目的是通过提供下述方法和系统来克服上面提到的缺点,所述方法和系统用于在采用在事件驱动环境中操作的计算机管理的制造执行系统(MES)或制造操作管理(MOM)系统的生产设施中制定业务流程,这省去了对大量代码进行编译的需要。

上述目的通过包括以下步骤的方法和系统来实现:

-提供业务流程的模型;

-解析业务流程模型;

-作为解析的结果,创建预编译的封闭源命令处理例程和事件处理例程;

-在系统的操作域中创建工作流程模型的实体;以及

-基于所述工作流程模型,通过使用所述内置的预编译的封闭源命令处理例程和事件处理例程来运行使业务流程实例化的工作流程,命令处理例程在令牌上工作,所述令牌针对模型中的不同类型的元素而区分,由针对由所述制定提供的运行中的每个元素的命令处理例程创建,并且针对每个元素,根据令牌所属的运行实际上被执行还是被跳过而区分。

在本发明的实施方式中,通过为每个令牌赋予不同的布尔值来实现根据令牌所属的运行实际上被执行还是被跳过来区分令牌。

在本发明的实施方式中,在模型中的每个元素处,在事件处理例程和命令处理例程之间移交操作控制。

在本发明的实施方式中,还提供了以下步骤:基于令牌在网关处的到达顺序,决定对在所述网关处的令牌将要执行的动作。

在本发明的实施方式中,还提供了以下步骤:基于令牌本身的布尔值决定对在网关处的令牌将要执行的动作。

在发明的实施方式中,还提供了以下步骤:将识别令牌所属的运行的代码包括至每个令牌中。

在本发明的实施方式中,还提供了以下步骤:对在汇聚排他性网关处的令牌的布尔值和状态进行分析;并且由于属于实际上被执行的运行的令牌的先前到达而消耗属于被跳过的运行并且遗留的未消耗的令牌。

在本发明的实施方式中,还提供了以下步骤:通过涉及属于实际上被执行的运行的令牌的类似事件,向涉及属于被跳过的运行的令牌的状态改变的事件的处理分配优先级。

此外,可以提供计算机程序元件,所述计算机程序元件包括计算机程序代码,所述计算机程序代码用于在被加载在计算设备的数字处理器中时执行根据上面提到的方法的步骤。

另外,可以提供存储在计算机可用介质上的计算机程序产品,该计算机程序产品包括用于使计算设备执行所提到的方法的计算机可读程序代码。

现在将参照附图,在优选但非排他性的实施方式中描述本发明,在附图中:

-图1是描绘本发明的方法的特征及其可能的组合的草图;

-图2是示出根据本发明的制定过程的框图;

-图3是与图2对应的流程图;

-图4、图5是示出对具有布尔值的可交换令牌的使用的图;

-图6至图10示出了本发明的示例性应用中的制定中涉及的实体、命令和事件的结构;

-图11、图12是将运行编号包括到令牌中的示例;

-图13是交易分割的图;

-图14是示出在交易期间创建的令牌的交易分割的图;

-图15、图16A、图16B是在使用交易分割时图13、图14中描绘的业务流程的执行中的事件、命令和处理例程的时序图;

-图17是基于汇聚网关处的令牌的到达顺序的过滤的图;

-图18是不具有和具有图17的过滤的系统的性能的比较;

-图19是并发推断的实现方式的图;

-图20是EnterElementOnTokenReady事件处理例程的实现方式的流程图;

-图21是EnterElement命令处理例程的实现方式的流程图;

-图22示出了令牌交换的一些示例;

-图23是网关清理算法的流程图;

-图24示出了对假令牌的清理的一些示例。

图1是描绘本发明的方法的基本特征以及其中可以利用这些特征的方式(实施方式)的草图。

根据本发明,业务流程的制定问题被转移至事件驱动架构(EDA)的场景,其中制定被设计为一连串事件和命令(“saga”)。

采用其中本发明可以找到应用的事件驱动架构的系统的示例是由申请人开发和商业化的SIMATIC IT Unified Architecture Foundation(SIT UAF)平台。

转移在EDA场景中的模型限定不依赖于编译代码技术,而依赖于操作域中的一组内置伪影:实体(可以保持制定的状态)、消息(即命令和事件)以及托管在其中要制定业务流程的系统的架构(在示例中为SIT UAF)中的两种类型的处理例程,即:

-事件处理例程,其根据特定系统事件来运行,并且能够读取持久对象并调用交易,其在命令处理例程中实现;

-命令处理例程,即能够修改持久对象并触发业务事件的例程。

将制定转移至EDA环境并且消除代码编译(特征1和2,图中框51和52)表示本发明的基本实施方式(实施方式I)。此外,在事件驱动架构中,必须付出特殊的设计努力来使处理例程无状态,并且因此使对持久状态的访问特别快速且隔离,这是通过令牌(可交换令牌,特征3,框53)的特定组织获得的。因此,对由实施方式II提供的这样的特征的包括致使显著的性能改进。特征4至特征6(交易分割或分解、基于令牌的到达顺序的过滤以及关于在EnterElement命令处理例程中令牌交换的决定,分别为框54至框56)对于解决由小型工作单元的并发造成的典型问题是有用的,并且与先前的特征1至特征3一起被包括在本发明的另一实施方式(实施方式III)中。另一特征(特征7,框57)提供了将运行编号包括至令牌密钥中,并且被包括在用于处理关于回环的一些功能问题的第四实施方式中。包括又一特征(特征8,框58)——其提供对未消耗的假令牌的清理——产生旨在解决由在排他性汇聚网关处的这样的令牌导致的可能问题的实施方式(实施方式V)。实施方式IV和实施方式V有助于改进性能,特别是在事件驱动环境中的实现方式的正确性方面。

图2示出了针对非常简单的示例性业务流程的根据本发明的制定的原理,该示例性业务流程包括分别为SE和EE的开始事件和结束事件、分别为IG和EG的发散网关和汇聚网关(示出为并行网关)以及三个任务T1、T2、T3。

当系统必须制定业务流程时,包含在创作域中的BPMN被解析并且被转换成驻留在操作域中的两个复合实体:前者包含模型信息(工作流程模型),并且后者包含运行时状态(工作流程)。包含在BPMN中的图形信息(图)在制定中不使用。

这样的重新设计的核心概念是使用:

-令牌,作为表示执行进程的一般技术,将通过下面讨论的特征来改进;

-预编译的封闭源命令和事件处理例程,作为替换编译代码的一般技术。

图3以流程图60的形式示出了上面描述的过程。步骤61是提供要制定的BP,并且步骤62是解析,从而产生工作流程模型63。步骤64是在模型内限定根据要制定的元素的种类(序列流或流元素)而区分的令牌,并且步骤65是通过使用预编译的内置处理例程并且通过针对每个元素创建令牌来执行与模型对应的工作流程。

为了加快和隔离对实体的访问,与常规方法不同,令牌不表示整个运行的进程,而是表示运行中的单个元素的状态(元素令牌):换句话说,命令处理例程针对业务流程的单个元素创建令牌,并且基于适当的事件改变其状态。显然,元素范围令牌比运行令牌更细粒度并且导致较少的争用。此外,为了进一步优化争用,令牌被分成序列流令牌和流元素令牌。其中使用这样的令牌的方式将根据后续的描述变得明显。

由于事件驱动架构即基于由事件协调的处理例程的架构的固有松散耦合,到这样的架构的通道在以下方面提供了一系列益处:

-可维护性:处理例程是松散耦合的,并且允许对其他部分具有较小的影响和较小的回归的维护;

-水平可扩展性:处理例程可以被分发在不同的主机上;

-可测试性:事件处理例程可以是分流的或短路的事件:其中只测试集成逻辑,或者只测试许多命令处理例程中的一些;

-无状态性:处理例程几乎不需要主机内存,并且在不活动时几乎不占用资源;

-低级别隔离策略:一些架构例如SIT UAF使用允许较高的并行性的低级别隔离策略(快照);

-模拟:虚拟副本可以替代命令处理例程,而不进行实际动作;

-监控:订阅所有相关事件容易产生针对监控应用的基础。

进而,对操作伪影的创建而不是对机器代码的编译不仅是朝向集成至事件驱动架构的步骤,而且其还在以下方面对其自身提供了一些益处:

-制定开始的即时性:模型对象可以被再循环,运行时模型可以以毫秒为单位创建;

-制定开始的容易性:实现业务流程制定的处理例程就像其他处理例程一样,它们不需要来自用户和操作者的特别注意,例如在主机之间移动档案(例如.jar/.war)等;

-安全性:就像其他应用一样,制定处理例程与架构完全集成,因此它们受到相同的安全限制,并且不需要特殊的威胁和风险评估;

-可扩展性:由于伪影被并入可扩展的架构中(即用户可能具有扩展具有自定义属性的实体以及具有自定义的前动作和后动作的业务逻辑的可能性),因此它们受益于其他伪影的可能性;

-用于不平衡的自由流构造的基础:一些构造例如与汇聚网关或流出不匹配的发散网关通常不被编译器支持,而是可以在BPMN模型中使用(参见下一优点)。

特征3中提供的令牌的改进是使用具有以下布尔值的可交换令牌:在包含令牌的路径实际上被执行时为“真”;在包含令牌的路径实际上被跳过时为“假”。

对于由开始事件SE1和结束事件EE1、网关G1、G2、G3以及连接各种元素的序列流(边缘)SFa至SFf建模的简单流程,图4中示出了具有布尔值的可交换令牌的示例。发散网关产生汇聚在结束事件EE1处的两个分支。第一分支包括序列流SFb、网关G2和序列流SFd。第二分支包括序列流SFc、网关G3和序列流SFe以及从G3至G1的回环。假设该流程要求沿着下分支中的路径SFc、G2、SFe执行操作,而跳过上分支和回环。如果运行实际上被执行(真运行),则由粗实线指示该运行,并且如果运行未被执行(假运行),则由粗虚线指示该运行。在每个运行中,针对每个流元素和每个序列流相应地生成“真”令牌(由具有斜切角的空白框示出)或“假”令牌(由具有斜切角的虚线框示出)。因此,利用真/假运行的假定布置,立即看出真/假令牌如图所示。每个运行都与图中的括号之间指示的运行编号相关联。由“1”表示的第一运行(SFa的制定)被表示为“1”;根据以下一般规则来创建任何后续运行的编号:在分叉和真运行情况下,通过用表示分叉的外出边缘的数字后缀先前运行的编号;在单个可能路径和假运行的情况下,通过传播先前运行的编号不变。因此,利用图中所示的真/假运行的布置,离开G1的运行被表示为“11”和“12”。由于在G1处不存在分叉,因此运行“11”保持相同的运行编号直至EE1。在G3处存在分叉,并且因此输出运行被编号为“121”和“122”。运行“121”为假,并且因此在从G1前进到G3时也保持这样的编号。

具有布尔值的可交换令牌是将处理例程限制在其周围并且使自由组合的网关成为可能的手段。还考虑到令牌是针对业务流程的每个元素生成的,并且不像常规技术中那样仅针对完整运行生成的,这为处理大规模模型提供了支持。实际上,在汇聚网关处,常规的运行范围令牌的使用将迫使系统将模型向后爬行,以找出开放的发散网关(该发散网关可能距汇聚网关非常远),以理解是否所有分支已经被考虑,并且然后将令牌从真分支移动至网关。这需要大量的时间和内存资源,随着流程复杂度的增加需要的时间和内存资源急剧增加。相反,由于还针对未被执行的运行创建了令牌,因此系统立刻能够决定令牌是否将要被交换。这例如在图5中示出。汇聚网关CG1在其输入序列流上具有就绪令牌Rt1(真)和Rt2(假),并且这允许网关理解所有分支已经被考虑。因此,就绪令牌Rt1和Rt2被交换(或被消耗),使得已消耗的令牌Ct1、Ct2出现在相应的序列流上,并且在CG1上创建了新的就绪真令牌Rt3。稍后将进一步讨论令牌交换。

省去搜索发散网关的需要还允许在BPMN图中不仅包括常规的平衡方案和对称方案,即其中每个发散网关具有一个收集离开前者的所有路径的(在对称方案的情况下,与发散网关具有相同类型的)汇聚网关的方案,而且还包括不平衡方案(其中汇聚网关仅收集离开发散网关的路径中的一些)和不对称方案,其中汇聚网关的类型可以是与发散网关不同的类型。不平衡方案和不对称方案未示出在附图中,这是因为其表示对于理解后续描述是不重要的。

根据本发明的特征7,每个令牌在其密钥中包括其所属的运行的编号。将运行编号与工作流程标识、元素标识和迭代包括在一起(同样参见图9)有利于保护参考标识并且有助于验证和维护正确性。特别地,在回环的情况下,这样的特征允许在真分支中具有回环,同时避免了假分支上的无限回环,这是因为令牌在运行编号不增加的情况下传播。这将在稍后讨论。

图6至图10描绘了在应用于上面提到的SIT UAF平台时,本发明的方法中涉及的实体、命令和处理例程的组织。关于令牌实体,上面提到的序列流令牌与流元素令牌之间的区别连同在序列流令牌中包括运行编号将被理解。序列流令牌与流元素令牌之间的区别使得可以识别相应的序列流和流元素,并且为此包括标识字段(分别为SequenceFlowId和FlowElementId)。注意,附图中未出现字段FlowElementId。迭代(在流元素令牌中,因为仅流元素可以由环路涉及)是增量字段,该增量字段在将要被多次执行的任务的每次执行时被更新。此外,字段“Status”包括令牌的实际就绪/已消耗的状态,以及令牌的布尔值(真/假)。上面提到的标识字段连同运行编号和迭代形成了令牌的密钥。在附图中示出的各种伪影中的其他字段是标准字段,其含义是本领域技术人员已知的。

图11和图12示出了在类似于图4中描绘的流程的流程中在令牌中使用运行编号的示例。与图4相同的附图标记已经用于模型元素,但运行编号稍有修改,这是因为执行序列流SFa的运行尚未被编号,使得退出G1的运行现在是运行“1”和运行“2”。如所述,其他运行的编号取决于分叉的存在并且取决于运行为真或假。运行编号已在令牌内部报告。

更具体地,图11示出了回环上真运行的情况。涉及上分支的运行“1”未示出,这是因为针对该示例不感兴趣。运行“2”沿着SFf从G3回环至G1作为运行“21”,然后再次返回至G3,并且最终到达结束事件EE1。因此,将在序列流SFc上生成具有运行编号“2”的令牌tk4。在执行沿着运行“2”第一次到达G3处并且沿着回环退出G3时,创建新令牌tk5,并且接收运行编号21。由于运行编号的改变,令牌tk5可以在不与在通过网关的执行的第一通道处创建的现有令牌tk6冲突的情况下跟随回环,并且再次到达网关G3。此处,针对具有运行编号“212”的令牌tk7进行交换,该令牌tk7最终可以到达EE1。

图12示出了上分支上的真运行“1”以及下分支和回环上的假运行“2”、“22”的情况。回环上的假令牌tk8对于将触发无限循环(“22222……”)的令牌“22”在网关G1处不被交换,而是在回环上以其原始运行编号“2”传播。在网关G1处,该令牌tk8与先前针对运行“2”创建的现有令牌tk9冲突,从而结束任何其他计算。这在附图中由“停止重复”符号示出。

图13和图14示出了示例性流程中的交易的分割(或分解)。除了网关在此处被示出为包容性网关的事实之外,该示例性流程与图2所示的流程类似。此外,已经添加了用于序列流(SF1至SF7)的附图标记。该流程要求执行任务T1和T2,而跳过任务T3。可以从在每个元素(线程(a))处的事件处理例程与命令处理例程之间的控制切换中推断出分解。如图例中所指示的,本发明感兴趣的命令是EnterElement和ExitElement,并且感兴趣的事件是EnterElementOnTokenReady、ExitElementOnTokenReady和ExitElementOnStatusChanged。当序列流令牌就绪时,启动EnterElementOnTokenReady事件处理例程:在读取在序列流之后的流元素上就绪的令牌的状态时,其决定是否可以进入该元素。通过比较,线程(b)示出了未分割的交易,如常规技术中出现的那样。

更详细地,如果流元素是其中不需要外部活动的元素(“零成本”元素,例如网关、开始事件或结束事件),则EnterElement提交,释放事件WorkProcessTokenStatusChanged,并且系统退出元素,在ExitElement命令处理例程中创建新的序列流令牌;针对它们中的每一个触发事件WorkProcessTokenStatusChanged。另一方面,如果流元素需要活动要被执行,则EnterElement将控制移交给外部程序;当外部活动将到达最终状态并且系统将触发StatusChanged事件时,制定将根据更常规的外部集成模式恢复。

为了进一步说明到目前为止已经讨论的针对令牌交换的内容,图14示出了在任务T2执行之后并且在EG之前的用于图13的交易的令牌。针对实际上被执行的分支(真运行,此处为上分支)并且针对被跳过的分支(下分支)两者,创建和消耗(交换)令牌。所有令牌(甚至消耗的令牌)都存储在实体的数据库的表中。因此,针对图14所示的情况,数据库中将存在以下令牌表:

表1

SF5和SF6上的令牌在EG处交换之后,两个“就绪令牌”将其状态改变为“已消耗”,并且创建用于EG的令牌,使得存在以下表:

表2

如前所述,特征4是有助于将传统推断概念转换为事件驱动架构的特征中的一个。推断(即在所有被包含的实体已改变其状态时改变较大实体的状态)是必须通过在交易结束之后将逻辑移动至专用事件处理例程的非平凡技术来解决的问题。常规地,ExitElement命令处理例程基于必要和充分条件来决定是否进行和如何进行。在根据本发明的方法中,EnterElementOnTokenReady事件处理例程评估必要(“MayEnter”)条件,并且EnterElement命令处理例程验证整个条件,并且说明如何进行:通过真交换、假交换或不行动。

图15示出针对StatusChanged(final)事件的这种方法。当这样的事件发生时,ExitElementOnStatusChangedFinal事件处理例程朝向命令处理例程发出命令ExitElement。流元素与序列流之间的相关令牌交换发生,并且命令处理例程与TokenStatusChanged(flowElement,exchanged)事件和TokenStatusChanged(sequenceFlow,ready)事件反应(步骤121)。以下EnterElementOnTokenReady事件处理例程评估是否可以进入元素,并且在肯定的情况下,其发出EnterElement命令,针对该命令,命令处理例程与TokenStatusChanged(flowElement,ready)事件反应(步骤122)。在该事件发生时,在步骤124处执行类似于步骤121所示的过程。

在图16A、图16B中描绘了图13、图14所示的用于分割交易的saga。此处,在各种步骤中,ExitElement事件和EnterElement事件交替出现,并且分别产生相应的ExitElement命令和EnterElement命令。命令的执行致使生成适当的真/假、就绪/已消耗令牌,并且启动相应的TokenStatusChanged事件。每个命令/事件中的括号指示按顺序指示所涉及的元素(SE、SF1、T1……)、令牌的值(真/假)和状态(就绪/已消耗)以及运行(1、11、12……),如上面的表1和表2。

由来自用户的EnterElement命令启动执行。响应于该命令,生成与SE和运行“1”相关的就绪真令牌,并且相应的事件TokenStatusChanged被启动至事件处理例程(Event_Handlerl)。在步骤101中,示出了与SE上的流程执行相关的命令/事件。Event_Handlerl将ExitElement命令发送至命令处理例程,并且因此,生成用于SE的交换真令牌和用于序列流SF1的就绪真令牌(事件TokenStatusChanged(SE),交换,真,1)。然后,流程传递至任务T1(事件:从SF1至T1的EnterElementOnTokenReady,步骤102)。Event_Handlerl发送EnterElement(T1)命令,并且因此,事件TokenStatusChanged(T1,就绪,真,1)发生。此时,发生对T1的处理。在完成这样的处理时(由相应的StatusChanged事件示意),该处理继续进行由T1中的状态改变所请求的操作(事件:T1上的ExitElementOnStatusChanged、从SF2至IG的EnterElementOnTokenReady以及IG上的ExitElementOnTokenReady,步骤103至步骤105)。更具体地,步骤103、104中的命令/事件的序列与步骤101、102所示的命令/事件的序列类似,不同之处在于所涉及的元素是T1和SF2(步骤103)以及SF2和IG(步骤104)。相反,步骤105考虑到IG是发散网关,运行“11”(真)和“12”(假)从其退出:因此事件将涉及针对运行“11”的已消耗和就绪真令牌的生成——如针对先前的运行“1”一样——以及针对运行“12”的假令牌的生成。当然,在执行的这一点上,针对运行“11”的TokenStatusChanged事件涉及IG和SF3,并且针对运行“12”的TokenStatusChanged事件涉及SF4。针对两个运行的操作然后并行进行。

对运行“11”的执行包括与步骤102、103类似的步骤106和107,以及在步骤106与107之间的对T2的处理。在步骤108中,真令牌在结束网关EG处就绪:然而,真运行的唯一令牌的存在指示涉及运行“12”的操作尚未完成(“触发条件尚未满足”),使得真令牌尚不能在EG上交换。步骤109、110是指对假运行“12”的处理,该处理基本上与对真运行“11”的处理类似,不同之处在于所涉及的令牌为假以及没有发生对T3的处理。在步骤111处,假令牌也已到达(事件:从SF6至EG的EnterElementOnTokenReady),并且真令牌就绪。从退出网关EG引导至结束事件EE的步骤113至步骤114包括与上面讨论的EnterElementOnTokenReady/ExitElementOnTokenReady事件中包括的事件/命令等效的事件/命令。

图17和图18描绘了由特征5提供的对事件处理例程中的过滤器的优化,由此仅在最后的触发传入令牌就绪时调用EnterElement命令。此外,由其他之前的令牌遮蔽的令牌触发命令处理例程,以使其在所有提交之后评估该情况。该优化利用了“First-in-Line(列中第一)”和“Not-First-in-Line(非列中第一)”令牌的概念:“First-in-Line”表示每个序列流上最旧的令牌,并且“Not-First-in-Line”表示在First-in-Line之后到达序列流的令牌。限制命令/事件的技术不能包括不是“First-in-Line”的令牌。

图17示出了接收一个进入序列流SFg上的真令牌tk1、tk3和其他序列流SFh上的令牌tk2的网关G4。假设到达G4处的顺序是tk1、tk2、tk3,则tk1和tk2是“First-in-Line”(tk2可以被称为“Last-First-In-Line(最后的列中第一)”,其在tk1之后到达,但是在不同的序列流上),并且tk3是“Not-First-in-Line”。

图18是示出在优化不存在(图(a))和优化存在(图(b))的情况下图17中描绘的情况下的事件/命令处理例程的图。考虑了基本上同时就绪的两个并发令牌,例如tk1和tk2,并且该图示出了相应的事件和命令处理例程对131、132(handler_l)和133、134(handler_2)。在图(a)所示的常规技术中,在事件处理结束时,两个事件处理例程都生成命令EnterElement,这必须消耗相应的令牌,以在网关G4上用新的就绪令牌对其进行交换。因此,两个事件处理例程在返回空闲之前等待由相应的命令处理例程对命令的处理。首先介入的Command_handler_l在交换令牌tk1中是成功的,并且在处理结束时提交交易。Command_handler_2试图完成交易(处理),但失败了,并且在尝试结束时,Command_handler_2再次尝试交换(再次尝试)。在第二次尝试时,Command_handler_2意识到其无事可做,并且提交交易。在优化存在时,Event_handler_1不生成命令,这是因为令牌tk1不是最后的,使得没有用于由Command_handler_1进行的命令处理或由Command_handler_2进行的再次尝试的等待时间,这具有对时间和资源的明显节省。

除了对时间和资源的这样的节省之外,所描述的优化还允许避免在高并发的情况下不是“First-in-Line”的令牌的丢失。此外,在推断的情况下,“Last-First-In-Line”或“Not-First-in-Line”技术是可以在无需进一步复杂化的情况下应用的实践,从而提供了快速的折衷方案。

在EnterElement命令处理例程内部执行类似的检查,以决定令牌交换是否在真或假路径上发生(特征6)。在真路径上的排他性网关的情况下,事件处理例程将触发令牌的ID传递给EnterElement作为线索,但是如果另一个交易已经同时消耗了该触发令牌,则最旧的就绪真令牌被消耗。换句话说,运行编号仍然可以用作针对排他性网关的线索,以避免尝试消耗多于一个真令牌中的最旧的一个令牌的并发性。

此外,该检查通过避免由事件处理例程误导的相同令牌交换两次而有助于提高操作正确性,并且有助于改进性能,这是因为尝试交换触发事件处理例程的令牌避免了不需要的并发。此外,实现了确定性设计,这是因为空闲暂停(“睡眠”)以使其他命令提交——如通常在现有技术中发生的——得以避免,并且在不同的交叠行为的情况下实现正确的行为。此外,在推断的情况下将决定移动至最后的命令处理例程是可以在无需进一步复杂化的情况下应用的实践,并且允许在命令处理例程内部具有一致的微交易/业务逻辑。

在特征4至特征6处理的交易性事件驱动架构中实现并发推断的问题比流程制定更广泛,包括主题如下:

-在其所有操作都已经完成时改变生产顺序状态;

-在其所有元素(令牌)都已经正确完成时将工作流程状态改变为完成;

-在其所有元素(令牌)都已经完成但是它们中的一些错误时将工作流程状态改变为具有错误的完成。

在后一种情况下使用这样的特征的示例在图19中示出。示出了具有两个运行“1”和“2”的流程,其中对运行“1”的执行受到错误的影响(草图(a))。错误由“危险”符号指示。因此,具有错误的就绪令牌Rt4和正确的就绪令牌Rt5到达结束事件EE2处(草图(b)):每个令牌将像通常一样被消耗(分别变成已消耗令牌Ct4、Ct5),并且新的就绪令牌Rt6、Rt7(具有和不具有错误)在EE2上创建(草图(c))。在这样的令牌也已经被消耗时(如草图(d)和(e)所示,Rt6、Rt7已经变成了已消耗令牌Ct6、Ct7),可以离开在草图(c)处指示的流程的“进行”状况。取决于令牌的状态,决定该流程是“完成”(草图(d))还是“具有错误的完成”(草图(e))。更具体地:

-如果对令牌的检查在与“EnterElement”处理例程的交易相同的交易中进行,则很可能没有处理例程看到已经消耗的所有令牌的状况,并且整体状态不改变;

-如果相反,检查针对另一交易留下,则以上状况被处理例程中的一个看到,但如果该处理例程由“正确的”令牌引导,则这样的值将被传播,并且流程将被错误地设置为“完成”;

-正确的设计是在检查所有令牌的情况时,使得由于检测到具有错误的令牌,因此将假定“具有错误的完成”状态。

图20示出了实现与WorkProcessTokenStatusChanged相关联的EnterElementOnTokenReady事件处理例程的算法的流程图200。处理例程被优化以符合所有特征。像通常一样,排他性网关的概念包括与包容性网关或并行网关不同的所有流元素。在流程图200中,框201、204、205包含在实现期间考虑的变量(分配)的限定,鉴于先前的描述,所述分配是不言自明的。

在第一操作步骤202处,检查是否存在多于一个的传入边缘。在否定的情况下,立即发出EnterElement命令(步骤210)。在肯定的情况下,检查元素是否是除了排他性网关之外的网关并且令牌是否为假(步骤203)。在否定的情况下,再次立即发出EnterElement命令。在肯定的情况下,检查当前令牌是否是最后到达任何边缘的或者是否为First-in-Line令牌(步骤206)。在否定的情况下,流程结束。在肯定的情况下,检查元素是否为排他性网关(步骤207)。在肯定的情况下,检查所有First-in-Line就绪令牌是否为假(步骤208),并且在否定的情况下,检查所有令牌是否已被处理(步骤209)。在两次检查的肯定结果时,发出EnterElement命令,而在否定的情况下,流程结束。

应当理解,附图中所示的操作流程取决于特定情况以不同方式运行。图20突显了在图16B的步骤108(双实线箭头)和步骤111(双虚线箭头)的情况下在实现处理例程时实际执行的步骤。出现在这样的步骤中的状况分别在框A和B中指示。

图21示出了实现EnterElement命令处理例程以交换传入就绪令牌的算法的流程图300。交换是消耗(旧令牌从“就绪”传递至“消耗”)操作和创建(新令牌被创建为具有在流元素上的正确运行编号)操作的混合。在流元素处以下交换情况是可能的:

(1)开始交换(初始化);

(2)完全假交换(假令牌的传播):由在每个传入序列流上的假令牌触发入口;

(3)完全真交换:由在每个传入序列流上的真令牌触发入口;

(4)单一真交换:由通常在排他性汇聚网关上的真令牌触发入口;

(5)无交换。

交换算法还提供了在排他性汇聚网关处对遗留的未消耗的假令牌的清理。当由于事件递送的非确定性性质,真令牌在假令牌之前到达网关处时,清理是有用的。这将进一步更详细地讨论。这样的清理在流程图中被标记为(6)。

还在流程图上相应决定步骤的适当输出处报告了交换和清理步骤的不同情况的以上编号。

已经说过,当新令牌在交换时被创建时,根据上面以一般方式讨论的运行编号创建规则来分配运行编号。关于流元素,运行编号分配的结果如下:

(1)开始交换:运行编号被初始化为空字符串;开始交换将在交易的开始事件处发生;

(2)完全假交换:运行编号是由调用者(当前)传递的运行编号;

(3)完全真交换:运行编号是由调用者(当前)传递的运行编号;

(4)单一真交换:运行编号是最佳真令牌的运行编号,即由调用者传递的运行编号,或者如果令牌已经被消耗,则是边缘上的最旧就绪真令牌的运行编号;

(5)无交换:没有新令牌的创建。

关于序列流,运行编号分配的结果如下:

(a)对于序列流离开的流元素上的真令牌,流元素的运行编号用表示外出边缘的单调数字后缀,除非仅有一个外出边缘,在这种情况下不进行后缀;

(b)对于流元素上的假令牌,运行编号按原样传播。

用于交换的不同情况的令牌在图22中示出。草图(1)至草图(3)描绘了同向的情况,并且草图(4a)、草图(4b)描绘了情况4的两个替选。考虑了具有两个输出序列流的开始事件S以及具有两个输入和两个输出序列流的通用网关G。草图(2)和草图(3)假设令牌2最后到达:因此,令牌“2”使网关触发并且在两个输出序列流上传播,两个输出序列流具有用于完全假交换的运行编号“2”和用于完全真交换的运行编号“21”、“22”。在草图(4a)和草图(4b)中,令牌“2”是唯一的真令牌,并且因此该令牌“2”独立于到达的顺序而使网关触发;输出序列流上的令牌是令牌“21”和“22”,如情况(3)中那样。

返回至图21,在流程图300中,框301、302、312和314包含分配,鉴于先前的描述,分配也是不言自明的。在初始步骤303处,检查传入计数是否为0。检查的肯定结果指示开始,并且致使对具有初始化的运行编号的真令牌的创建(步骤304),并且不需要进一步的操作。在检查303的否定结果的情况下,检查被处理的边缘上的First-in-Line(FIL)就绪令牌是否为假(步骤305)。肯定结果对应于情况(2),并且致使对FIL(First-in-Line)令牌的消耗(步骤306)以及对具有适当运行编号的假令牌的创建(步骤307)。在检查303的否定结果的情况下,检查元素是否为除了排他性网关之外的网关,并且传入边缘是否为第一传入边缘(步骤308)。在否定时,不需要进一步的操作。在肯定时,检查FIL就绪真令牌是否存在,并且令牌的总数是否对应于边缘的数目(步骤309)。肯定结果对应于情况(4),并且致使对FIL令牌的消耗(步骤310)以及对具有适当运行编号的新真令牌的创建(步骤311)。在检查309的否定结果的情况下,检查(步骤313)是否存在最佳真令牌(其中“最佳真令牌”指示针对当前边缘的就绪真令牌,或者在其不存在时的最旧真令牌)。检查的肯定结果和否定结果分别对应于情况(4)和情况(5)。在情况(4)中,其他边缘上的假FIL令牌和最佳真令牌被消耗(步骤315),并且具有与最佳真令牌相同的运行编号的新真令牌被创建(步骤316)。在情况(5)中,执行与步骤208中相同的检查(步骤317),并且在肯定结果的情况下,执行上面提到的清理(步骤318)。在步骤318之后或者在检查317的否定结果的情况下,不需要进一步的操作。

与图20类似,图21突显了用于图16B的步骤111(双实线箭头)的算法的特定实现方式。出现在这样的步骤中的状况在框C中指示。

图23示出了步骤318的清理算法的流程图。框3181以及框3183至框3185包含分配,所述分配在该流程图中也是不言自明的。在第一操作步骤3181中,检查在传入边缘上假令牌是否存在并且就绪。在否定时,不需要进一步的操作。在肯定时,检查(步骤3186)包含就绪假令牌的所有边缘(readyFalseEdges)是否包含相同数目的已消耗的令牌[该数目被称为max(ReadyFalseConsumedLengths),其中ReadyFalseConsumedLengths具有限定在框3183和3184中的含义]以及比其他边缘更少的已消耗令牌。在否定时,不需要进一步的操作。在肯定时,就绪假令牌被消耗(步骤3187),并且操作停止。

图24示出了其中可能发生对假令牌的清理的情况的示例。如所述,当真令牌在假令牌之前到达网关处时,清理是有用的。确实,考虑到还存在“假”令牌,汇聚网关的触发条件不仅是接收一个真令牌,而且还是接收全部假令牌。通常,对假运行的执行比对真运行的执行快,使得在这样的状况下,当真令牌到达时,其消耗所有假令牌,使得没有异常出现。如果相反,由于事件递送的随机性质,真令牌首先到达,则其在网关处触发交换,并且稍后到达的假令牌仍未消耗,使得最终状态可能仍无法确定。参照附图,真令牌tk10在假序列流令牌tk11之前到达汇聚排他性网关CG(草图(a))。在真令牌存在时,交换算法应当消耗所有存在的令牌,但在这种情况下,仅tk10被交换为网关令牌tk12(草图(b)),这是因为稍后创建了假令牌tk11,并且处理例程还无法看到该假令牌tk11。从这种情况开始,特征8检测已消耗的真令牌tk10的存在,并且消耗假令牌tk11,从而避免了系统的任何非确定性行为。

上面已经讨论了本发明相对于现有技术的优点。

在不脱离本发明的范围的情况下,此处描述的优选实施方式的变型是可能的。特别地,EnterElement可以立刻调用针对“零成本”流元素的ExitElement。此外,可以通过相对于关于真令牌的相同类型的事件优先处理涉及假令牌的WorkProcessTokenChanged事件来省去对特征8的清理。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号