4.4.6.1 实验设置
为了评估本章方法的有效性,我们使用Matlab实现了一个用于服务故障诊断的仿真实验系统,系统框架如图4.9所示。
图4.9 实验系统框架
该系统从QWS(Quality of Web Service)数据集[181,182]中收集了2507个真实的Web服务属性集合,并且将这些服务属性赋予2507个行为节点,这些行为节点被分配到不同的服务池当中。通过定义一组服务端口集合,并将集合中的服务端口随机分配给每个服务池的一个输入端口和一个输出端口,使同一服务池中的所有服务节点都具有相同的输入和输出端口。为了生成所需要的Web服务工作流,首先给定要生成的Web服务的行为个数和其中包含的结构行为个数。根据给定的个数,利用随机选择方法确定结构行为在工作流中的位置,从选择、并发、循环中随机选择一个作为结构行为的结构类型。然后,从服务池中随机选择一个服务节点作为要生成的Web服务的初始行为节点,检查下一个节点是否是结构行为节点。如果不是结构行为节点,则根据当前节点的输出端口从服务池中找到具有与该端口类型一致的输出端口的服务池,再从该服务池中随机选择一个服务节点作为该Web服务的下一个行为节点;如果是结构行为节点,则将相应结构行为节点插入,并根据结构类型和内部基本行为节点个数从服务池中选择服务节点。而结构节点自身则按照普通节点一样分配节点属性,直至节点数达到给定的服务节点数,整个Web服务生成完成。最后,根据已得到的工作流及其行为的属性,生成指定个数的工作流执行路径。如果并没有特别指出节点失败执行概率,那么则按照初始服务属性中的可靠性概率生成节点,否则按照给定失败概率生成执行路径。通过得到的工作流及其执行信息,我们可以使用设定的诊断方法对服务故障进行诊断。
我们设置了两个评价准则:准确率和诊断效率。准确率是指在所有诊断中诊断正确的次数占总诊断次数的比例;而诊断效率则是指一次诊断获得诊断结果所需要的时间(单位:ms)。
此外,为了验证提出的方法是否提高了诊断的准确性,我们将所提出的方法的诊断结果与两种经典的基于模型的诊断方法进行了比较,一种是Ardissono等[61]提出的模型诊断方法,该方法在诊断时主要考虑行为间的3种依赖关系,即forward(输出与输入相同)、source(没有输入,输出是由行为创建的)、elaboration(输出是行为修改输入后产生的);一种是Yan等[116]提出的基于同步自动机模型的诊断方法,该方法主要考虑进程两个相关行为间的依赖关系,并且给出了明确的诊断定义。
将以上提到的3种诊断方法应用于3个真实的BPEL进程当中,表4.2显示了这3个BPEL进程的部分特征。从表中我们可以看出,3个进程有不同的活动数和变量数,并且包含不同的结构活动。进程1和进程2包含flow和switch结构活动,即包含并发和选择行为;进程3不仅包含并发行为,而且还包含循环行为。
我们对每一个进程注入3种故障类型:数据故障,即随机改变或删除变量输出的数值;数据类型不匹配的故障,即随机改变活动输出变量的类型;行为逻辑故障,即随机使用一个活动代替另外一个活动。
表4.2 3个BPEL进程的结构特征
4.4.6.2 实验分析及对比(www.xing528.com)
第一组实验是比较3种方法的诊断准确性,我们对每一个进程共注入100次故障,并且在产生相应历史执行数据时给定故障活动执行失败的概率为0.8,而其他活动一直成功地执行。
在图4.10中,bpn表示我们所提出的基于完备BPN模型的择优诊断方法,yan表示Yan等[116]提出的基于同步自动机的诊断方法,ard表示Ardissono等[61]所提出的诊断方法。从图中可以看出,基于完备BPN模型的择优诊断方法的准确性大大高于其他两种方法,而yan方法的准确性又高于ard方法。这主要是由于ard方法只考虑了单个活动与其输入、输出之间的依赖关系,而没有考虑活动之间的依赖关系,因此对于业务逻辑故障无法做出准确的诊断;yan方法在其诊断模型中定义了活动与其输入、输出之间的关系,而且也定义了活动之间的结构关系,但是它没有明确地定义出变量类型与变量值之间的依赖关系;而基于完备BPN模型的择优诊断方法不仅考虑到了活动本身与其输入、输出之间的关系和活动之间的结构关系,而且明确地定义了变量类型以及变量值这两种依赖关系。因此,基于完备BPN模型的择优诊断方法在诊断的准确性方面优于另外两种方法,能够有效地对服务故障进行定位。
第二组实验是评估3种方法的诊断效率,我们随机产生100组Web服务,每组中包含10个具有相同活动个数的服务。我们依照上面提到的故障注入方法对每个服务注入故障并产生执行数据。然后,我们使用3种诊断方法分别对这100组Web服务进行故障诊断,计算每组服务中每个方法的平均诊断时间并对3种方法的诊断时间进行了比较。
图4.10 3种方法的准确性比较
图4.11显示了3种诊断方法在诊断时间上的比较结果,从图中可以看出,我们所提方法的诊断时间要远远少于其他两种方法的诊断时间。yan和ard这两种方法都是从异常抛出点开始从后向前逐一对活动进行诊断,直至找到故障;而我们所提方法通过活动以往发生故障的概率来对待诊断活动进行排序,先对概率高的活动进行诊断,这样大大减少了被诊断的活动个数,从而缩减了诊断的时间。
图4.11 3种方法的诊断时间比较
图4.12显示了3种方法对不同规模服务的平均诊断个数,从图中可以看出,我们所提出的方法诊断的活动个数也是远远小于其他两种方法的。
图4.12 3种方法的诊断活动个数比较
从上面两组实验可以看出,我们的方法与已有的方法比较,在诊断的准确性和诊断效率方面都优于已有方法。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。