CN103606042A - 基于动态依赖图的服务组合实例迁移有效性判定方法 - Google Patents
基于动态依赖图的服务组合实例迁移有效性判定方法 Download PDFInfo
- Publication number
- CN103606042A CN103606042A CN201310581404.XA CN201310581404A CN103606042A CN 103606042 A CN103606042 A CN 103606042A CN 201310581404 A CN201310581404 A CN 201310581404A CN 103606042 A CN103606042 A CN 103606042A
- Authority
- CN
- China
- Prior art keywords
- movable
- dependence
- pddg
- dynamic dependency
- collection
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、待迁移实例的已执行路径为输入,以迁移有效性判定结果为输出,其实现包括:分析待迁移实例的已执行路径中活动间的依赖关系,生成已执行路径的动态依赖图,并获得到达已执行路径结束处所有可达变量定义的集合;通过向后动态切片方法,约简动态依赖图;获取演化后的服务组合的控制流图;基于演化后服务组合的控制流图和约简后的动态依赖图,判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在则迁移的有效性得到满足,反之不满足。利用本发明的方法可避免传统方法可能产生的错误否定,更好的支持服务组合的动态演化。
Description
技术领域
本发明涉及服务计算技术领域,尤其是服务组合实例迁移有效性的判定,具体而言涉及一种基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,适于判定在演化前的服务组合过程定义下生成的、尚未执行结束的实例,能否安全有效地迁移到演化后的服务组合过程的特定状态定义下继续执行。
背景技术
随着分布式对象技术和XML技术的发展,Web服务技术随之出现且趋于成熟。Web服务是Web上数据和信息集成的有效机制,通过采用WSDL,UDDI和SOAP等基于XML的标准和协议,解决了代码复用、异构分布式计算等问题,具有互操作性强、松耦合、跨平台等特性。为了保证单个服务的可复用性,单个Web服务粒度不宜过大,因而当单个简单服务不能满足用户需求时,要通过将复数功能的服务按一定的服务描述和约束有效整合,实现用户定义的服务组合,以提供增值服务。Web服务组合具有层次性、可扩展性、动态与自适应性等特点,通过重用已有的服务,自动化地生成新的服务或***,极大提高了软件的生产效率。
由于市场需求、技术更新、法规改变等等原因导致企业的外部环境开放多变,业务过程模型也要随之不断演化。基于过程模型的、正在运行的相应服务组合实例会因此受到影响,需要通过终止、重启和迁移等手段进行动态处理。相较于其他低效高耗的方法,实例的动态迁移更具有灵活性,,即将一个演化前的服务组合工作流实例从原来的工作流模型当前状态,迁移到演化后的工作流模型目标状态下,可以保证已做工作的最大化。
为保证实例迁移后能够按照演化后的服务组合过程继续执行(其后续执行与一个在演化后服务组合定义下生成的实例行为一致),我们需要在演化后的服务组合中找到一个与待迁移实例当前状态一致的对应目标状态。如果找到这么一个对应目标状态,实例迁移后就能够在此状态下按照演化后的服务组合定义继续执行。然而,如果将实例状态中考虑了数据状态(实例相关变量的当前取值),实例可迁移性是不可判定的。该问题的不可判定性使得我们无法找到一个可计算的充分必要条件来验证迁移有效性。因此,我们只能寻找一个充分条件验证迁移有效性。
现有方法大多将实例的数据信息抽象掉,从而仅仅基于实例的控制流状态进行实例迁移有效性的判定。这类方法的代表性工作有Aalst等人提出的基于演化前后过程模型行为继承关系的工作流实例可迁移性判定方法,但是该方法不能处理演化前后的工作流模型不满足继承关系的情形,因此不具有一般性。Aalst还提出了一种不限定工作流演化类型的工作流迁移方法,该方法通过比较变化前后的工作流模型,找出工作流模型中所有发生了变化的区域,如果工作流实例不在变化区域,则实例允许迁移到演化后的工作流模型的对应状态下。由于这类方法没有考虑实例的数据状态,因此并不适合数据感知的服务组合动态演化场景。
虽有一些方法在实例状态中考虑了数据状态,然而现有的方法大多太过保守,只有很少实例迁移被视为有效。例如:Casati等人利用“轨迹重现”技术来判断服务组合实例的迁移有效性,即如果一个实例的已执行活动序列可以在演化的过程模型下重现,则该实例迁移是有效的。Rinderle和Reichert等人将“轨迹重现”的概念引入到了名为ADEPT的方法中,该方法对已执行活动序列做了一些处理,删除了演化后过程中缺失的活动并只保留了循环结构中最后一次循环所执行到的活动,从而得到一个约简后的轨迹(即活动序列),如果这个约简后的活动序列可以在演化后的服务组合过程下重现,则相应实例的迁移是有效的。虽然该方法对最初的“轨迹重现”技术做了一些放松,但没有考虑活动间的数据不相关性,因此该方法依然较为保守。
发明内容
针对现有技术存在的缺陷或不足,本发明旨在提供一种基于动态依赖图的服务组合实例迁移有效性判定方法,适于判定在演化前的服务组合过程定义下生成的、尚未执行结束的实例,能否安全有效地迁移到演化后的服务组合过程的特定状态定义下继续执行,能避免传统方法可能产生的一些错误否定(false negative),从而可以让更多的实例进行迁移,更好的支持了服务组合的动态演化。
为达成上述目的,本发明所采用的技术方案如下:
一种基于动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、以及待迁移实例的已执行路径为输入,以待迁移实例的迁移有效性判定结果为输出,包括以下步骤:
步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义(reaching definitions of variables)的集合;
步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边;
步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及
步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序(即活动序列)可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
进一步,所述步骤1的具体实现中,待迁移实例的已执行路径表示为σ={σ1,σ2,…},σ1,σ2,…表示活动,活动σi的所有输入变量为inPut(σi),所有输出变量为outPut(σi);活动间的依赖关系表示为R=(σi,σj),σi和σj表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;待迁移实例的动态依赖图表示为DDG=(NDDG,EDDG),NDDG代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,EDDG代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成;本步骤1的实现包括以下步骤:
1.1初始化集合ReachingDefs(P1,σ)和集合Uses为集合Uses代表所使用的变量集合,集合ReachingDefs(P1,σ)为动态可达定义集合,即执行路径σ结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集NDDG中,分析可得所有活动结点间的控制依赖关系集SCD和异步调用依赖关系集SAD;
1.2遍历活动结点集NDDG,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集SCD和异步调用依赖关系集SAD,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合EDDG中;
1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输入变量var∈inPut(σj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs(P1,σ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中;
1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def(σ[j])中;
1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs(P1,σ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def(σ[j])中,活动i的定义变量添加到集合Kill(σ[j]),该集合Kill(σ[j])为待迁移实例沿执行路径σ执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合;
1.6将所述集合Def(σ[j])中的所有元素添加到所述集合ReachingDefs(P1,σ)中,将所述Kill(σ[j])中的所有元素从所述集合ReachingDefs(P1,σ)中删除;
1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径σ中的所有活动;以及
1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集NDDG和依赖边集EDDG。
进一步,所述步骤2中,约简后的动态依赖图表示为PDDG=(NPDDG,EPDDG),NPDDG代表动态依赖图的活动结点集,EPDDG代表结点间的依赖边集;本步骤2的实现包括以下步骤:
2.1将所述演化前服务组合P1当前状态下的所有变量在演化后的服务组合上投影,获得所有变量的投影ReachingDefs(P1,σ)∩V(P2),P2为演化后的服务组合,V(P2)表示P2中的所有活动;
2.2遍历投影ReachingDefs(P1,σ)∩V(P2)中的所有变量,即在所述动态依赖图DDG中找出已定义变量的活动结点;
2.3基于步骤2.2获得的活动结点,采取向后动态切片方法获得直接和间接影响变量取值的活动切片S;以及
2.4删除动态依赖图DDG中不属于任意活动切片S的活动以及与该活动相应的依赖边,从而得到约简后的动态依赖图PDDG。
进一步,所述步骤2.4的实现包括以下步骤:
2.4.1初始化活动结点集NPDDG和依赖边集EPDDG为空,遍历投影ReachingDefs(P1,σ)∩V(P2)中所有变量,如果存在变量被活动σi定义,且活动σi不在约简后动态依赖图的活动结点集NPDDG中,则将该活动σi添加到活动结点集NPDDG中和一堆栈traversalQueue中;
2.4.2如果堆栈traversalQueue不为空,则将traversalQueue中第一个活动出栈,如果以该活动为终点的依赖边属于依赖边集EDDG但不属于依赖边集EPDDG,将此依赖边添加到依赖边集EPDDG中;如果此依赖边的起点不在活动结点集NPDDG中,将此结点添加到活动结点集NPDDG中,并添加到到堆栈traversalQueue中;
2.4.3重复上述步骤2.4.1-2.4.2,直至遍历完投影ReachingDefs(P1,σ)∩V(P2)中所有变量;以及
2.4.4基于步骤2.4.1到2.4.4得到的活动结点集NPDDG和依赖边集EPDDG,构建约简后的动态依赖图PDDG。
进一步,所述步骤4中,迁移有效性的具体判定包括以下步骤:
4.1遍历约简后动态依赖图PDDG的活动结点集NPDDG中的所有活动,如果在约简后的动态依赖图PDDG的依赖边集EPDDG中,每存在一条以结点n为终点的依赖边,则结点n的入度indegree[n]加1,其中该indegree[n]表示结点n的入度,初始值为0;
4.3重复上述4.1和4.2,直到遍历完动态依赖图PDDG的活动结点集NPDDG中所有活动;
4.4如果集合zeroIndegreeNodeSet不为检测是否存在一个入度indegree[ni]为0的活动ni满足(P2,SC)[ni>(P2,SC’),即可以在演化后的服务组合P2的当前状态(P2,SC)下发生,如果不存在,则服务组合实例的迁移有效性不满足,其中(P2,SC)[ni>(P2,SC’)表示ni可以在过程P2的SC状态下执行且随着ni的执行P2会由状态SC进入一个新的状态SC’;
4.5如果存在活动ni,则将结点ni从集合zeroIndegreeNodeSet中删除并添加到拓扑排序ρ中,同时更新P2的当前状态;
4.6遍历动态依赖图PDDG的依赖边集EPDDG,将所有与结点ni邻接的结点入度减1;
由以上本发明的技术方案可知,本发明提出的方法不要求待迁移实例的已执行活动序列按照既定顺序在演化后的服务组合定义下重现,因而相较于传统的轨迹重现方法,本发明所提方法更具柔性,能避免传统轨迹重现方法可能产生的一些错误否定(false negative),从而可以让更多的实例进行迁移,更好的支持了服务组合的动态演化。
通过以下结合附图以举例方式对本发明的实施方式进行详细描述,本发明的其他特征、特点和优点将会更加明显。
附图说明
图1为服务组合实例迁移的原理说明图。
图2为基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法示例性的总体实现流程图。
图3为图2示例性流程图中的迁移有效性判定的流程图。
图4为演化前服务组合执行路径的动态依赖图DDG的一个示例。
图5为对图4的动态依赖图进行约简后得到的动态依赖图PDDG的一个示例。
图6a-6b为演化后服务组合的控制流图的一个示例。
图7a-7b为演化前服务组合的控制流图的一个示例。
具体实施方式
如图1、图2所示,根据本发明的较优实施例,基于动态依赖图的服务组合实例迁移有效性判定方法,以演化前后的服务组合、以及待迁移实例的已执行路径(即已执行活动序列)为输入,以待迁移实例的迁移有效性判定结果为输出,如图2所示,其具体的实现包括以下步骤:
步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义(reaching definitions of variables)的集合;
步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边;
步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及
步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序(即活动序列)可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
下面参考图2并结合图3-6所示,详细说明本实施例的实现过程。
为方便说明起见,本实施例中作为输入的服务组合以BPEL(Business Process ExecutionLanguage)过程为例,当然并不以此为限制,OWL-S(Ontology Web Language for Services)过程等其他数据感知的服务组合也适用于本实施例。
对于符合WS-BPEL2.0规范的BPEL过程,本实施例能够准确有效地判定给定的演化后服务组合实例是否可以替换演化前过程定义下生成的、尚未执行结束的实例,从而迁移到目标状态,以继续提供当前服务。
如图2所示,本实施例提供的基于已执行路径动态依赖图的服务组合实例迁移有效性判定方法,其具体的实现包括以下步骤:
步骤1、分析待迁移实例的已执行路径σ中活动间的依赖关系R,自动生成已执行路径的动态依赖图DDG,即待迁移实例的动态依赖图,并获得到达已执行路径σ结束处的所有可达变量定义(reaching definitions of variables)的集合ReachingDefs(P1,σ)。
其中:执行路径σ={σ1,σ2,…},σ1,σ2,…表示活动;活动σi的所有输入变量为inPut(σi),所有输出变量为outPut(σi);依赖关系R=(σi,σj),σi和σj表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;动态依赖图DDG=(NDDG,EDDG),NDDG代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,EDDG代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成。作为较佳的实施方式,其具体实现包括以下步骤:
1.1初始化集合ReachingDefs(P1,σ)和集合Uses为集合Uses代表所使用的变量集合,集合ReachingDefs(P1,σ)为动态可达定义集合,即执行路径σ结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集NDDG中,分析可得所有活动结点间的控制依赖关系集SCD和异步调用依赖关系集SAD;
1.2遍历活动结点集NDDG,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集SCD和异步调用依赖关系集SAD,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合EDDG中;
1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输入变量var∈inPut(σj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs(P1,σ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中;
1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def(σ[j])中;
1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs(P1,σ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def(σ[j])中,活动i的定义变量添加到集合Kill(σ[j]),该集合Kill(σ[j])为待迁移实例沿执行路径σ执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合;
1.6将所述集合Def(σ[j])中的所有元素添加到所述集合ReachingDefs(P1,σ)中,将所述Kill(σ[j])中的所有元素从所述集合ReachingDefs(P1,σ)中删除(可见,集合ReachingDefs(P1,σ)是动态变化的);
1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径σ中的所有活动;
1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集NDDG和依赖边集EDDG。
本实施例中,上述具体实现步骤可采用如下的算法1来实现,当然,本领域的普通技术人员可以采用其他的方式来实现,以下仅为一个示范性实施例。
算法1——构建动态依赖图:
1.begin
2.Defs←Ф
3.Uses←Ф
4.for j←1to|σ|
5.N←N∪{σ[j]}
6.for everyσ[i]∈N
7.if<σ[i],σ[j]>∈SCD or SAD
8.E←E∪{<σ[i],σ[j]>}
9.endif
10.endfor
11.for every var∈inPut(σ[j])
12.E←E∪{<σ[k],σ[j]>|varσ[k]∈Defs}
13.Uses←Uses∪{varσ[j]}
14.endfor
15.Def(σ[j])←Ф
16.Kill(σ[j])←Ф
17.for every var∈outPut(σ[j])
18.E←E∪{<σ[k],σ[j]>|varσ[k]∈Uses}
19.E←E∪{<σ[i],σ[j]>|varσ[i]∈Defs}
20.Def(σ[j])←Def(σ[j])∪{varσ[j]}
21.Kill(σ[j])←Kill(σ[j])∪{varσ[i]|varσ[i]∈Defs}
22.endfor
23.Defs←(Defs–Kill(σ[j]))∪Def(σ[j])
24.endfor
25.end
参考图2所示,接下来进入步骤2进行操作,约简动态依赖图DDG。
步骤2、通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边,其中,约简后的动态依赖图表示为PDDG=(NPDDG,EPDDG),NPDDG代表动态依赖图的活动结点集,EPDDG代表结点间的依赖边集。作为较佳的实施方式,其具体实现包括以下步骤:
2.1将服务组合P1当前状态下的所有变量在演化后的服务组合即BPEL过程模型上投影,获得所有变量的投影ReachingDefs(P1,σ)∩V(P2),P2为演化后的服务组合,V(P2)表示P2中的所有活动;
2.2遍历投影ReachingDefs(P1,σ)∩V(P2)中的所有变量,即在动态依赖图DDG中找出已定义变量的活动结点;
2.3基于步骤2.2获得的活动结点,采取向后动态切片方法获得直接和间接影响变量取值的活动切片S;
2.4删除动态依赖图DDG中不属于任意活动切片S的活动(因为它们对迁移实例当前状态到V(P2)的投影没有影响)以及与该活动相应的依赖边,从而得到约简后的动态依赖图PDDG。
其中,步骤2.4的实现包括如下步骤:
2.4.1初始化活动结点集NPDDG和依赖边集EPDDG为空,遍历投影ReachingDefs(P1,σ)∩V(P2)中所有变量,如果存在变量被活动σi定义,且活动σi不在约简后动态依赖图的活动结点集NPDDG中,则将该活动σi添加到活动结点集NPDDG中和一堆栈traversalQueue中;
2.4.2如果堆栈traversalQueue不为空,则将traversalQueue中第一个活动出栈,如果以该活动为终点的依赖边属于依赖边集EDDG但不属于依赖边集EPDDG,将此依赖边添加到依赖边集EPDDG中;如果此依赖边的起点不在活动结点集NPDDG中,将此结点添加到活动结点集NPDDG中,并添加到到堆栈traversalQueue中;
2.4.3重复上述步骤2.4.1-2.4.2,直至遍历完投影ReachingDefs(P1,σ)∩V(P2)中所有变量;
2.4.4基于步骤2.4.1到2.4.4得到的活动结点集NPDDG和依赖边集EPDDG,构建约简后的动态依赖图PDDG。
本实施例中,上述具体实现步骤可采用如下的算法2来实现,当然,本领域的普通技术人员可以采用其他的方式来实现,以下仅为一个示范性实施例。
算法2——分离出约简后的动态依赖图:
1.begin
2.N'←Ф
3.E'←Ф
4.Defs←Defs∩V(P2)
5.for each varσ[i]∈Defs
6.N'←N'∪{σ[i]}
7.traversalQueue←{σ[i]}
8.while traversalQueue≠Ф
9.σ[k]←traversalQueue.dequeue()
10.for each<σ[j],σ[k]>∈E
11.if<σ[j],σ[k]>E'and<σ[j],σ[k]>
is not an anti-or output dependence edge
12.E'←E'∪{<σ[j],σ[k]>}
13.endif
15.N'←N'∪{σ[j]}
16.traversalQueue.enqueue(σ[j])
17.endif
18.endfor
19.endwhile
20.endfor
21.PDDG(N',E')←DDG(N,E)↑N'
22.end
如图2所示,接下来,进入:
步骤3:对演化后的服务组合使用控制流分析方法得到控制流图。
本实施例中,使用常规的控制流分析方法来得到演化后的服务组合的控制流图。例如,袁媛、金茂忠等人提出的“一种程序控制流图布图算法及其实现”;Constructing Control FlowGraph for Java by Decoupling Exception Flow from Normal Flow,Jang-Wu Jo,Byeong-MoChang in Computational Science and Its Applications–ICCSA2004(2004),Volume3043,2004,pp106-113;Generation of Control and Data Flow Graphs from Scheduled and Pipelined AssemblyCode,David C.Zaretsky,Gaurav Mittal…in Languages and Compilers for Parallel Computing,Volume4339,2006,pp76-90(2006),当然并不以此为限制。
作为较佳的实施方式,本实施例中,控制流图的获取包括以下步骤:
3.1按照深度优先的方式遍历给定的BPEL过程,获取所有的活动结点,并且给BPEL过程的根活动设定为域<scope>活动;
3.2根据所获取活动的类型,选择与此活动类型相对应的解析函数分析BPEL过程中的每个活动结点的属性,将所有活动所共有的活动属性提取出来存入内存中,然后根据活动类型,另行存储每种类型的活动所特有的属性。
解析函数根据活动类型可以化分为以下4类:
a)基本活动的解析函数从BPEL过程中读取的基本活动的属性,活动的属性主要包含名称、类型、前驱后继关系、输入输出变量、伙伴链接和端口类型,在块结构中,只有在顺序<sequence>活动下的活动之间才存在前驱后继关系,而块结构是由结构化活动与其子活动组成,具有纵向的层次感;
b)对于结构化活动<if>、<switch>、<pick>、<while>和<repeatUtil>,它们的输入变量只能从条件语句<condition>中获取出来,但这些条件语句必须满足bpel:getVariableProperty('','')或者bpws:getVariableData('','')这两种形式才能够被解析,而输出变量在结构化活动都为空null;
c)选择和循环结构活动的解析函数从BPEL过程中读取此类型活动的属性,其中输入变量从条件<condition>中解析出来,并且,读取对应条件<conditon>下的分支活动;
d)并发结构和顺序结构活动的解析函数从BPEL过程中读取此类型活动的属性,并且读取其每条分支下的活动。
如图2所示,接下来进入步骤4进行操作,对相应服务组合实例的迁移有效性进行判定。
步骤4、基于约简后的动态依赖图PDDG和演化后的服务组合的控制流图,判断该动态依赖图PDDG下是否存在一个拓扑排序ρ(即活动序列)可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序ρ是演化后的服务组合P2的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
参考图3-图4所示,作为一种较佳的实施方式,迁移有效性判定的具体实现包括以下步骤:
4.1遍历约简后动态依赖图PDDG的活动结点集NPDDG中的所有活动,如果在约简后的动态依赖图PDDG的依赖边集EPDDG中,每存在一条以结点n为终点的依赖边,则结点n的入度indegree[n]加1,其中该indegree[n]表示结点n的入度,初始值为0;
4.3重复上述4.1和4.2,直到遍历完动态依赖图PDDG的活动结点集NPDDG中所有活动;
4.4如果集合zeroIndegreeNodeSet不为检测是否存在一个入度indegree[ni]为0的活动ni满足(P2,SC)[ni>(P2,SC’),即可以在演化后的服务组合P2的当前状态(P2,SC)下发生,如果不存在,则服务组合实例的迁移有效性不满足,其中(P2,SC)[ni>(P2,SC’)表示ni可以在过程P2的SC状态下执行且随着ni的执行P2会由状态SC进入一个新的状态SC’;
4.5如果存在活动ni,则将结点ni从集合zeroIndegreeNodeSet中删除并添加到拓扑排序ρ中,同时更新P2的当前状态;
4.6遍历动态依赖图PDDG的依赖边集EPDDG,将所有与结点ni邻接的结点入度减1;
本实施例中,上述具体实现步骤可采用如下的算法3来实现,当然,本领域的普通技术人员可以采用其他的方式来实现,以下仅为一个示范性实施例。
算法3——迁移有效性验证:
1.begin
2.zeroIndegreeNodeSet←Ф
3.(P2,Sc)←(P2,S0)
4.for each n∈N'
5.indegree[n]←0
6.for each<n',n>∈E
7.indegree[n]←indegree[n]+1
8.endfor
9.if indegree[n]=0
10.zeroIndegreeNodeSet←zeroIndegreeNodeSet∪{n}
11.endif
12.endfor
13.while zeroIndegreeNodeSet.isEmpty()=false
15.zeroIndegreeNodeSet←zeroIndegreeNodeSet-{ni}
16.(P2,Sc)←(P2,Sc')
17.for each n∈N satisfying<ni,n>∈E
18.indegree[n]←indegree[n]-1
19.if indegree[n]=0
20.zeroIndegreeNodeSet←zeroIndegreeNodeSet∪{n}
21.endif
22.endfor
23.else
24.validity←false
25.return
26.endif
27.endwhile
28.validity←true
29.end
下面结合图4-7所示,以旅行代理的BPEL过程模型作为服务组合实例,对本实施例提出的迁移有效性判定过程及其实现做具体的说明,旅行代理的BPEL过程模型包括机票预订,宾馆预订等服务,该模型由14个活动结点构成,包括选择,并发等结构。
为了判定在演化前的服务组合过程定义下生成的、尚未执行结束的实例能否安全有效地迁移到演化后的服务组合过程的特定状态定义下继续执行,其判定过程的实施包括:
1.分析待迁移的服务组合实例P1的执行路径σ=<A1.1,A2.1,A3.1,A4.1,A5.1,A6.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A6.2,A7.2,A8.2,A9.2,A10.1,A12.1,A11.1>进行依赖关系R,得到动态依赖图DDG,并获得到可达变量定义的集合ReachingDefs(P1,σ)={queryInputA1.2,airlineQueryA2.2,hotelQueryA2.2,airlineResultA3.2,hotelResultA4.2,queryOutputA5.2,AcknowledgementA8.2,airlineBookingA10.1,hotelBookingA10.1,hotelOfferA12.1,airlineOfferA11.1},Ai.j表示活动Ai的第j次发生,其具体过程如下:
1.1初始化ReachingDefs和Uses为遍历演化前的BPEL过程实例的执行路径的所有活动结点,添加到动态依赖图的活动结点集NDDG中,得到NDDG={A1.1,A2.1,A3.1,A4.1,A5.1,A6.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A6.2,A7.2,A8.2,A9.2,A10.1,A12.1,A11.1},分析得到所有活动结点间的控制依赖关系集SCD={(A9.1,A1.2),(A9.1,A2.2),(A9.1,A3.2),(A9.1,A4.2),(A9.1,A5.2),(A9.1,A6.2),(A9.1,A7.2),(A9.1,A8.2),(A9.2,A10.1),(A9.2,A12.1),(A9.2,A11.1)}和异步调用依赖关系集SAD={(A7.1,A8.1),(A7.2,A8.2)};
1.2遍历活动结点集NDDG,若果活动i与活动j间存在控制依赖或异步调用依赖,即其二元关系属于控制依赖关系集SCD和异步调用依赖关系集SAD,则将相应控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合EDDG中;
1.3采用数据流分析方法,将所有真数据依赖边(A1.1,A2。1),(A2。1,A3。1),(A3.1,A5.1),(A4.1,A5.1),(A5.1,A6.1),(A5.1,A7.1),(A7。1,A8。1),(A8.1,A9.1),(A2.1,A1.2),(A3.1,A2.2),(A4.1,A2.2),(A5.1,A3.2),(A5.1,A4.2),(A6.1,A5.2),(A7.1,A5.2),(A5.2,A10.1),(A1.2,A2.2),(A2.2,A3.2),(A2.2,A4.2),(A4.2,A5.2),(A5.2,A6.2),(A5.2,A7.2),(A7.2,A8.2),(A8.2,A9.2),(A10.1,A12。1),(A10.1,A11.1)加入动态依赖图DDG中,即:遍历执行路径σ中活动A1.2的所有输入变量,因为在执行活动A1.1时,已将A1.2的输入变量queryInput添加到了已定义变量集合ReachingDefs中,所以活动A1.2使用了活动A1.1定义的变量queryInput,则将以活动A1.1为起点,活动A1.2为终点的真数据依赖边添加到DDG中,同时将queryInput添加到所使用变量集合Uses中;
1.4采用数据流分析方法,将反数据依赖边(A9.1,A8.2)加入动态依赖图DDG中,即:遍历执行路径σ中活动A8.2的所有输出变量。因为在执行活动A9.1时,已将A8.2的输出变量acceptance添加到了使用变量集合Uses,所以活动A8.2定义了活动A9.1使用的变量,则将以活动A9.1为起点,活动A8.2为终点的反数据依赖边添加到DDG中,同时将acceptance添加到Def(A8.2)中;
1.5采用数据流分析方法,将所有输出数据依赖边(A1.1,A1.2),(A2.1,A2.2),(A3.1,A3.2),(A4.1,A4.2),(A5.1,A5.2),(A8.1,A8..2)加入动态依赖图DDG中,即:遍历执行路径σ中活动A8.2的所有输出变量,因为在执行活动A8.1时,已将活动A8.2的输出变量acceptance添加到了已定义变量集合ReachingDefs,所以活动A8.2重新定义了活动A8.1定义的变量acceptance,则将以活动A8.1为起点,活动A8.2为终点的输出数据依赖边添加到DDG中,同时将A8.2的输出的变量acceptance添加到Def(A8.2)中,将A8.1的输出的变量acceptance添加到Kill(A8.2)中;
1.6将Def(A8.2)中的元素A8.2的输出的变量acceptance添加到已定义集合ReachingDefs中,将Kill(A8.2)中的元素A8.1的输出的变量acceptance添加到从动态可达定义集合ReachingDefs中删除,即用A8.2定义的acceptance覆盖掉A8.1定义的acceptance;
1.7重复1.2到1.6,直到遍历完整个执行路径σ中的所有活动;
1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集NDDG={A1.1,A2.1,A3.1,A4.1,A5.1,A6.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A6.2,A7.2,A8.2,A9.2,A10.1,A12.1,A11.1}和依赖边集EDDG={(A9.1,A1.2),(A9.1,A2.2),(A9.1,A3.2),(A9.1,A4.2),(A9.1,A5.2),(A9.1,A6.2),(A9.1,A7.2),(A9.1,A8.2),(A9.2,A10.1),(A9.2,A12.1),(A9.2,A11.1),(A1.1,A2。1),(A2。1,A3。 1),(A3.1,A5.1),(A4.1,A5.1),(A5.1,A6.1),(A5.1,A7.1),(A7。1,A8。1),(A8.1,A9.1),(A1.1,A1.2),(A2.1,A1.2),(A2.1,A2.2),(A3.1,A2.2),(A3.1,A3.2),(A4.1,A2.2),(A4.1,A4.2),(A5.1,A3.2),(A5.1,A4.2),(A5.1,A5.2),(A6.1,A5.2),(A7.1,A5.2),(A8.1,A8.2),(A5.2,A10.1),(A1.2,A2.2),(A2.2,A3.2),(A2.2,A4.2),(A4.2,A5.2),(A5.2,A6.2),(A5.2,A7.2),(A7.2,A8.2),(A8.2,A9.2),(A10.1,A12。1),(A10.1,A11.1)},构建动态依赖图DDG,如图4所示,为演化前服务组合执行路径的动态依赖图DDG。
2.通过向后动态切片的方法,删除对演化后的服务组合P2没有影响的活动A6.1,A6.2及其相应依赖边(A5.1,A6.1),(A5.2,A6.2),(A6.1,A5.2)(A9.1,A6.2)得到约简后的动态依赖图,其具体过程如下:
2.1将服务组合实例P1当前状态下的所有变量在演化后的BPEL过程模型上投影,获得所有变量的投影ReachingDefs(P1,σ)∩V(P2)={queryInputA1.2,airlineQueryA2.2,hotelQueryA2.2,airlineResultA3.2,hotelResultA4.2,queryOutputA5.2,AcknowledgementA8.2,airlineBookingA10.1,hotelBookingA10.1,hotelOfferA12.1,airlineOfferA11.1};
2.2遍历ReachingDefs(P1,σ)∩V(P2)所有变量,在动态依赖图DDG中找出定义变量的活动结点A1.2,A2.2,A3.2,A4.2,A5.2,A8.2,A10.1,A11.1,A12.1;
2.3采取向后动态切片方法获得直接或间接影响变量取值的活动切片S;
2.4删除动态依赖图中不属于任意切片S的活动A6.1,A6.2以及与该活动相关的边(A5.1,A6.1),(A5.2,A6.2),(A6.1,A5.2),(A9.1,A6.2),从而得到约简后的动态依赖图PDDG;
其中,步骤2.4具体如下:
2.4.1初始化活动结点集NPDDG和依赖边集EPDDG为空,遍历投影ReachingDefs(P1,σ)∩V(P2)中所有变量,变量queryInputA1.2,不在约简后的动态依赖图的活动结点集NPDDG中,则将活动A1.2添加到结点集NPDDG中以及将活动A1.2添加到一堆栈traversalQueue中;
2.4.2以A1.2为终点的边(A1.1,A1.2),(A2.1,A1.2),(A9.1,A1.2)属于依赖边集EDDG但不属于EPDDG,将此依赖边添加到EPDDG中;
2.4.3A1.1,A2.1,A9.1不在NPDDG中,将A2.1,A9.1添加到NPDDG中;
2.4.4重复步骤2.4.1-2.4.4的分析方法,直至遍历完投影ReachingDefs(P1,σ)∩V(P2)中所有变量;
2.4.5通过获得的活动结点集NDDG={A1.1,A2.1,A3.1,A4.1,A5.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A7.2,A8.2,A9.2,A10.1,A12.1,A11.1}和依赖边集EDDG={(A9.1,A1.2),(A9.1,A2.2),(A9.1,A3.2),(A9.1,A4.2),(A9.1,A5.2),(A9.1,A7.2),(A9.1,A8.2),(A9.2,A10.1),(A9.2,A12.1),(A9.2,A11.1),(A1.1,A2。1),(A2。 1,A3。1),(A3.1,A5.1),(A4.1,A5.1),(A5.1,A7.1),(A7。1,A8。1),(A8.1,A9.1),(A1.1,A1.2),(A2.1,A1.2),(A2.1,A2.2),(A3.1,A2.2),(A3.1,A3.2),(A4.1,A2.2),(A4.1,A4.2),(A5.1,A3.2),(A5.1,A4.2),(A5.1,A5.2),(A7.1,A5.2),(A8.1,A8.2),(A5.2,A10.1),(A1.2,A2.2),(A2.2,A3.2),(A2.2,A4.2),(A4.2,A5.2),(A5.2,A7.2),(A7.2,A8.2),(A8.2,A9.2),(A10.1,A12。1),(A10.1,A11.1)}构建约简后的动态依赖图PDDG,如图5所示,为约简后的动态依赖图PDDG。
3.对演化后的服务组合P2使用现有的控制流分析方法得到它的控制流图CFG,如图6a-6b所示,为演化后服务组合的控制流图的示例。为对比起见,本例中给出了演化前服务组合的控制流图,如图7a-7b所示。
4.从约简后的动态依赖图PDDG中判断,如果存在一个拓扑排序ρ=<A1.1,A2.1,A3.1,A4.1,A5.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A7.2,A8.2,A9.2,A10.1,A11.1,A12.1>可以在P2的控制流图CFG上重现,则判定相应服务组合实例满足迁移有效性,其判定的具体步骤如下:
4.1遍历约简后的动态依赖图PDDG的依赖边集EPDDG,如果存在以某结点为终点的边,则该结点的入度indegree加1,最后得到indegree[A1.1]=0,indegree[A2.1]=1,indegree[A3.1]=1,indegree[A4.1]=0,indegree[A5.1]=2,indegree[A7.1]=1,indegree[A8.1]=1,indegree[A9.1]=1,indegree[A1.2]=3,indegree[A2.2]=5,indegree[A3.2]=4,indegree[A4.2]=4,indegree[A5.2]=5,indegree[A7.2]=2,indegree[A8.2]=4,indegree[A9.2]=1,indegree[A10.1]=2,indegree[A11.1]=2,indegree[A12.1]=2;
4.2A1.1入度为0,则添加到集合zeroIndegreeNodeSet中;
4.3重复上述4.1和4.2,直到遍历完动态依赖图PDDG的活动结点集NPDDG中所有活动;
4.4存在一个入度为0的活动A1.1满足(P2,SC)[A1.1>(P2,SC’);
4.5将结点A1.1添加到拓扑排序ρ中,从集合zeroIndegreeNodeSet中删除并添加到拓扑排序ρ中,同时更新P2的当前状态;
4.6遍历动态依赖图PDDG的依赖边集EPDDG,将所有与结点ni邻接的结点A1.2,A2.1入度减1,即indegree[A1.2]=0,indegree[A2.1]=0;
4.7重复上述4.4到4.6,直到集合zeroIndegreeNodeSet为此时如果存在一个活动序列的拓扑排序ρ=<A1.1,A2.1,A3.1,A4.1,A5.1,A7.1,A8.1,A9.1,A1.2,A2.2,A3.2,A4.2,A5.2,A7.2,A8.2,A9.2,A10.1,A11.1,A12.1>可以在演化后的BPEL过程P2中重放,可判定该服务组合实例的迁移有效性满足。
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。
Claims (5)
1.一种基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,以演化前后的服务组合、以及待迁移实例的已执行路径为输入,以待迁移实例的迁移有效性判定结果为输出,其实现包括以下步骤:
步骤1、分析待迁移实例的已执行路径中活动间的依赖关系,自动生成该已执行路径的动态依赖图,即待迁移实例的动态依赖图,并获得到达已执行路径结束处的所有可达变量定义的集合;
步骤2、约简动态依赖图:通过向后动态切片的方法,删除对实例迁移没有影响的活动及其相应的依赖边;
步骤3、对演化后的服务组合使用控制流分析方法得到控制流图;以及
步骤4、基于演化后的服务组合的控制流图和待迁移实例约简后的动态依赖图,判断约简后的动态依赖图下是否存在一个拓扑排序可以在演化后的服务组合下重现,即判断是否存在一个拓扑排序是演化后服务组合的一个活动序列,如果存在,则迁移的有效性得到满足,反之不满足。
2.根据权利要求1所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤1的具体实现中,待迁移实例的已执行路径表示为σ={σ1,σ2,…},σ1,σ2,…表示活动,活动σi的所有输入变量为inPut(σi),所有输出变量为outPut(σi);活动间的依赖关系表示为R=(σi,σj),σi和σj表示前述执行路径中的活动,其包含控制依赖关系、异步调用依赖关系和数据依赖关系,并通过有向边的形式在动态依赖图DDG中展现;待迁移实例的动态依赖图表示为DDG=(NDDG,EDDG),NDDG代表动态依赖图的活动结点集,由事件日志中所有不重复的活动组成,EDDG代表动态依赖图结点间的依赖边集,由控制依赖关系集、异步调用依赖集和数据依赖关系集组成;本步骤1的实现包括以下步骤:
1.1初始化集合ReachingDefs(P1,σ)和集合Uses为集合Uses代表所使用的变量集合,集合ReachingDefs(P1,σ)为动态可达定义集合,即执行路径σ结束处的所有定义变量集合,其中P1为演化前的服务组合,遍历演化前待迁移实例的执行路径中的所有活动结点,添加到动态依赖图的活动结点集NDDG中,分析可得所有活动结点间的控制依赖关系集SCD和异步调用依赖关系集SAD;
1.2遍历活动结点集NDDG,如果活动i与活动j间存在控制依赖或异步调用依赖,也即:活动i与活动j间的二元关系属于控制依赖关系集SCD和异步调用依赖关系集SAD,则将相应的控制依赖边或异步调用依赖边添加到动态依赖图的依赖边集合EDDG中;
1.3采用数据流分析方法,将所有真数据依赖边加入动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输入变量var∈inPut(σj),如果活动j使用了活动k定义的变量,即活动k的变量属于所述集合ReachingDefs(P1,σ),则将以活动j为起点、以活动k为终点的真数据依赖边添加到动态依赖图DDG中,同时将活动j的输入变量添加到所述集合Uses中;
1.4采用数据流分析方法,将所有反数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),如果活动j定义了活动k使用的变量,即活动k的变量属于所述集合Uses,则将以活动k为起点、以活动j为终点的反数据依赖边添加到动态依赖图DDG中,同时将活动j的输出变量添加到活动j所定义的所有变量的集合Def(σ[j])中;
1.5采用数据流分析方法,将所有输出数据依赖边加入到动态依赖图DDG中,具体地,遍历执行路径σ中活动j的所有输出变量var∈outPut(σj),若该输出变量已经被活动i定义,即活动i的变量属于所述集合ReachingDefs(P1,σ),且活动j重新定义了该输出变量,则将以活动i为起点、以活动j为终点的输出数据依赖边添加到DDG中,同时将活动j的输出变量添加到所述集合Def(σ[j])中,活动i的定义变量添加到集合Kill(σ[j]),该集合Kill(σ[j])为待迁移实例沿执行路径σ执行时,所有到达活动j而被活动j重新定义后被覆盖掉的变量定义构成的集合;
1.6将所述集合Def(σ[j])中的所有元素添加到所述集合ReachingDefs(P1,σ)中,将所述Kill(σ[j])中的所有元素从所述集合ReachingDefs(P1,σ)中删除;
1.7重复上述步骤1.2到1.6,直到遍历完整个执行路径σ中的所有活动;以及
1.8根据执行路径中所有活动结点以及它们之间的依赖关系确立动态依赖图DDG的活动结点集NDDG和依赖边集EDDG。
3.根据权利要求2所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤2中,约简后的动态依赖图表示为PDDG=(NPDDG,EPDDG),NPDDG代表动态依赖图的活动结点集,EPDDG代表结点间的依赖边集;本步骤2的实现包括以下步骤:
2.1将所述演化前服务组合P1当前状态下的所有变量在演化后的服务组合上投影,获得所有变量的投影ReachingDefs(P1,σ)∩V(P2),P2为演化后的服务组合,V(P2)表示P2中的所有活动;
2.2遍历投影ReachingDefs(P1,σ)∩V(P2)中的所有变量,即在所述动态依赖图DDG中找出已定义变量的活动结点;
2.3基于步骤2.2获得的活动结点,采取向后动态切片方法获得直接和间接影响变量取值的活动切片S;以及
2.4删除动态依赖图DDG中不属于任意活动切片S的活动以及与该活动相应的依赖边,从而得到约简后的动态依赖图PDDG。
4.根据权利要求3所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤2.4的实现包括以下步骤:
2.4.1初始化活动结点集NPDDG和依赖边集EPDDG为空,遍历投影ReachingDefs(P1,σ)∩V(P2)中所有变量,如果存在变量被活动σi定义,且活动σi不在约简后动态依赖图的活动结点集NPDDG中,则将该活动σi添加到活动结点集NPDDG中和一堆栈traversalQueue中;
2.4.2如果堆栈traversalQueue不为空,则将traversalQueue中第一个活动出栈,如果以该活动为终点的依赖边属于依赖边集EDDG但不属于依赖边集EPDDG,将此依赖边添加到依赖边集EPDDG中;如果此依赖边的起点不在活动结点集NPDDG中,将此结点添加到活动结点集NPDDG中,并添加到到堆栈traversalQueue中;
2.4.3重复上述步骤2.4.1-2.4.2,直至遍历完投影ReachingDefs(P1,σ)∩V(P2)中所有变量;以及
2.4.4基于步骤2.4.1到2.4.4得到的活动结点集NPDDG和依赖边集EPDDG,构建约简后的动态依赖图PDDG。
5.根据权利要求3或4所述的基于动态依赖图的服务组合实例迁移有效性判定方法,其特征在于,所述步骤4中,迁移有效性的具体判定包括以下步骤:
4.1遍历约简后动态依赖图PDDG的活动结点集NPDDG中的所有活动,如果在约简后的动态依赖图PDDG的依赖边集EPDDG中,每存在一条以结点n为终点的依赖边,则结点n的入度indegree[n]加1,其中该indegree[n]表示结点n的入度,初始值为0;
4.3重复上述4.1和4.2,直到遍历完动态依赖图PDDG的活动结点集NPDDG中所有活动;
4.4如果集合zeroIndegreeNodeSet不为检测是否存在一个入度indegree[ni]为0的活动ni满足(P2,SC)[ni>(P2,SC’),即可以在演化后的服务组合P2的当前状态(P2,SC)下发生,如果不存在,则服务组合实例的迁移有效性不满足,其中(P2,SC)[ni>(P2,SC’)表示ni可以在过程P2的SC状态下执行且随着ni的执行P2会由状态SC进入一个新的状态SC’;
4.5如果存在活动ni,则将结点ni从集合zeroIndegreeNodeSet中删除并添加到拓扑排序ρ中,同时更新P2的当前状态;
4.6遍历动态依赖图PDDG的依赖边集EPDDG,将所有与结点ni邻接的结点入度减1;
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310581404.XA CN103606042B (zh) | 2013-11-18 | 2013-11-18 | 基于动态依赖图的服务组合实例迁移有效性判定方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310581404.XA CN103606042B (zh) | 2013-11-18 | 2013-11-18 | 基于动态依赖图的服务组合实例迁移有效性判定方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103606042A true CN103606042A (zh) | 2014-02-26 |
CN103606042B CN103606042B (zh) | 2016-08-17 |
Family
ID=50124262
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310581404.XA Active CN103606042B (zh) | 2013-11-18 | 2013-11-18 | 基于动态依赖图的服务组合实例迁移有效性判定方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103606042B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107038025A (zh) * | 2016-09-28 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 基于soa架构的***调用方法及装置 |
CN108780465A (zh) * | 2016-03-25 | 2018-11-09 | 微软技术许可有限责任公司 | 用于操作排序的基于属性的依赖性识别 |
CN115756929A (zh) * | 2022-11-23 | 2023-03-07 | 北京大学 | 一种基于动态服务依赖图的异常根因定位方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101325601B (zh) * | 2008-07-31 | 2011-05-04 | 南京大学 | 服务组合环境下基于质量依赖关系的服务选取方法 |
CN102255955B (zh) * | 2011-06-22 | 2014-01-29 | 浙江工商大学 | 基于依赖关系的Web服务动态组合方法 |
-
2013
- 2013-11-18 CN CN201310581404.XA patent/CN103606042B/zh active Active
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108780465A (zh) * | 2016-03-25 | 2018-11-09 | 微软技术许可有限责任公司 | 用于操作排序的基于属性的依赖性识别 |
CN108780465B (zh) * | 2016-03-25 | 2021-12-07 | 微软技术许可有限责任公司 | 用于操作排序的基于属性的依赖性识别 |
CN107038025A (zh) * | 2016-09-28 | 2017-08-11 | 阿里巴巴集团控股有限公司 | 基于soa架构的***调用方法及装置 |
CN107038025B (zh) * | 2016-09-28 | 2020-04-07 | 阿里巴巴集团控股有限公司 | 基于soa架构的***调用方法及装置 |
CN115756929A (zh) * | 2022-11-23 | 2023-03-07 | 北京大学 | 一种基于动态服务依赖图的异常根因定位方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN103606042B (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6253555B2 (ja) | 高性能のグラフ分析エンジンに関するシステムおよび方法 | |
Orsini et al. | Context-aware computation offloading for mobile cloud computing: Requirements analysis, survey and design guideline | |
Shimizu et al. | Model driven development for rapid prototyping and optimization of wireless sensor network applications | |
US20130013534A1 (en) | Hardware-assisted approach for local triangle counting in graphs | |
CN103065221A (zh) | 基于bpel的多学科协同优化流程建模与调度的方法和*** | |
Bodei et al. | Tracing where IoT data are collected and aggregated | |
Orsini et al. | CloudAware: empowering context‐aware self‐adaptation for mobile applications | |
CN111355696A (zh) | 一种报文识别方法、装置、dpi设备及存储介质 | |
CN112330519A (zh) | 一种数据处理的方法和装置 | |
CN103606042A (zh) | 基于动态依赖图的服务组合实例迁移有效性判定方法 | |
CN110781180A (zh) | 一种数据筛选方法和数据筛选装置 | |
CN112653749A (zh) | 用于物联网的基于边缘计算的复杂事件处理***及方法 | |
Grassi et al. | A model-driven approach to performability analysis of dynamically reconfigurable component-based systems | |
CN112805984B (zh) | 用于部署增量网络更新的*** | |
Song et al. | Towards improving context interpretation in the iot paradigm: a solution to integrate context information in process models | |
Marin et al. | Reaching for the clouds: contextually enhancing smartphones for energy efficiency | |
Schäfer et al. | Increasing availability of workflows executing in a pervasive environment | |
Wan et al. | Commitments and causality for multiagent design | |
CN112953851A (zh) | 一种流量的分类方法以及流量管理设备 | |
CN114816354A (zh) | 一种数据资产管理方法、***、计算机设备及存储介质 | |
Ortiz et al. | Towards event-driven context-aware web services | |
US20200228391A1 (en) | Dynamic statistics correlation for computing resources in a multi-tenant environment | |
Odeh et al. | A new classification of non-functional requirements for service-oriented software enineering | |
CN118101427B (zh) | 节点检测方法、装置、计算机、存储介质及程序产品 | |
CN116192629B (zh) | 一种基于边缘计算的差异化数据处理方法和*** |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |