首页> 中国专利> 支持持续查询的自动服务组合方法与系统

支持持续查询的自动服务组合方法与系统

摘要

本发明提供一种支持持续查询的自动服务组合方法,包括:根据查询请求以及多个原子服务的输入参数、输出参数、原子服务间的匹配关系建立服务依赖图,找出查询请求在第一时刻的最优服务组合结果;在第二时刻,检测到多个原子服务中的一个或多个发生变化,更新这些发生变化的原子服务的状态,将状态被更新的原子服务放入一集合中;对集合中状态被更新的原子服务在服务依赖图中的后继服务结点的状态是否发生变化进行判断,将状态发生变化的后继服务结点所代表的原子服务保存在所述集合中,更新服务依赖图;查找第一时刻的最优服务组合结果中是否存在状态最终发生了变化的原子服务,若存在,根据更新后的服务依赖图找出在第二时刻的最优服务组合结果。

著录项

  • 公开/公告号CN102087665A

    专利类型发明专利

  • 公开/公告日2011-06-08

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN201110030075.0

  • 发明设计人 姜伟;虎嵩林;

    申请日2011-01-27

  • 分类号G06F17/30(20060101);

  • 代理机构11280 北京泛华伟业知识产权代理有限公司;

  • 代理人王勇

  • 地址 100190 北京市海淀区中关村科学院南路6号

  • 入库时间 2023-12-18 02:30:29

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-03-06

    授权

    授权

  • 2011-07-20

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20110127

    实质审查的生效

  • 2011-06-08

    公开

    公开

说明书

技术领域

本发明涉及涉及面向服务的计算领域,特别涉及一种支持持续查询的自动服务组合方法与系统。

背景技术

随着网络环境下Web服务数目的持续增多,如何在大规模服务环境下有效地将多个Web服务组合起来以实现强大、丰富的功能来满足用户请求的问题被称为服务组合问题。组合服务的使用范围十分广泛,如当用户到外地出差、旅游时,通常需要将天气预报、航班查询、航班订票、预定旅店等多种服务的信息,此时就需要将多种服务进行整合,以提供”一站式”服务给用户。

现有技术中通常采用手工方法实现服务的组合,但手工方法具有低效、易错的缺陷,在服务数目越来越多的今天,这一方法的缺陷也越为明显。因此,本领域技术人员提出了自动实现服务组合的相关方法。

现有的自动服务组合方法主要有两类:一类是基于人工智能规划(AI Planning)的方法,另外一类是基于图搜索的框架。这两类方法主要是从功能性角度加以考虑,即如何地组合、组合哪些服务以满足用户请求的功能。另一方面,对于功能相似的服务,往往存在多个服务提供者,而每个提供者提供的服务质量(QoS)是有差别的;满足同一查询请求的组合服务结果往往不是唯一的,这些不同的组合服务结果的QoS也往往是不相同。为此,很多研究人员对这两个问题结合起来进行考虑,即质量敏感/驱动的自动服务问题。

虽然现有技术中用于解决质量敏感/驱动的自动服务问题的相关方法有多种,如基于图搜索的方法,此类方法以参考文献1“X.Wang,S.Huang and A.Zhou,《Qos-aware composite services retrieval,》J.Comput.Sci.Technol.,vol.21,no.4,pp.547-558,2006”与参考文献2“W.Jiang,C.Zhang,Z.Huang,M.Chen,S.Hu,and Z.Liu.Qsynth:A tool for qos-aware automatic service composition.In ICWS 2010,Miami,FL,USA,2010”中所披露的方法为典型;又如基于人工智能规划的方法,此类方法以参考文献3“M.Naseri and A.Towhidi,《Qos-aware automatic composition of web services using ai planners》,in ICIW ’07:Proceedings of the Second International Conference on Internet and Web Applications and Services,2007,p.29”中披露的为典型。但这些方法都存在一个共同的假设:服务的质量(QoS)是静态不变的。这种假设虽然简化了问题,但与现实的服务环境并不相符。在互联网环境下,新的Web服务每天都在不断产生;已有的Web服务可能暂时失效(如:由于网络故障);Web服务的QoS值(如响应时间,吞吐量)也会变化。相关Web服务调研的文章,如参考文献4“E.Al-Masri and Q.H.Mahmoud.Investigating web services on the world wide web.In WWW ’08,pages 795-804,New York,NY,USA,2008.ACM.”和参考文献5“J.Lu,Y.Yu,D.Roy,and D.Saha.Web service composition:A reality check.In Web Information Systems Engineering-WISE 2007,volume4831,pages 523-532.2007”,也否定了上述方法基于静态服务的假设,指出服务质量的动态性往往是不可避免的。在时刻T1满足查询请求R1的组合服务可能在另一时刻T2失效或QoS急剧下降,导致用户的请求无法顺利执行,给用户带来极差的用户体验。

