Web服务是一个崭新的分布式计算模型,净水,是一系列包括XMLSOAP、UDDIWSDL和WSFL等标准在内的综合,提供了以往任何一种技术都不可能提供的各种不同平台之间的互操作性,给电子商务等应用带来了无限商机。
Web服务的广大市场和激烈竞争对Web服务的高可用性提出很大的挑战。容错技术是保证服务高可用性的好的解决方案。容错一般都通过冗余配置来实现。目前,软水,基于冗余配置的容错算法大体分为两类,即主动复制和被动复制14.主动复制算法具有失效恢复时间短的特点,一般被使用在实时性要求很高的关键服务中。但是,这种复制算法会带来重复嵌套呼叫问题。重复嵌套呼叫问题就是当A服务接收并处理某个请求的过程中需要向B服务发出一个请求,如果A服务采用的是主动复制方式,那么A服务的所有副本都会向B服务发出请求点假设:所有冗余配置的服务称为一个服务组。由服务的URN来标识该服务组。
对于主动复制服务组,SOAP引擎提供了可靠的组通信机制,它满足两个特性:①原子性,即广播给一个服务组的消息或者被全部服务接收,或者全不被接收;②顺序性,即同一个服务组的成员以相同的顺序接收广播给它们的消息。
服务的状态是可确定的18. 3过滤机制31基本原理过滤机制的基本原理是:对于该容错系统内主动复制服务组发出的每个请求,都标上唯一的ID号。容错系统过滤每个请求,防止有相同ID号的请求重复访问相同的服务,从而有效地避免了嵌套呼叫。
SOAP引擎是服务和其它服务及客户交互的唯一通道。本文实现的过滤机制采用在SOAP引擎中添加一个截获器的方法,对所有的输入输出消息进行过滤,既不破坏SOAP引擎原有的结构,又能很好地进行消息过滤。其结构过滤器结构为了标识相同的请求,必须给该消息标识D在SOAP消息头中添加一个自定义项携带ID标识,不会破坏SOAP消息的互通性(SOAP消息具有很好的扩展性)。ID号用来标识服务组内不同成员发出的相同请求,所以该ID号应该满足两个特性:(1)服务组内不同成员发出的相同请求含有相同的ID(2)不同的请求有一个全局惟一的标识。
为了产生唯一标识DSOAPEngine为每个主动复制容错服务组维持一个请求计数器。对于客户或其它无容错特性的服务发出的请求,该请求消息头中不含D标i识如果该消息请求主动复制服务组,则给该消息加上计数器的计数值后多播给服务组的每个成员。如果响应该消息的结果是继续请求其它服务,则给该请求消息标识D ID的格式为“计数值+请求服务的URN*显然该D标识满足上面定义的两个特性。对于含有ID标识的请求,则响应后向其它服务发出请求消息中的ID标识格式为”ID+请求服务的URN*显然,新的D标识仍旧满足上面定义的两个特性。
为了防止相同请求重复执行,截获器负责过滤每个请存储的数据格式为:(消息源地址列表,处理状态,响应结果)消息源地址列表存放所有发出相同请求的地址。处理状态代表该请求的响应情况,取值有两个,即processing和processed分别标识该请求正在被执行和已经执行完毕。
响应结果有一个默认值null表示无响应结果。如果处理状态为processed且响应结果为null则说明响应该请求的结果是对其它服务发出了请求。
32处理流程过滤机制对输入输出消息都进行了处理。下面详细说明过滤机制对各种消息的处理流程。
对于输入消息,过滤机制的处理流程如下:消息到达截获器。截获器首先判断该消息头中有没有携带JD标识u如果该消息头中没有ID标识(说明是客户或其它无容错特性服务发出的请求)则接着判断该消息是不是对主动复制服务组的请求。如果是,则将该服务组的计数值加入消息头中,同时刷新计数器;如果不是,则截获器不对该消息做任何修改,直接将消息交给SOAP引擎继续处理(解析消息、定位服务等)如果该消息有ID标识(说明是主动复制服务组成员发出的请求)则解析出D同时在SOAP引擎的Hash表中查找是否有该JD记录u如果无该ID记录(说明是第一个到达的请求),则在Hadi表中加入新的记录/=(D(消息源地址,processingnull))同时将该消息交给SOAP引擎继续处理。
如果有该ID记录,则判断该消息的处理状态。
a如果处理状态为processing则将该消息的源地址加入记录的源地址列表中。
b.如果处理状态为processed则根据不同的处理结果执行不同的操作。如果处理结果为默认值nuU则丢弃该请求消息;如果不是,则直接取出结果返回。
对于输出消息,过滤机制的处理流程如下:截获器首先判断该消息是返回消息还是对其它服务的请求°(2)如果是返回消息,则判断消息头中有无ID标识(如果请求消息头中带有JD标识则返回消息头中也必有该标识)如果没有ID(说明是无容错特性服务的请求响应)则将该消息交给SOAP引擎继续处理;如果有ID则由解析出的D从Hash表中查找到该条记录,将处理状态置为processed同时将处理结果也保存在记录中,并将处理结果按地址列表返回。
(3)如果是对其它服务的请求,则判断消息头中有无D标识或,'计\值。#p#分页标题#e#
如果有D标识,则从Hash表中查找到该条记录,同时将处理状态置为processed修改D标识为“D标识+请求服务的LRN”后将该消息交给SOAP引擎继续处理如果有计数值,则将该消息标识上JOJD的组成为“计数值+请求服务的URN*同时将计数值从消息头中清除。后将该消息交给SOAP引擎继续处理。
如果两者皆无,则将该消息交给SOAP引擎继续处理。
从以上处理流程可见,该过滤机制采用主动复制服务组发出请求标志D有请求到达就过滤的方法,可以实现嵌套访问,而且嵌套访问的层数和次数也不受限制。
4性能测试FaultolerantW‘ebServices)是在StarWQbServices1.0的基础上开发的容错平台,是本文算法实现和测试所使用的基本平台。
影响性能的主要原因是每个输入输出请求消息都必须经过截获器。我们分别在无容错支撑的SarWQbServ果表明,SFTWS对性能的影响系统可以承受,而且过滤机求消息。为了确认有没有相同的请求到达该服务,在SOAP制也有效地防止了重复嵌套呼叫。
Engine中增加了一个Hash表,负责存储从主动复制服务组。测试结果表明,过滤机制对性能的影响系统可以承受。而且,随着副本数的增加,过滤机制所需开销没有明显增加,性能稳定。
表1测试结果有无过滤机制AB服务副本配置情况平均响应时间无有无有A服务,主动复制模式,副本数3有A服务,主动复制模式,副本数6 5结束语本文基于Web服务计算框架提出了一种过滤机制,供水,能有效防止多极重复嵌套呼叫。后,我们对这种过滤机制做了性能测试,证明这种机制所需开销在系统能承受的范围。当然,这种过滤机制也可以使用在其它面向对象的分布计算中。
西安迪奥环保科技有限公司