基于动态依赖图的服务组合实例迁移有效性判定方法

文档序号:6519696阅读:195来源:国知局
基于动态依赖图的服务组合实例迁移有效性判定方法
【专利摘要】本发明提供一种基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、待迁移实例的已执行路径为输入,以迁移有效性判定结果为输出,其实现包括:分析待迁移实例的已执行路径中活动间的依赖关系,生成已执行路径的动态依赖图,并获得到达已执行路径结束处所有可达变量定义的集合;通过向后动态切片方法,约简动态依赖图;获取演化后的服务组合的控制流图;基于演化后服务组合的控制流图和约简后的动态依赖图,判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在则迁移的有效性得到满足,反之不满足。利用本发明的方法可避免传统方法可能产生的错误否定,更好的支持服务组合的动态演化。
【专利说明】基于动态依赖图的服务组合实例迁移有效性判定方法
【技术领域】
[0001]本发明涉及服务计算【技术领域】,尤其是服务组合实例迁移有效性的判定,具体而言涉及一种基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,适于判定在演化前的服务组合过程定义下生成的、尚未执行结束的实例,能否安全有效地迁移到演化后的服务组合过程的特定状态定义下继续执行。
【背景技术】
[0002]随着分布式对象技术和XML技术的发展,Web服务技术随之出现且趋于成熟。Web服务是Web上数据和信息集成的有效机制,通过采用WSDL,UDDI和SOAP等基于XML的标准和协议,解决了代码复用、异构分布式计算等问题,具有互操作性强、松耦合、跨平台等特性。为了保证单个服务的可复用性,单个Web服务粒度不宜过大,因而当单个简单服务不能满足用户需求时,要通过将复数功能的服务按一定的服务描述和约束有效整合,实现用户定义的服务组合,以提供增值服务。Web服务组合具有层次性、可扩展性、动态与自适应性等特点,通过重用已有的服务,自动化地生成新的服务或系统,极大提高了软件的生产效率。
[0003]由于市场需求、技术更新、法规改变等等原因导致企业的外部环境开放多变,业务过程模型也要随之不断演化。基于过程模型的、正在运行的相应服务组合实例会因此受到影响,需要通过终止、重启和迁移等手段进行动态处理。相较于其他低效高耗的方法,实例的动态迁移更具有灵活性,,即将一个演化前的服务组合工作流实例从原来的工作流模型当前状态,迁移到演化后的工作流模型目标状态下,可以保证已做工作的最大化。
[0004]为保证实例迁移后能够按照演化后的服务组合过程继续执行(其后续执行与一个在演化后服务组合定义下生成的实例行为一致),我们需要在演化后的服务组合中找到一个与待迁移实例当前状态一致的对应目标状态。如果找到这么一个对应目标状态,实例迁移后就能够在此状态下按照演化后的服务组合定义继续执行。然而,如果将实例状态中考虑了数据状态(实例相关变量的当前取值),实例可迁移性是不可判定的。该问题的不可判定性使得我们无法找到一个可计算的充分必要条件来验证迁移有效性。因此,我们只能寻找一个充分条件验证迁移有效性。
[0005]现有方法大多将实例的数据信息抽象掉,从而仅仅基于实例的控制流状态进行实例迁移有效性的判定。这类方法的代表性工作有Aalst等人提出的基于演化前后过程模型行为继承关系的工作流实例可迁移性判定方法,但是该方法不能处理演化前后的工作流模型不满足继承关系的情形,因此不具有一般性。Aal St还提出了 一种不限定工作流演化类型的工作流迁移方法,该方法通过比较变化前后的工作流模型,找出工作流模型中所有发生了变化的区域,如果工作流实例不在变化区域,则实例允许迁移到演化后的工作流模型的对应状态下。由于这类方法没有考虑实例的数据状态,因此并不适合数据感知的服务组合动态演化场景。
[0006]虽有一些方法在实例状态中考虑了数据状态,然而现有的方法大多太过保守,只有很少实例迁移被视为有效。例如=Casati等人利用“轨迹重现”技术来判断服务组合实例的迁移有效性,即如果一个实例的已执行活动序列可以在演化的过程模型下重现,则该实例迁移是有效的。Rinderle和Reichert等人将“轨迹重现”的概念引入到了名为ADEPT的方法中,该方法对已执行活动序列做了一些处理,删除了演化后过程中缺失的活动并只保留了循环结构中最后一次循环所执行到的活动,从而得到一个约简后的轨迹(即活动序列),如果这个约简后的活动序列可以在演化后的服务组合过程下重现,则相应实例的迁移是有效的。虽然该方法对最初的“轨迹重现”技术做了一些放松,但没有考虑活动间的数据不相关性,因此该方法依然较为保守。