对于网络环境或服务版本更新等因素而导致服务组合失效或服务质量严重下降等问题,一种容易想到的解决方法是根据查询请求对服务组合进行重新搜索,但这种方法显然会浪费计算资源,实时性低。

发明内容

本发明的目的是克服现有技术无法很好适应由于网络环境变化或服务版本更新、服务器故障等因素导致的服务组合失效或服务质量严重下降问题,从而提供一种支持持续查询的自动服务组合方法。

为了实现上述目的,本发明提供了一种支持持续查询的自动服务组合方法,包括:

步骤1)、根据用户提交的查询请求以及多个原子服务的输入参数、输出参数、原子服务间的匹配关系建立服务依赖图,由所述服务依赖图找出所述查询请求在第一时刻的最优服务组合结果;

步骤2)、在第二时刻,检测到所述多个原子服务中的一个或多个发生变化,更新这些发生变化的原子服务的状态,并将状态被更新的原子服务放入一集合中;其中,

所述原子服务的状态包括该原子服务的总服务质量值allQoS及该原子服务的输入参数的最优提供者信息;所述总服务质量值allQoS为从所述查询请求的查询输入参数开始到所在原子服务被调用后的服务质量值;

步骤3)、对所述集合中状态被更新的原子服务在所述服务依赖图中的后继服务结点的状态是否发生变化进行判断,将状态发生变化的后继服务结点所代表的原子服务保存在所述集合中,并更新所述服务依赖图;

步骤4)、查找步骤1)得到的第一时刻的最优服务组合结果中是否存在状态最终发生了变化的原子服务,若存在,根据所述更新后的服务依赖图找出在所述第二时刻的最优服务组合结果。

上述技术方案中,所述集合中的原子服务按照pqQoS值的优劣进行排序,所述pqQoS值为发生变化的原子服务变化前的总服务质量值allQoS值与变化后的新的总服务质量值newAllQoS中的较优值。

上述技术方案中,所述的步骤2)包括:

步骤2-1)、检测到所述多个原子服务中的一个或多个发生变化,对这些原子服务的类型进行判断,若所述原子服务发生失效现象,执行步骤2-2),若所述原子服务为新添加的原子服务,执行步骤2-3),若所述原子服务自身服务质量selfQoS变好或变坏,执行步骤2-4);

步骤2-2)、将发生失效现象的原子服务的newAllQoS的值置为表示不可触发的第一值,然后查看该原子服务原来的allQoS是否也为所述的第一值,若是,将该原子服务所代表的结点从所述服务依赖图中删除,结束本步骤;若不是,为该原子服务设置所述pqQoS值,并将该原子服务加入到所述集合中,结束本步骤;

步骤2-3)、将新添加的原子服务加入到所述服务依赖图中,然后将该原子服务的allQoS值置为所述的第一值,根据该原子服务的输入参数的最优的服务质量值optQoS与该原子服务自身的服务质量值selfQoS求该原子服务的newAllQoS值,接着判断该newAllQoS值是否为所述的第一值,若是,结束本步骤,否则,为该原子服务设置所述pqQoS值,并将该原子服务加入到所述集合中,结束本步骤;

步骤2-4)、在所述集合中查找是否存在自身服务质量selfQoS变好或变坏的原子服务,若存在,更新该原子服务的pqQoS值,结束本步骤;若不存在,判断该原子服务的变化前的总服务质量值allQoS值是否为所述第一值,若是,仅仅更新该原子服务本身的服务质量值selfQoS,不将该原子服务插入所述集合中,否则,为该原子服务设置所述pqQoS值,并将该原子服务加入到所述集合中,结束本步骤。

上述技术方案中,所述的步骤3)包括:

步骤3-1)、从所述集合中取出所述pqQoS最优的原子服务,如果该原子服务为代表所述查询请求的输出参数的结点,则将该原子服务的newAllQoS值赋予allQoS,然后重新执行本步骤,否则执行下一步;

步骤3-2)、判断该原子服务是allQoS变好的原子服务,还是allQoS变坏的原子服务,若是allQoS变好的原子服务,执行下一步,对于allQoS变坏的原子服务,执行步骤3-4);

步骤3-3)、将该原子服务的allQoS值发生变化的所述服务依赖图中的后继服务结点所代表的原子服务放入所述集合中,然后重新执行步骤3-1);

