传统的基于模型的Web服务故障诊断方法大多假设组合的服务流程是可以被正确定义的,系统模型是完备的,诊断推理需要考虑所有可能的系统执行路径,通过观测与模型差异找出故障,所以诊断复杂性较高。然而实际应用的系统模型往往并不完备,缺少对系统中部分状态和行为的定义。例如,Ardissono[61,118,119,121]所提出的方法在系统模型中仅定义了单个行为与其输入输出之间的依赖关系,而没有考虑行为间的依赖关系;而Yan[116]的方法在模型中仅定义了系统与外部服务交互的基本行为而没有定义系统内部的基本行为(assign/empty/wait/throw),并且没有明确地定义出变量类型之间与变量值之间的依赖关系。在实际的云服务应用系统中,流程定义内容不一定完整,服务之间也不一定完全兼容,从而导致流程中所定义的组合过程不正确[78],系统发生业务流程故障。另外,云服务应用系统是增量式开发的,测试通过的服务实际上也不能保证其完全正确,潜在的故障有可能在传播到“很远的”新增加的服务时发生。这使得云服务系统模型的正确性和完整性无法得到保证,从而无法保证诊断方法获得正确的诊断结果。
针对这一问题,我们提出一种轻量型的基于服务依赖图的统计诊断方法。通过分析服务系统的BPEL构建描述服务行为间依赖关系的服务依赖图模型,利用系统历史运行数据计算行为依赖关系与失败执行间的相似性,最后通过得到的相似性系数计算在实际中服务行为不满足用户需求的故障可能性。通过分别计算每个行为的控制依赖、并发依赖和数据依赖的可疑度,所提出的方法能够区分故障类型,解释故障发生的原因。
服务依赖图主要用于构建服务中的行为依赖关系,将服务行为从复杂的描述中抽象出来,便于行为状态的分析与预测。为了便于服务故障的诊断,在行为之间的各种依赖关系都应该通过服务依赖图表示出来。传统的应用于程序故障诊断中的语句间依赖关系主要有数据依赖和控制依赖两种[198,199]。由于Web服务具有并发性和异步性,因此Web服务行为除了具有数据依赖和控制依赖这两种依赖关系以外,还具有两种Web服务特有的依赖关系[200,201],即异步数据依赖和并发控制依赖。
定义5.1 如果每条从行为b到结束行为的有向路径中都包含行为b′,则称行为b被行为b′后继支配。
定义5.2 行为b2控制依赖于行为b1,当且仅当:
(1)存在一条从b1到b2的有向路径p,对于p中任何一个不同于行为b1和b2的行为b′,b2都后继支配于b′;
(2)行为b1不被行为b2后继支配。
定义5.3 行为b2数据依赖于行为b1,当且仅当:
(1)行为b1定义了一个变量v;
(2)存在一条从行为b1到行为b2的有向路径p,p中任何一个不同于行为b1的行为b′都没有对变量v重新定义;
(3)行为b2使用了变量v。
行为控制依赖与程序故障诊断中的控制依赖类似,都是描述所执行元素间的顺序依赖关系。行为数据依赖则与程序故障诊断中的数据依赖类似,都是描述执行元素间输入、输出数据的依赖关系。异步数据依赖发生在一个异步单向调用操作和其相对应的接收操作之间,该接收操作通过异步通信机制接收单向调用操作的响应,这种依赖关系有一个异步特征。并发控制依赖发生在并发结构当中,结构中的行为都是并发执行的。
定义5.4 行为b2异步数据依赖于行为b1,当且仅当:
(1)行为b1是一个单向调用行为;
(2)行为b2是用于接收行为b1响应的接收行为;
(3)行为b1使用了行为b2定义的变量。
定义5.5 行为b1,b2,…,bn并发控制依赖于b′,当且仅当:
(1)对于行为b1,b2,…,bn中的每一个行为bi(1≤i≤n)都控制依赖于行为b′;
(2)如果存在一条从b′到结束行为的有向路径p,那么对于任意的一个行为bi∈{b1,b2,…,bn},都有bi∈p。
传统的控制流图主要用于描述控制依赖,并帮助我们分析元素间的控制依赖关系。为了能够分析以上提到的两种控制依赖关系,我们扩展了传统的控制流图,将并发控制依赖加入控制流图当中,构建用于分析Web服务中控制依赖关系的服务控制流图,具体参见定义5.6。
定义5.6 一个Web服务WS的服务控制流图是一个四元组SCFG=(N,E,Ec,Econ),其中:
(1)N是WS的行为节点集合;(www.xing528.com)
(2)E表示WS中的控制流有向边集合,对于两个行为节点ni∈WS和nj∈WS,如果(ni,nj)∈E,那么表示控制流流向是从ni到nj;
(3)Ec表示WS中描述行为节点间的控制依赖的有向边集合,对于两个行为节点ni∈WS和nj∈WS,如果(ni,nj)∈Ec,那么nj控制依赖于ni,并且Ec(ni,nj).cnd表示边(ni,nj)的权重;
(4)Econ表示WS中的描述行为节点间的并发控制依赖的有向边集合,如果(ni,nj)∈Econ,那么nj并发控制依赖于ni;
(5)Ec⊂E并且Econ⊂E。
图5.4是第4.4.5节案例研究里给出的订票代理服务实例的服务控制流图,图中的圆圈表示行为节点,圆圈中的数字与图4.7中活动的标号相一致,如行为节点n1表示的是图4.7中的receive行为t1,细实线箭头表示行为间的控制流流向,双线空心箭头表示并发控制依赖,黑色粗线箭头则表示控制依赖。从图5.4可以看出,行为节点n6和n8都并发控制依赖于行为flow的行为节点n5,即有向边(n5,n6)∈Econ并且(n5,n8)∈Econ。而行为节点n11和n12都控制依赖于行为switch的行为节点n10。当节点n10的条件满足cnd=t时,即American Airlines机票价格小于等于Air China的机票价格时,执行路径从n10到n11;当cnd=f时,执行路径从n10到n12,即有向边(n10,n11)∈Ec,(n10,n12)∈Ec,Ec(n10,n11).cnd=t且Ec(n10,n11).cnd=f。
图5.4 订票代理服务的服务控制流图
与控制流图类似,传统的数据流图主要用于描述元素间的数据依赖关系,以帮助我们分析元素输入输出间的依赖关系。为了能够分析上面提到的两种数据依赖关系,我们扩展了传统的数据流图,将异步数据依赖加入数据流图当中,构建用于分析Web服务中的数据依赖关系的服务数据流图,具体参见定义5.7。
定义5.7 一个Web服务WS的服务数据流图是一个二元组SDFG=(N,Ed),其中:
(1)N是WS的行为节点集合;
(2)Ed表示WS中描述行为节点间的数据依赖或异步数据依赖的有向边集合,对于两个行为节点ni∈WS和nj∈WS,如果(ni,nj)∈E,那么nj数据依赖或异步数据依赖于ni。
图5.5是订票代理服务实例的服务数据流图,图中的圆圈表示行为节点,圆圈中的数字与图4.7中活动的标号相一致,虚线箭头表示行为间的数据依赖。从图5.5可以看出,行为节点n6和n8都数据依赖于行为节点n4,即有向边(n4,n6)∈Ed并且(n4,n8)∈Ed;由于行为t6和t8是异步调用行为,而t7和t9是分别与两个异步调用行为相对应的接收行为,因此行为节点n7异步数据依赖于n6,n9异步数据依赖于n8,即(n6,n7)∈Ed并且(n8,n9)∈Ed。
图5.5 订票代理服务的服务数据流图
为了表示上述4种行为间的依赖关系,我们将服务控制流图与服务数据流图合并构成服务依赖图。一个Web服务的服务依赖图的构建主要包括4个步骤:①通过服务描述规约,如BPEL生成行为节点;②根据定义生成服务控制依赖图和服务数据依赖图;③根据服务控制流图,使用单向带箭头的实线连接两个具有控制依赖关系或并发控制依赖关系的行为节点;④根据服务数据流图,使用单向带箭头的虚线连接两个具有数据依赖关系或异步数据依赖关系的行为节点。至此,服务依赖图构建完成。
定义5.8 一个Web服务WS的服务依赖图是一个四元组SDG=(N,Ec,Econ,Ed),其中:
(1)N是WS的行为节点集合;
(2)Ec表示WS中描述行为节点间的控制依赖的有向边集合,对于两个行为节点ni∈WS和nj∈WS,如果(ni,nj)∈Ec,那么nj控制依赖于ni,并且Ec(ni,nj).cnd表示边(ni,nj)的权重;
(3)Econ表示WS中的描述行为节点间的并发控制依赖的有向边集合,如果(ni,nj)∈Econ,那么nj并发控制依赖于ni;
(4)Ed表示WS中描述行为节点间的数据依赖或异步数据依赖的有向边集合,对于两个行为节点ni∈WS和nj∈WS,如果(ni,nj)∈E,那么nj数据依赖或异步数据依赖于ni。
图5.6是订票代理服务的服务依赖图,图中的圆圈表示行为节点,圆圈中的数字与图4.7中活动的标号相一致,虚线箭头表示行为间的数据依赖,双线空心箭头表示并发控制依赖,黑色粗线箭头则表示控制依赖。从图中可以看出,节点n6和n8并发控制依赖于节点n5,并且节点n6和n8还数据依赖于节点n4;节点n11和n12与节点n10之间不仅具有控制依赖关系,而且还具有数据依赖关系。从该例子中可以看出,服务依赖图简单、清晰地表达了行为之间的各种依赖关系,因此,我们可以利用服务依赖图来方便地分析行为与故障间的关系。
图5.6 订票代理服务的服务依赖图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。