【发明内容】

[0007]针对现有技术存在的缺陷或不足,本发明旨在提供一种基于动态依赖图的服务组合实例迁移有效性判定方法,适于判定在演化前的服务组合过程定义下生成的、尚未执行结束的实例,能否安全有效地迁移到演化后的服务组合过程的特定状态定义下继续执行,能避免传统方法可能产生的一些错误否定(false negative),从而可以让更多的实例进行迁移,更好的支持了服务组合的动态演化。
[0008]为达成上述目的,本发明所采用的技术方案如下:
[0009]一种基于动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、以及待迁移实例的已执行路径为输入,以待迁移实例的迁移有效性判定结果为输出,包括以下步骤:
[0010]步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义(reaching definitions of variables)的集合;
[0011]步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边;
[0012]步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及
[0013]步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序(即活动序列)可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
[0014]进一步,所述步骤I的具体实现中,待迁移实例的已执行路径表示为0=1>1,02,…丨,0 I,0 2?…表示活动,活动0 i M所有输入变量为inPut (0 所有输出变量为outPut ( 0 ^ ;活动间的依赖关系表示为R=( 0 i, 0」),o i和o」表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;待迁移实例的动态依赖图表示为DDG= (N-,Eddg),Ndw代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,Edm代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成;本步骤I的实现包括以下步骤:
[0015]1.1初始化集合ReachingDefs (P1, o )和集合Uses为沒,集合Uses代表所使用的变量集合,集合ReachingDefs (P1, o)为动态可达定义集合,即执行路径o结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集NDDe中,分析可得所有活动结点间的控制依赖关系集Sm和异步调用依赖关系集Sad ;
[0016]1.2遍历活动结点集NDDe,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集Sm和异步调用依赖关系集Sad,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合Edm中;
[0017]1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输入变量var G inPut (Oj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs (P1, o ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中;
[0018]1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输出变量var G outPut (Oj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def ( O [j])中;
[0019]1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输出变量var G outPut (Oj),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs (P1, o ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def ( O [j])中,活动i的定义变量添加到集合Kill(o [j]),该集合Kill(o [j])为待迁移实例沿执行路径0执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合;
[0020]1.6将所述集合Def ( o [j])中的所有元素添加到所述集合ReachingDefs (P1, o )中,将所述Kill(o [j])中的所有元素从所述集合ReachingDefs (P1, o)中删除;
[0021]1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径O中的所有活动;以及
[0022]1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集Ndw和依赖边集EDDe。
[0023]进一步,所述步骤2中,约简后的动态依赖图表示为PDDG= (Npddg, Epddg),Npddg代表动态依赖图的活动结点集,Epdm代表结点间的依赖边集;本步骤2的实现包括以下步骤:
[0024]2.1将所述演化前服务组合P1当前状态下的所有变量在演化后的服务组合上投影,获得所有变量的投影ReachingDefs (P1, o ) n V(P2),P2为演化后的服务组合,V(P2)表示P2中的所有活动;
[0025]2.2遍历投影ReachingDefs (P1, o ) n V(P2)中的所有变量,即在所述动态依赖图DDG中找出已定义变量的活动结点;
[0026]2.3基于步骤2.2获得的活动结点,采取向后动态切片方法获得直接和间接影响变量取值的活动切片S ;以及
[0027]2.4删除动态依赖图DDG中不属于任意活动切片S的活动以及与该活动相应的依赖边,从而得到约简后的动态依赖图roDG。
[0028]进一步,所述步骤2.4的实现包括以下步骤:[0029]2.4.1初始化活动结点集Npdm和依赖边集Epdm为空,遍历投影ReachingDefs (P1, o) n V(P2)中所有变量,如果存在变量被活动Qi定义,且活动。i不在约简后动态依赖图的活动结点集Npdm中,则将该活动O i添加到活动结点集Npdw中和一堆栈 traversalQueue 中;
[0030]2.4.2如果堆栈traversalQueue不为空,则将traversalQueue中第一个活动出栈,如果以该活动为终点的依赖边属于依赖边集Edm但不属于依赖边集EPDD(;,将此依赖边添加到依赖边集EPDDe中;如果此依赖边的起点不在活动结点集NPDDe中,将此结点添加到活动结点集NPDDe中,并添加到到堆栈traversalQueue中;
[0031]2.4.3 重复上述步骤 2.4.1-2.4.2,直至遍历完投影 ReachingDefs (P1, o ) n V(P2)中所有变量;以及
[0032]2.4.4基于步骤2.4.1到2.4.4得到的活动结点集Npdw和依赖边集EPDD(;,构建约简后的动态依赖图13DDG。
[0033]进一步,所述步骤4中,迁移有效性的具体判定包括以下步骤:
[0034]4.1遍历约简后动态依赖图TODG的活动结点集Npddc中的所有活动,如果在约简后的动态依赖图13DDG的依赖边集Epdw中,每存在一条以结点n为终点的依赖边,则结点n的入度indegree[n]加I,其中该indegree[n]表示结点n的入度,初始值为0 ;
[0035]4.2如果结点n入度为0,则添加到集合ZeroIndegreeNodeSet中,该集合ZeroIndegreeNodeSet表示入度为0的结点集合,初始值为鈇
[0036]4.3重复上述4.1和4.2,直到遍历完动态依赖图TODG的活动结点集Npddc中所有活动;
[0037]4.4如果集合ZeroIndegreeNodeSet不为0,检测是否存在一个入度indegree [nj为o的活动Iii满足(p2,sc) [IiiMP2, sc’),即可以在演化后的服务组合P2的当前状态(p2,sc)下发生,如果不存在,则服务组合实例的迁移有效性不满足,其中(p2,s。)[IiiMP2, S。’)表示Iii可以在过程P2的Sc状态下执行且随着IIi的执行P2会由状态Sc进入一个新的状态Sc’ ;
[0038]4.5如果存在活动Iii,则将结点Iii从集合ZeroIndegreeNodeSet中删除并添加到拓扑排序P中,同时更新P2的当前状态;
[0039]4.6遍历动态依赖图13DDG的依赖边集Epddc,将所有与结点Iii邻接的结点入度减I ;
[0040]4.7重复上述4.4到4.6,直到集合ZeroIndegreeNodeSet为巧此时如果存在一个活动序列的拓扑排序P可以在演化后的服务组合过程P2中重放,则服务组合实例的迁移有效性满足。
[0041]由以上本发明的技术方案可知,本发明提出的方法不要求待迁移实例的已执行活动序列按照既定顺序在演化后的服务组合定义下重现,因而相较于传统的轨迹重现方法,本发明所提方法更具柔性,能避免传统轨迹重现方法可能产生的一些错误否定(falsenegative),从而可以让更多的实例进行迁移,更好的支持了服务组合的动态演化。
[0042]通过以下结合附图以举例方式对本发明的实施方式进行详细描述,本发明的其他特征、特点和优点将会更加明显。
【专利附图】

【附图说明】
[0043]图1为服务组合实例迁移的原理说明图。[0044]图2为基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法示例性的总体实现流程图。
[0045]图3为图2示例性流程图中的迁移有效性判定的流程图。
[0046]图4为演化前服务组合执行路径的动态依赖图DDG的一个示例。
[0047]图5为对图4的动态依赖图进行约简后得到的动态依赖图13DDG的一个示例。
[0048]图6a_6b为演化后服务组合的控制流图的一个示例。
[0049]图7a_7b为演化前服务组合的控制流图的一个示例。
【具体实施方式】
[0050]如图1、图2所示,根据本发明的较优实施例,基于动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、以及待迁移实例的已执行路径(即已执行活动序列)为输入,以待迁移实例的迁移有效性判定结果为输出,如图2所示,其具体的实现包括以下步骤:
[0051]步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义(reaching definitions of variables)的集合;
[0052]步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边;
[0053]步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及
[0054]步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序(即活动序列)可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
[0055]下面参考图2并结合图3-6所示,详细说明本实施例的实现过程。
[0056]为方便说明起见,本实施例中作为输入的服务组合以BPEL (Business ProcessExecution Language)过程为例,当然并不以此为限制,OWL-S (Ontology Web Languagefor Services)过程等其他数据感知的服务组合也适用于本实施例。
[0057]对于符合WS-BPEL2.0规范的BPEL过程,本实施例能够准确有效地判定给定的演化后服务组合实例是否可以替换演化前过程定义下生成的、尚未执行结束的实例,从而迁移到目标状态,以继续提供当前服务。
[0058]如图2所示,本实施例提供的基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,其具体的实现包括以下步骤:
[0059]步骤1、分析待迁移实例的已执行路径O中活动间的依赖关系R,自动生成已执行路径的动态依赖图DDG,即待迁移实例的动态依赖图,并获得到达已执行路径O结束处的所有可达变量定义(reaching definitions of variables)的集合 ReachingDefs (P1, o)。[0060]其中:执行路径O = { O O 2) , O1, O 2,…表示活动;活动O iW所有输入变量为inPut ( O J,所有输出变量为outPut ( O J ;依赖关系R=Oi, o」),o i和o」表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;动态依赖图DDG= (N-,Eddg),Ndds代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,Eddc代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成。作为较佳的实施方式,其具体实现包括以下步骤:
[0061]1.1初始化集合ReachingDefs (P1, o )和集合Uses为A集合Uses代表所使用的变量集合,集合ReachingDefs (P1, o)为动态可达定义集合,即执行路径o结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集NDDe中,分析可得所有活动结点间的控制依赖关系集Sm和异步调用依赖关系集Sad ;
[0062]1.2遍历活动结点集NDDe,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集Sm和异步调用依赖关系集Sad,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合Edm中;
[0063]1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输入变量var G inPut (Oj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs (P1, o ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中;
[0064]1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输出变量var G outPut (Oj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def ( O [j])中;
[0065]1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输出变量var G outPut (Oj),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs (P1, o ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def ( O [j])中,活动i的定义变量添加到集合Kill(o [j]),该集合Kill(o [j])为待迁移实例沿执行路径0执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合;
[0066]1.6将所述集合Def ( o [j])中的所有元素添加到所述集合ReachingDefs (P1, o )中,将所述Kill(o [j])中的所有元素从所述集合ReachingDefs (P1, o)中删除(可见,集合ReachingDefs (P1, o )是动态变化的);
[0067]1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径O中的所有活动;
[0068]1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集Ndw和依赖边集EDDe。
[0069]本实施例中,上述具体实现步骤可采用如下的算法I来实现,当然,本领域的普通技术人员可以采用其他的方式来实现,以下仅为一个示范性实施例。
[0070]算法I——构建动态依赖图:
[0071]1.begin
[0072]2.Defs —①[0073]3.Uses —①
[0074]4.for j — Ito | o |
[0075]5.N —N U {o [j]}
[0076]6.for every o [i] e N
[0077]7.1f<o [i],o [j]> e SCD or SAD
[0078]8.E —E U {<o [i], o [j]〉}
[0079]9.endif
[0080]10.endfor
[0081]
【权利要求】
1.一种基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,以演化前后的服务组合、以及待迁移实例的已执行路径为输入,以待迁移实例的迁移有效性判定结果为输出,其实现包括以下步骤: 步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义的集合; 步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边; 步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及 步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
2.根据权利要求1所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤I的具体实现中,待迁移实例的已执行路径表示为02^-},0l,O2,…表示活动,活动0 iW所有输入变量为inPut(0 i),所有输出变量为outPut(o i);活动间的依赖关系表示为R=( 0 ” 0 p,0 ,和0」表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;待迁移实例的动态依赖图表示为DDG=(NDDe,EDD(;),NDDe代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,Edm代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成;本步骤I的实现包括以下步骤: .1.1初始化集合ReachingDefs (P1, o )和集合Uses为0,集合Uses代表所使用的变量集合,集合ReachingDefs (P1, o )为动态可达定义集合,即执行路径o结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集Ndw中,分析可得所有活动结点间的控制依赖关系集Scd和异步调用依赖关系集Sad ; .1.2遍历活动结点集Ndm,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集Sa^P异步调用依赖关系集Sad,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合Edm中; .1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径0中活动j的所有输入变量var G inPut (Oj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs (P1, o ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中; .1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径0中活动j的所有输出变量var G outPut (Oj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def ( O [j])中;,1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径O中活动j的所有输出变量var G outPut ( O」),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs (P1, o ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def (0 [j])中,活动i的定义变量添加到集合Kill(o [j]),该集合Kill(o [j])为待迁移实例沿执行路径0执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合; ,1.6将所述集合Def (0 [j])中的所有元素添加到所述集合ReachingDefs (P1, o)中,将所述Kill(o [j])中的所有元素从所述集合ReachingDefs (P1, o)中删除; ,1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径0中的所有活动;以及 , 1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集Ndw和依赖边集EDDe。
3.根据权利要求2所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤2中,约简后的动态依赖图表示为PDDG= (Npddg, Epddg),Npddg代表动态依赖图的活动结点集,Epdm代表结点间的依赖边集;本步骤2的实现包括以下步骤: ,2.1将所述演化前服务组合P1当前状态下的所有变量在演化后的服务组合上投影,获得所有变量的投影ReachingDefs (P1, o ) n V(P2),P2为演化后的服务组合,V(P2)表示P2中的所有活动; ,2.2遍历投影ReachingDefs (P1, o) n V(P2)中的所有变量,即在所述动态依赖图DDG中找出已定义变量的活动结点; ,2.3基于步骤2.2获得的活动结点,采取向后动态切片方法获得直接和间接影响变量取值的活动切片S ;以及 ,2.4删除动态依赖图DDG中不属于任意活动切片S的活动以及与该活动相应的依赖边,从而得到约简后的动态依赖图H)DG。
4.根据权利要求3所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤2.4的实现包括以下步骤: ,2.4.1初始化活动结点集Npdm和依赖边集Epdm为空,遍历投影ReachingDefs (P1, o) n V(P2)中所有变量,如果存在变量被活动Qi定义,且活动。i不在约简后动态依赖图的活动结点集Npdm中,则将该活动0 i添加到活动结点集Npdw中和一堆栈 traversalQueue 中; ,2.4.2如果堆栈traversalQueue不为空,则将traversalQueue中第一个活动出栈,如果以该活动为终点的依赖边属于依赖边集Edw但不属于依赖边集Epdw,将此依赖边添加到依赖边集EPDDe中;如果此依赖边的起点不在活动结点集NPDDe中,将此结点添加到活动结点集Npddc中,并添加到到堆栈traversalQueue中; ,2.4.3重复上述步骤2.4.1-2.4.2,直至遍历完投影ReachingDefs (P1, o ) n V(P2)中所有变量;以及 ,2.4.4基于步骤2.4.1到2.4.4得到的活动结点集Npdw和依赖边集EPDD(;,构建约简后的动态依赖图13DDG。
5.根据权利要求3或4所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤4中,迁移有效性的具体判定包括以下步骤: .4.1遍历约简后动态依赖图13DDG的活动结点集Npddc中的所有活动,如果在约简后的动态依赖图TODG的依赖边集Epdw中,每存在一条以结点n为终点的依赖边,则结点n的入度indegree[n]加I,其中该indegree[n]表示结点n的入度,初始值为O ; . 4.2如果结点n入度为0,则添加到集合ZeroIndegreeNodeSet中,该集合ZeroIndegreeNodeSet表示入度为0的结点集合,初始值为鈇.4.3重复上述4.1和4.2,直到遍历完动态依赖图TODG的活动结点集Npddc中所有活动;.4.4如果集合ZeroIndegreeNodeSet不为0,检测是否存在一个入度indegree [nj为0的活动Iii满足(P2,Sc) [ni> (P2, Sc’ ),即可以在演化后的服务组合P2的当前状态(P2,Sc)下发生,如果不存在,则服务组合实例的迁移有效性不满足,其中(P2,SC) LniXP2, Sc^ )表示Iii可以在过程P2的Sc状态下执行且随着Iii的执行P2会由状态Sc进入一个新的状态Sc’ ; .4.5如果存在活动Iii,则将结点Iii从集合ZeroIndegreeNodeSet中删除并添加到拓扑排序P中,同时更新P2的当前状态; . 4.6遍历动态依赖图13DDG的依赖边集Epdw,将所有与结点Iii邻接的结点入度减I ; .4.7重复上述4.4到4.6,直到集合ZeroIndegreeNodeSet为巧此时如果存在一个活动序列的拓扑排序P可以在 演化后的服务组合过程P2中重放,则服务组合实例的迁移有效性满足。
【文档编号】G06Q10/06GK103606042SQ201310581404
【公开日】2014年2月26日 申请日期:2013年11月18日 优先权日:2013年11月18日
【发明者】宋巍, 陈先博, 张功萱 申请人:南京理工大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1