步骤3-4)、先将该原子服务的allQoS的值设置为所述第一值,然后将该原子服务的allQoS发生变化的所述服务依赖图中的后继服务结点所代表的原子服务放入所述集合中,接着求取该原子服务的新的总服务质量值newAllQoS,当该newAllQoS不为所述第一值,将该原子服务再次加入所述集合中,否则,将该原子服务所代表的结点从所述服务依赖图中删除,最后重新执行步骤3-1)。

上述技术方案中,在所述的步骤3-2)中,根据原子服务的newAllQoS值与allQoS值的优劣判断该原子服务是allQoS变好的原子服务还是allQoS变坏的原子服务,若原子服务的newAllQoS值优于该原子服务的allQoS值,该原子服务为allQoS变好的原子服务,否则为allQoS变坏的原子服务。

上述技术方案中,当所述服务质量为Positive类型,所述第一值为0,当所述服务质量为Negative类型,所述第一值为正无穷大。

本发明还提供了一种支持持续查询的自动服务组合系统,包括一次查询模块、动态服务的状态更新模块、后继服务的状态更新模块以及服务组合结果更新模块;其中,所述一次查询模块用于根据用户提交的查询请求以及多个原子服务的输入参数、输出参数、原子服务间的匹配关系建立服务依赖图,由所述服务依赖图找出所述查询请求在第一时刻的最优服务组合结果;

所述动态服务的状态更新模块用于在第二时刻,检测到所述多个原子服务中的一个或多个发生变化,更新这些发生变化的原子服务的状态,并将状态被更新的原子服务放入一集合中;其中,

所述原子服务的状态包括该原子服务的总服务质量值allQoS及该原子服务的输入参数的最优提供者信息;所述总服务质量值allQoS为从所述查询请求的查询输入参数开始到所在原子服务被调用后的服务质量值;

所述动态服务的状态更新模块用于对所述集合中状态被更新的原子服务在所述服务依赖图中的后继服务结点的状态是否发生变化进行判断,将状态发生变化的后继服务结点所代表的原子服务保存在所述集合中,并更新所述服务依赖图;

所述服务组合结果更新模块用于查找所述一次查询模块得到的第一时刻的最优服务组合结果中是否存在状态最终发生了变化的原子服务,若存在,根据所述更新后的服务依赖图找出在所述第二时刻的最优服务组合结果。

上述技术方案中,所述集合中的原子服务按照pqQoS值的优劣进行排序,所述pqQoS值为发生变化的原子服务变化前的总服务质量值allQoS值与变化后的新的总服务质量值newAllQoS中的较优值。

本发明的优点在于:

本发明避免了穷举搜索并保证了搜索出的组合服务结果一定是QoS最优的,而且,针对不同种类的动态服务,提出了一个新颖的避免重新查询的方法并重用以前的查询的中间结果信息来支持持续查询,保证了服务组合的自适应性。

附图说明

图1为在一个实施例中,本发明所涉及的服务依赖图的示意图;

图2为本发明所涉及的数据结构的示意图;

图3为在一个实施例中,在图1所示的服务依赖图的基础上做从前往后搜索的中间结果示意图;

图4为在一个实施例中,在图1所示的服务依赖图中找最优服务组合结果的反向搜索示意图;

图5为在一个实施例中,在图1所示的服务依赖图中找出的最优服务组合结果的单独示意图;

图6为在一个实施例中,另一个非最优的组合结果的示意图;

图7为在一个实施例中,在图1所示的服务依赖图的基础上增加新的服务后做持续查询的中间结果示意图;

图8为在一个实施例中,在图1所示的服务依赖图的基础上增加新的服务后得到新的最优服务组合结果的示意图

图9为在一个实施例中,本发明的支持持续查询的方法的流程图。

具体实施方式

在对本发明做详细说明前,首先对本发明中所涉及的相关概念进行说明。

服务:服务Wi表示成一个三元组(Iwi,OWi,Qwi)(1≤i≤N)。其中,Iwi、OWi分别代表服务输入参数、输出参数。Qwi是服务质量的集合,

动态服务:新添加的、已失效的,或者服务质量变好或变坏的原子服务都被称为动态服务。

服务质量(QoS):服务质量是服务的非功能属性,如price(价格)、response time(响应时间)、throughput(吞吐量)等都可以作为服务质量的参考指标。本发明将用于描述服务质量的指标分为四种类型:sum类型(如响应时间)、min类型(如吞吐量)、multiplication类型(如reputation声誉)、max类型。例如,求取k个顺序调用服务的总吞吐量,由于吞吐量属于min类型,因此总吞吐量的值等于这k个服务中最小的吞吐量,因为k个服务中最小的吞吐量是系统吞吐量的瓶颈。

另外,本发明还将用于描述服务质量的指标按照其值与服务质量好坏间的正反关系分为两类:一类是Positive:其值越大,服务质量越好,如吞吐量;另一类是Negative:其值越小,服务质量越好,如响应时间。

本发明中还可以将QoS分为selfQoS和allQoS,每个原子服务自身的服务质量记为selfQoS,而allQoS为若干个服务组合后的“合成服务/组合服务”的总服务质量。

参数匹配:对于来自服务的任意两个参数Pa,Pb,通过语义信息中的本体树来确定Pa、Pb之间的匹配关系。用Concept(Pa)、Concept(Pb)分别表示该两个参数对应的概念。当且仅当它们属于同一个概念,或者Concept(Pa)subClassof Concept(Pb)(subClassof表示子类),我们称Pa匹配Pb

服务匹配:服务匹配建立在参数匹配的基础上。如果任意两个服务Wa和Wb,存在则这两个服务可以匹配。

服务匹配又分为为完全匹配和部分匹配,分别对应下面两种关系:

则Wa完全匹配Wb

则Wa部分匹配Wb

在对本发明所涉及的一些基本概念作上述说明后,下面对本发明的实现原理加以介绍。

本发明首先通过图搜索的方式从大量的原子服务中找出满足某一查询要求的最优服务组合结果,然后对所述原子服务的服务质量进行监控,一旦发现有原子服务的增或减或已有原子服务的服务质量的变化,即存在动态服务,如果这些动态服务影响最优服务组合结果,就可以对服务和最优服务组合结果进行动态更新,否则,只需要更新服务。

下面结合图9对本发明的实现方法做详细的说明。

步骤10、根据用户的查询请求建立原子服务的依赖关系图。

在本发明中,对多个原子服务进行组合形成服务组合结果的起因在于用户发出了查询请求。在此将查询请求标记为R,将查询请求R的查询条件记为IR(也就是查询请求的输入参数),将查询请求R的查询结果记为OR(也就是查询请求的输出参数)。

在得到用户的查询请求后,就可以将该查询请求作为两个特殊节点添加到原子服务的依赖关系图(简称服务依赖图)。在图1中给出了服务依赖图的一个例子,在该图中,结点代表各个原子服务,每个结点具有的权重是该结点所代表的原子服务本身的QoS值(为理解和叙述的方便,以下服务质量均以响应时间为例。如在图1中仅仅将响应时间作为QoS值)。每个结点之前的输入箭头上的标记(如结点W6的输入箭头上的a)表示该结点所代表的原子服务的输入参数,每个结点之后的输出箭头上的标记(如结点W6的输出箭头上的g)表示该结点所代表的原子服务的输出参数。服务依赖图的建立还离不开前述持续查询的查询条件与所期待的查询结果,在图1中,结点Start代表查询请求R的查询条件IR,结点End代表查询请求R的查询结果OR。从对服务依赖图的描述看,该图实质是一个有向图。服务依赖图中各个原子服务间的匹配关系可以由图2中的两个反向索引表加以存储。反向索引表中的一项包括参数、服务列表两方面的内容。其中一个反向索引表中的各个项用于存储提供该参数的所有服务列表。另外一个反向索引表中的各个项用于存储需要此参数的所有服务列表。本质上,反向索引表记录服务之间的匹配关系,也即服务依赖图中的输入输出边。

在创建服务依赖图时,图中各个原子服务的输入参数、输出参数、QoS值等信息都是已知的,如在本发明的一个实施例中,可从WSDL(Web Service Definition Language)文件中提取出原子服务的输入、输出参数,从WSLA(Web Service Level Agreement)文件中采集原子服务的QoS信息。这些信息的获取可在一预处理步骤中实现,如图9中的步骤00。由这些信息创建服务依赖图的过程已经在本申请人于2009年申请的名称为《自动服务组合的系统及方法》、申请号为200910238520.5的中国专利申请中有详细的说明,该申请所提到的内容也包含在本发明中。

需要说明的是,一旦服务依赖图中所涉及的原子服务发生变化,如原子服务的增加或减少,抑或服务的输入输出参数发生变化,则该服务依赖图的结构就会发生相应的变化。此外,服务依赖图中各个结点的权重(即各个服务的服务质量)也可能发生变化。

步骤20、根据服务依赖图做一次查询,得到该服务依赖图中满足查询请求的最优服务组合结果,所得到的服务组合结果也被称为一次查询结果。

在本发明的一个实施例中,根据服务依赖图做最优服务组合结果查询时用到了图2所示的与服务结点有关的数据结构以及与参数(指服务的输入或输出参数)有关的数据结构。其中,与服务有关的数据结构中存储了该服务本身的QoS值(selfQoS)以及从查询输入IR开始至该服务被调用后的总QoS值(allQoS)。与服务有关的数据结构中还有一个count值,该count初始值是服务输入参数的数目,每当服务的一个输入参数被满足后,count值减一,当count值为零时,表明该服务被触发或称为可触发服务。与参数有关的数据结构保存了可以提供给本参数的最优QoS值(optQoS)及其对应的提供者(optProvider)。此外,在本发明的一个实施例中,还包括了两个用于存储服务结点或参数的数据结构,一是“触发服务堆”,它用来保存可被触发的原子服务,由于“堆”本身的特性,因此保存在“触发服务堆”中的原子服务都按照各个服务的服务质量allQoS进行排序;二是“可提供的参数集合”,该集合用于保存可提供给各个原子服务的参数。用于实现本发明的数据结构并不局限于上面所提到的,在其他实施例中,也可以采用其它类型的数据结构,只要能实现本发明的方法即可。

对一次查询所涉及到的相关数据结构做上述说明后,下面对一次查询的具体实现步骤加以描述:

步骤21、按照由前往后的搜索方式,找出可以被触发的服务,将它们保存在所述的“触发服务堆”中。最初,该堆中仅含有那些可以被IR直接触发的服务,然后转到下一步。

步骤22、判断堆是否为空,分为两种情况:

A、当堆不为空:每次从该堆中取出allQoS最好的服务。对于该服务的每一个输出参数(outputs),为该服务的输出参数更新最优的QoS值(optQoS)及对应的提供者(optProvider),并且根据该服务的每一个输出参数及反向索引表,找出需要它的服务,并将这些服务的count值减一。当某些服务的count值为变为零时,这些服务被触发,记录它们的allQoS值。然后将这些新触发的服务也加入触发服务堆中,转到步骤22的判断操作。

B、当堆为空时:

判断查询请求OR是否可触发,如果不可以触发,返回“无结果”,否则执行步骤23。

步骤23、查询请求R可以被满足,此时通过反向搜索找出最优服务组合结果。此处所述的反向搜索包括:从查询需要的参数OR开始,对于每一个参数,根据其最优的提供者,可以找出直接前驱,并记录它们之间的顺序;同理,对于最优提供者,根据它的每一输入参数,找出各自的最优提供者,直到IR为止,从而得到最优服务组合结果。

在得到最优服务组合结果后,一次查询处理即已完成。在本发明的一个实施例以及说明书附图中,都用有向无环图(DAG)来表示服务组合结果,但在其他实施例中,服务组合结果也可以用其它方式表示,如用BPEL(Business Process Executive Language,业务过程执行语言)来表示服务组合结果,我们的系统支持BPEL和DAG表示形式的转换。

上述一次查询的具体实现细节在本申请人于2009年申请的名称为《自动服务组合的系统及方法》、申请号为200910238520.5的中国专利申请中也有详细的说明,本领域技术人员可根据该申请中所公开的内容实现上述的一次查询。

步骤30、当原子服务发生动态变化时,做持续查询。

原子服务的动态变化可以分为以下几类:新添服务、失效服务、QoS变好的服务、QoS变差的服务(但未失效)。其中新添服务和失效服务会改变服务依赖图的结构,而QoS变好的服务、QoS变差的服务虽然不会改变服务依赖图的结构,但也可能会对服务依赖图中相关结点所代表的原子服务的状态产生影响,造成原子服务状态的更新。

具体的说,动态服务对其它服务的影响可以分为以下几类:(1)无影响;(2)一些服务从可触发状态变为不可触发;(3)一些服务从不可触发状态变为可触发;(4)一些服务输入参数的最优提供者(服务结点的前驱)发生变化,但是最优allQoS未变;(5)一些服务输入参数的最优提供者(服务结点的前驱)发生变化,最优allQoS亦发生变化。经过分析,本发明将后四种影响简化为两类(第一种影响不需要处理):服务allQoS变好、服务allQoS变坏。为使描述简单,下面的叙述均以QoS为响应时间为例,服务allQoS变好包含两种情况:X→X-L和+∞→X(0<L<X<+∞,X和L均为某一个数值),该公式中的“→”的左边代表以前的QoS值,“→”的右边代表最新的QoS值。该表达式表示服务的全局响应时间从X减小为X-L,或者从不可响应(不可触发)变为响应时间为X。服务allQoS变坏亦包含两种情况:X→X+L和X→+∞(0<L,X<+∞)。同理:该表达式表示响应时间从X变大为X+L,或者从X变为不可响应(不可触发)。

在更新原子服务状态时涉及到更新顺序,所述的更新顺序主要是解决如何避免多次更新受影响服务的问题。在Dijkstra算法(请参见参考文献6:E.W.Dijkstra,“A note on two problems in connexion with graphs,”Numerische Mathematik,vol.1,pp.269-271,1959)运行过程中,从源节点到其它结点的距离都是从+∞→X。在状态更新时,对于那些服务allQoS变好的那类服务,可以像Dijkstra算法一样类似处理,即每次移出allQoS最小的服务,处理其后继。对于那些服务allQoS变坏的那类服务,将其转化为第一类再处理:即将这些服务原来的allQoS置为+∞(不可触发)。

在本步骤中涉及到另外两个数据结构:newAllQoS和pqQoS。newAllQoS是动态服务发生后该服务新的allQoS值。pqQoS的取值是newAllQoS和allQoS中较小者。受影响的服务(即服务状态变化的服务)都将放入一个优先队列中,pqQoS越小者,受影响服务在该优先队列中的优先级越高。在图2中同样描述了这两个数据结构。

本步骤中做持续查询的基本思想是:首先判断动态服务是否会影响其它服务的状态(服务状态指的是:服务的allQoS值及输入参数的最优提供者信息),如果不会,则只需要更新服务依赖图的结构和动态服务的状态,如果会,除了更新服务依赖图和动态服务的状态外,还需要更新其它受影响的服务。大致思路是:以动态服务为起点执行由前往后的搜索直到后继服务结点的状态未变化为止,在此过程中,不断更新状态变化的服务。这些状态变化的服务称为“受影响的服务”。如果原来的组合结果无效或非最优,则反向搜索生成新的最优组合结果返回给用户。此方法的关键是“受影响的服务”状态的更新顺序,作为一种优选实现方式,本实施例在更新受影响服务的状态时,优先处理pqQoS值最小的服务。但在其他实施例中,也可以随机选择一个受影响服务进行状态更新,但这一更新顺序较本实施例中的更新顺序为次,它容易导致“受影响的服务”更新多次。下面对本步骤的具体实现做如下描述:

步骤31、首先处理动态服务,分为下面三个子步骤:

步骤31-1、将失效服务记为delS,置delS.newAllQoS为+∞。如果delS.allQoS也为+∞,直接从服务依赖图删除该结点。如果delS.allQoS不为+∞,delS.pqQoS=min(delS.newAllQoS,delS.allQoS),将delS插入到优先队列PQ中。

步骤31-2、将新添服务记为addS,将该服务加入到服务依赖图中,置addS.allQoS为+∞。根据addS的输入参数的optQoS求取addS.newAllQoS,即addS.newAllQoS=max(addS.inputs.optQoS)+selfQoS。如果addS.newAllQoS为+∞,不加入优先队列中,否则求取addS.pqQoS,然后插入到优先队列PQ中。

步骤31-3、将其它两类QoS变化的服务(即QoS变好或变坏的服务)都记为othS,首先在优先队列中找othS,如果已经存在,更新othS.pqQoS;如果不存在,判断othS.allQoS是否为+∞,如果是,不将othS插入优先队列中。否则求取othS.pqQoS,并将其加入到优先队列PQ中。

需要说明的是,在本实施例中,对动态服务的处理流程按照失效服务、新添服务以及QoS变好或变坏的服务的顺序进行处理,但实际上,对这些服务的处理流程并不要求遵循上述顺序,由于发生动态变化的原子服务的类型通常只是其中的一种,因此上述步骤只需要按照实际情况执行即可。即使发生动态变化的原子服务的变化类型包含之前提到的四种,在其他实施例中,上述三个子步骤可以同时执行,也可以以其他任意顺序执行。

步骤32、然后处理优先队列中的受影响的服务,直到优先队列为空,然后转到步骤33。具体的说,包括以下步骤:

步骤32-1)、从优先队列中取出当前pqQoS最小的服务,记为first。如果first是OR,firstQoS.allQoS=first.newAllQoS,然后重新执行本步骤,否则执行下一步;

步骤32-2、判断first是服务allQoS变好的服务(即first.newAllQoS<first.allQoS),还是服务allQoS变坏的服务(即first.newAllQoS>first.allQoS),如果是变好的服务,执行下一步,否则执行步骤32-4。

步骤32-3、first.allQoS=first.newAllQoS,然后处理first的后继,判断后继服务的allQoS是否变化,如果后继的服务allQoS发生变化,将那些allQoS发生变化(即allQoS!=newAllQoS)的后继放入优先队列中;如果不发生变化,不需要放入优先队列中。处理完first的后继后,重新执行步骤32-1。

步骤32-4、将first.allQoS的值置为+∞,执行下一步。

步骤32-5、处理first的后继,判断后继服务的allQoS是否变化:如果后继的服务allQoS因此发生变化,将那些allQoS发生变化(即allQoS!=newAllQoS)的后继放入优先队列中,如果不发生变化,不需要放入优先队列中。处理完first的后继后,执行下一步;

步骤32-6、求取first的新的allQoS值,如果first.newAllQoS不为+∞,将first再次加入到优先队列中,然后执行下一步,否则从服务依赖图中删除first结点,然后执行下一步。

步骤32-7、最后返回步骤32-1。

步骤33、更新服务组合结果。如果OR.allQoS为+∞,则无组合结果,返回Null。否则,判断原先的服务组合结果中是否存在allQoS且输入参数的最优提供者发生了变化的服务,如果是,则需要反向搜索新的服务组合结果并返回;如果不是,原先的服务组合结果仍然有效,且是全局QoS最好的服务组合结果,无需更新。

在上述操作中涉及到服务依赖图的更新,之前提到,在本发明的一个实施例中,服务依赖图是通过两个反向索引表存储的,利用这两个反向索引表也可以很方便地更新服务依赖图。

以上是对本发明方法的总体描述,下面结合图1所示的服务依赖图来说明本发明的具体实施细节。在图3中示出了从前往后搜索的相关步骤。具体如下:

步骤101、首先,将IR可以触发的服务W6、W2、W1加入“触发服务堆”中,并根据服务质量(allQoS)排序。W6、W1、W2的allQoS等于自身的QoS,分别是10、25、30ms。被触发服务的输出参数放在“可提供的参数表”中,该集合的初始值是:IR可以提供的参数a。此时,该参数的最优QoS、optQoS的值都为0,该参数的提供者为IR

步骤102、将“触发服务堆”中服务质量最好的服务W6(10)取出处理。“可提供的参数表”加入W6的输出参数g,它的最优QoS值为10,最优QoS提供者是服务W6(optProvider=W6)。

步骤103、将“触发服务堆”中服务质量最好的服务W2(25)取出处理。“可提供的参数表”加入W2的输出参数c,c的最优QoS值为25,提供者是W2。由于W9可以被W2触发,将其加入到“触发服务堆”。W9的allQoS为W2.allQoS加上W9.selfQoS,为55ms。

步骤104、将“触发服务堆”中服务质量最好的服务W1(30)取出处理。“可提供的参数表”加入W1的输出参数b,b的最优QoS值为30,提供者是W1。由于W3的所有输入参数都可以被触发,将其加入到“触发服务堆”。W3的allQoS为max(W2.allQoS+W1.allQoS)+W3.selfQoS,为70ms。

步骤105、将“触发服务堆”中服务质量最好的服务W9(55)取出处理。“可提供的参数表”加入W9的输出参数e,e的最优QoS值为55ms,提供者是W9。由于W5的所有输入参数都可以被触发,将其加入到“触发服务堆”。W5的allQoS为W9.allQoS+W5.selfQoS=75ms。

步骤106、将“触发服务堆”中服务质量最好的服务W3(70)取出处理。“可提供的参数表”加入W3的输出参数d,d的最优QoS值为70ms,提供者是W3。由于W4的所有输入参数都可以被触发,将其加入到“触发服务堆”。W4的allQoS为W3.allQoS+W4.selfQoS=100ms。

步骤107、将“触发服务堆”中服务质量最好的服务W5(75)取出处理。“可提供的参数表”加入W5的输出参数f,f的最优QoS值为75ms,提供者是W5。由于OR可以被触发,OR.allQoS为W5.allQoS=75ms。至此,OR已经可以满足。

步骤108、由于查询请求需要的信息f已经获得,前向搜索终止。

在完成前向搜索的基础上,可以通过后向搜索找出最优DAG。具体步骤是:

以OR为反向搜索的起始节点。OR包含的参数是f,由于f的最优服务质量的提供者是W5,故W5是OR的前驱,W5的后继是OR。W5的输入参数是e,e的最优服务质量的提供者是W9,故W9是W5的前驱。同理,W9的输入参数是c。参数c的最优服务质量提供者是W2,故W2是W9的前驱。又因为W2的输入参数是a。而它们的最优服务质量提供者是IR,故W2的前驱是IR。由此就能够得到最优DAG:IR→W2→W9→W5→OR

图4展示了图1通过后向搜索找出的结果,其中的虚线就表示其中的最优DAG。通过最优DAG中记录好的前驱关系,可以将组合结果表示成一个有向无环图(顺序链状路径是DAG的特例),如图5所示。虽然这个实例中的结果是路径path(DAG的一个特例),但并不说明只能是顺序链状才能是服务组合结果。如图6中示出了本实施例中所生成的另外一个使查询请求满足的服务组合结果,该服务组合结果就是一个DAG,而非路径path(path是DAG一种最简单的形式)。

当监测到一个新的服务Wnew产生时(图1中虚线圆圈所示),参考图7,持续查询的处理步骤如下:

步骤201、首先,将Wnew加入到服务依赖图中,更新反向索引表。求取Wnew.allQoS的值和Wnew.newAllQoS的值,分别为+∞,20ms。

步骤202、因为Wnew.newAllQoS不等于Wnew.allQoS,所以Wnew亦属于受影响的服务。求取Wnew.pqQoS=min(Wnew.allQoS,Wnew.newAllQoS)=20,然后将Wnew放入到优先队列PQ中。

步骤203、从优先队列PQ中移出当前pqQoS值最小的受影响的服务,即Wnew。故first=Wnew。因为Wnew是allQoS变好的服务,故直接更新Wnew的allQoS值为Wnew.pqQoS,然后处理后继。后继W9的allQoS因此发生变化,W9.newAllQoS=50,原先的值W9.allQoS=55,故W9也属于受影响的服务。W9.pqQoS=min(W9.allQoS,W9.newAllQoS)=50,然后将W9放入到优先队列PQ中。

步骤204、从优先队列PQ中移出当前pqQoS值最小的受影响的服务,即W9,故first=W9。因为W9是allQoS变好的服务,故直接更新W9的allQoS值为Wnew.pqQoS,然后处理后继。后继W5的全局QoS因此发生变化,W5.newAllQoS=70,原先的值W5.allQoS=75,故W5也属于受影响的服务。W5.pqQoS=min(W5.allQoS,W5.newAllQoS)=70,然后将W5放入到优先队列PQ中。

步骤205、从优先队列PQ中移出当前pqQoS值最小的受影响的服务,即W5。故first=W5。因为W5是allQoS变好的服务,故直接更新W5的allQoS值为Wnew.pqQoS,然后处理后继。后继OR的全局QoS因此发生变化,OR.newAllQoS=70,原先的值OR.allQoS=75,故OR也属于受影响的服务(注意:特殊情况,OR实际上不是服务)。OR.pqQoS=min(OR.allQoS,OR.newAllQoS)=70,然后将OR放入到优先队列PQ中。

步骤206、从优先队列PQ中移出当前pqQoS值最小的受影响的服务,即OR。故first=OR。因为OR是allQoS变好的服务,故直接更新OR的allQoS值为Wnew.pqQoS。

至此,由于优先队列PQ为空,反向生成新的组合结果。如图8所示。

本发明还提供了一种支持持续查询的自动服务组合系统,包括一次查询模块、动态服务的状态更新模块、后继服务的状态更新模块以及服务组合结果更新模块;其中,所述一次查询模块用于根据用户提交的查询请求以及多个原子服务的输入参数、输出参数、原子服务间的匹配关系建立服务依赖图,由所述服务依赖图找出所述查询请求在第一时刻的最优服务组合结果;

所述动态服务的状态更新模块用于在第二时刻,检测到所述多个原子服务中的一个或多个发生变化,更新这些发生变化的原子服务的状态,并将状态被更新的原子服务放入一集合中;其中,

所述原子服务的状态包括该原子服务的总服务质量值allQoS及该原子服务的输入参数的最优提供者信息;所述总服务质量值allQoS为从所述查询请求的查询输入参数开始到所在原子服务被调用后的服务质量值;

所述动态服务的状态更新模块用于对所述集合中状态被更新的原子服务在所述服务依赖图中的后继服务结点的状态是否发生变化进行判断,将状态发生变化的后继服务结点所代表的原子服务保存在所述集合中,并更新所述服务依赖图;

所述服务组合结果更新模块用于查找所述一次查询模块得到的第一时刻的最优服务组合结果中是否存在状态最终发生了变化的原子服务,若存在,根据所述更新后的服务依赖图找出在所述第二时刻的最优服务组合结果。

在本发明的方法和系统中,将求取最优服务组合结果转换成一个新的图搜索问题:单源结点最优DAG问题,更具体地说,在一个有权重的有向图中提取出一个QoS最优的有向无环图,该图以IR为初始结点,以OR为终止节点。在这一过程中,避免了穷举搜索并保证了搜索出的组合服务结果一定是QoS最优的,而且,针对不同种类的动态服务,提出了一个新颖的避免重新查询的方法并重用以前的查询的中间结果信息来支持持续查询,保证了服务组合的自适应性。

最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号