一种基于组合服务柔性描述模型的服务调用引擎方法与流程

文档序号:11388805阅读:266来源:国知局
一种基于组合服务柔性描述模型的服务调用引擎方法与流程

本发明属于互联网通讯技术领域,特别涉及一种基于组合服务柔性描述的服务调用引擎方法。



背景技术:

web服务作为一种潜在的分布式服务架构解决方案,在互联网上具有重大影响。按其实现技术不同,web服务可分为soap服务和rest服务;按其粒度大小不同,web服务又可分为原子服务和组合服务。原子服务是指可被独立调用且功能不可再分的web服务。组合服务是为了解决服务计算环境下原子服务功能过于单一,无法完成复杂业务流程需求的问题。为了发挥web服务应有的价值,通过将各个功能单一的原子服务,按照一定的业务逻辑进行组合,形成大粒度的、具有业务含义的组合服务,从而达到web服务增值的目的,即组合服务是由若干个原子服务组合而成可被独立调用的web服务。

服务描述模型是一组描述web服务接口和语义的文档,以服务语义、服务关系表述服务,是对于服务、服务接口及可交换信息的机器可处理描述。服务描述模型在服务发现、匹配、调用过程中起着至关重要的作用。原子服务描述模型主要包含原子服务的名称、功能描述、输入输出参数信息、调用方法等基本信息,组合服务描述模型除了包含上述基本信息外,还包含原子服务之间的组合关系信息。现有组合服务描述方法主要有基于petri网描述的组合服务描述模型、基于服务组合描述语言bpel4ws(businessprocessexecutionlanguageforwebservices)描述的组合服务描述模型、基于π演算的组合服务描述模型等方式。然而,现有组合服务描述模型的多样化、不同描述模型之间存在异构性,在实际应用中还有所欠缺,为组合服务发现、调用带来困难。

组合服务描述模型是服务计算领域的一个重要研究内容。目前,学术界为改善现有组合服务描述模型的不足,在组合服务描述模型方面已经有所研究:

张广泉等人提出了一种基于xyz/adl的web服务组合描述与验证方法,该方法从软件体系结构角度研究,基于软件体系结构描述语言xyz/adl和精化检验/模型检测方法,提出web服务组合描述与验证方法。聂世群等人提出一种基于接口匹配的组合web服务描述语言,主要根据wsdl(webservicesdescriptionlanguage)入手,分析web服务组合的类型和消息依赖关系,提出一种轻量级的组合描述语言cwsdl(compositewebservicedescriptionlanguage)。王龙等人提出一种基于扩展wsdl行为描述的web服务组合方法,该方法提供在wsdl中扩展服务行为描述的服务接口方案。

上述研究中,在现有组合服务描述模型基础上从服务发现、匹配效率方面去改善服务描述模型,未能从组合服务调用方面去改善服务描述模型来实现服务之间的更好的协同工作。



技术实现要素:

为了克服现有组合服务描述的不足,本发明主要从组合服务调用方面改善现有服务描述模型,提供了一种基于组合服务柔性描述模型的服务调用引擎方法。

本发明采用的技术方案是:一种基于组合服务柔性描述模型的服务调用引擎方法,其特征在于:包括如下步骤:

第一步:对已经发布在互联网上的soap服务和rest服务进行集成;

1.1、soap服务集成;首先通过人工手动收集wsdl或者爬虫程序爬取发布在互联网上的wsdl,其次对wsdl进行解析得到服务的具体描述信息并用soap服务柔性描述模型描述;

1.2、rest服务集成;采用人工获取或者爬虫程序爬取发布在互联网上的rest网页,对其解析提取出rest服务相关描述信息,至少包含服务的名称、功能、发布地址、输入参数、输出参数的信息;

第二步:对集成后的soap服务和rest服务采用柔性描述模型进行建模;

2.1、soap服务柔性描述模型;soap服务柔性描述模型为定义1,至少包含soap服务的基本描述属性、soap服务的输入参数、返回信息以及用来实现soap服务调用的soap请求体信息;

定义1:soap服务柔性描述模型是由基本描述属性、soap请求体、输入参数、返回信息组成的四元组;可形式化表示为如下形式

soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>。

●attributes描述服务的基本信息,至少包含服务的名称、类型、描述信息、发布地址、调用方法、来源;

●soaprequestbody来自于dom4j的java库解析wsdl文件,用来与soap服务器进行通信,实现soap服务的自动化调用;

●inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义;可形式化表述为inputparams=<param1,param2,…,paramn>;其中,param是一个二元组,由参数类型type、输入参数描述inputparamdes组成,即param=<type,inputparamdes>;

●outputparams描述了返回信息,包含返回信息的含义以及类型;可形式化表述为outputparams=<param1,param2,…,paramn>;其中,param是一个二元组,由参数类型type、输出参数描述outputparamdes组成,即param=<type,outputparamdes>;

其中,attributes是一个九元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>

id是每个服务的唯一标识符;url是服务发布的地址;servicetype是明服务类型,取值为soap或者rest;name是服务的英文名称;chiname是服务的中文名称;method是服务调用的方法,取值为post、get、put、delete;description是服务的功能描述;comefrom是服务的来源;area是服务所属的领域。

2.2、rest服务柔性描述模型;rest服务柔性描述模型为定义2,包含了rest服务的基本描述属性、rest服务的输入参数、返回信息以及用来实现rest服务调用的rest请求体信息;

定义2:rest服务柔性描述模型是由基本描述属性、输入参数、返回信息组成的三元组,可形式化表示为如下形式:

rest-fdm=<attributes,inputparams,outputparams>。

●attributes至少包含服务的名称、类型、描述信息、发布地址、调用方法、来源;

●inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义;

●outputparams描述了返回信息,包含返回信息的含义以及类型;

其中,attributes是一个十一元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,querytype,contenttype,name,chiname,method,description,comefrom,area>

其中,id是每个服务的唯一标识符;url是服务发布的地址;servicetype是明服务类型,取值为soap或者rest;querytype属性指明了rest服务的参数来源,至少包含以下几类标注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam;其中,@pathparam表明请求来自于url的路径,@queryparam表明请求自于url的查询参数;contenttype为浏览器端以编码格式接收返回结果;name是服务的英文名称;chiname是服务的中文名称;method是服务调用的方法,取值为post、get、put、delete;description是服务的功能描述;comefrom是服务的来源;area是服务所属的领域;

第三步:基于所述原子服务柔性描述模型,soap服务和rest服务调用方法如下:

3.1:soap服务调用方法;根据soap服务柔性描述模型,生成soap服务的请求体,将用户输入的信息与所生成的soap服务请求体进行拼接替换生成本次访问的、真实的soap请求体,并采用java语言的httpurlconnection类将该请求体发送至soap服务器,实现soap服务的调用;

3.2:rest服务调用方法;根据rest服务柔性描述模型,生成rest服务的请求体,将用户输入的信息与所生成的rest服务请求体进行拼接替换生成本次访问的、真实的rest请求体,并采用java语言的httpurlconnection类将该请求体发送至rest服务器,实现rest服务的调用;

第四步:在步骤一至步骤三的基础上,根据原子服务构成组合服务的组合情况,给出各类组合情况的定义;记ipi,opi分别为asi的输入参数,输出参数,ipj,opj分别为asj的输入参数,输出参数,f为输入参数与输出参数之间的依赖关系,则各类组合情况的定义如下:

定义3:顺序结构;对于原子服务asi,asj,若则asi→asj,即asi与asj之间是顺序结构依赖,asi为asj的儿子节点,asi为asj的父亲节点;

定义4:同步结构;对于原子服务as1、as2、…、asm以及asj,若则as1∧as2∧…∧asm→asj;

定义5:合并结构;对于原子服务as1、as2、…、asm以及asj,若则as1∨as2∨…∨asm→asj;

定义6:选择结构;对于原子服务asi以及as1、as2、…、asm,若则asi→as1∨as2∨…∨asm;

定义7:并发结构;对于原子服务asi以及as1、as2、…、asm,若则asi→as1∧as2∧…∧asm;

第五步:根据第四步所述原子服务构成组合服务的组合情况,结合定义1、定义2所述的原子服务柔性描述模型,给出组合服务柔性描述模型如下:

定义8:组合服务柔性描述模型是由基本描述属性、服务组合关系集合、服务节点集合组成的三元组;可形式化表示为如下形式:

cds-fdm=<attributes,links,nodes>;除了包含了组合服务的基本功能信息外,还包含了构成组合服务的原子服务组合信息以及对应的各个原子服务之间的参数匹配关系;其中:

●attributes至少包含服务的id、名称、描述信息、领域、来源;

●links节点内包含了各个原子服务之间的组合关系;可形式化描述为links==<father,child,and,or,end,parammatch>;其中,father代表组合关系可分为父节点关系;child代表组合关系可分为儿子节点关系;and为与操作,用来定义顺序结构、同步结构和并发结构;or为或操作,用来定义合并结构与选择结构;end描述了组合服务最终的输出节点;parammatch节点用来描述原子服务之间的输入输出参数依赖关系;

●nodes节点包含了该组合服务所涉及到的所有原子服务;

其中,attributes是一个七元组,可形式化表示为如下形式:

attributes=<id,name,chiname,description,area,comefrom,contenttype>

其中,id是每个组合服务的唯一标识符;name是服务的英文名称;chiname是服务的中文名称;description是服务的功能描述;area是服务所属的领域;comefrom是服务的来源;contenttype为浏览器端以编码格式接收返回结果;

第六步:根据所述组合服务柔性描述模型,给出组合服务调用引擎执行步骤:

6.1、发起原子服务调用请求;组合服务由有限个数的原子服务组合而成,用户选取组合服务中的某一个原子服务asi,输入asi所需的输入参数,发起调用请求;

6.2、调用判断;服务调用引擎接收到用户发起的调用请求,在组合服务缓存池中查找调用请求所属的组合服务网络,并判断asi是否满足以下调用条件之一,满足即可执行调用请求:

1)当asi不存在儿子节点时,判断asi执行所需的输入参数是否满足,若满足,则执行本次调用;若不满足,则将本次用户发起调用请求中的输入参数缓存到组合服务缓存池中该调用请求所属的组合服务网络,等待用户发起新的调用请求;

2)当asi存在儿子节点时,判断组合服务缓存池中asi的所有儿子节点是否都已执行完毕,若完毕,则执行本次调用;若未完毕,则将本次用户发起调用请求中的输入参数缓存到组合服务缓存池中该调用请求所属的组合服务网络,等待用户发起新的请求,将所有的儿子节点执行完毕;

6.3、执行调用请求;当步骤6.2服务调用引擎判断本次调用请求满足执行条件时,服务调用引擎发起模拟访问请求得到本次调用的返回结果,并将得到的返回结果更新到组合服务缓存池中该调用请求所属的组合服务网络中;

6.4、end输出节点判断;服务调用引擎判断本次调用的服务节点asi是否为组合服务的end输出节点,若为end输出节点,则输出本次调用结果;若非end输出节点,则执行步骤6.5;

6.5、对asi的所有父节点进行模拟访问,执行步骤6.2至6.4;

6.6、组合服务网络状态判断;当步骤6.5中asi的所有父节点、祖父节点、曾祖父节点等祖先节点都执行过步骤6.2至6.4,此时组合服务网络达到稳定状态,等待用户发起新的调用请求;当存在一个asi的祖先节点仍未执行完毕时,则组合服务网络处于演化推进状态,继续对asi的祖先节点执行步骤6.2至6.4,直到asi的所有祖先节点都执行过6.2至6.4,即组合服务网络达到稳定状态为止。

进一步地,所述步骤1.1中,wsdl解析过程如下:

1.1.1、获取wsdl文件的根节点definitions节点,解析出所有的service节点,service节点包含了服务的名称,其次解析出对应service节点下的port节点,port节点包含了服务的发布地址;

1.1.2、根据步骤1.1.1中解析得到的port节点去查找binding节点,binding节点用来描述服务的通信协议;

1.1.3、根据步骤1.1.2中解析得到的binding节点去查找porttype节点,porttype节点下每一个operation节点代表一个方法,每一个operation节点下都有一个input节点和output节点,分别代表该方法的输入与输出;

1.1.4、根据步骤1.1.3中解析得到的每一个operation节点下的input节点查找message节点,message节点用来描述通信消息数据结构的抽象类型化定义;

1.1.5、根据步骤1.1.4中解析得到的message节点下的part节点查找element节点;

1.1.6、根据步骤1.1.5中解析得到的element节点查找conplextype节点,conplextype节点下指明了步骤1.1.3中对应方法输入参数和输出参数的名称及其类型。

进一步地,所述步骤1.2中,rest服务网页解析过程如下:

1.2.1、爬取rest服务原始网页;利用爬虫引擎将发布在互联网上的rest服务原始网页抓取,获得html页面基础库,为后续的特征提取做好准备;

1.2.2、去噪;对html页面基础库中的页面进行去噪处理,过滤掉无关的内容,保留页面的主体部分;

1.2.3、分词去除停用词;对步骤1.2.2中所得的页面主体进行分词,将页面主体中的句子划分为词语并移除无意义的词语;

1.2.4、建立数据词典;至少建立表示输入、输出、标签、服务描述规则的数据词典;

1.2.5、特征提取;利用所建立的数据词典,在遍历网页过程中进行服务特征提取,包括服务的名称、服务的功能描述、服务的输入输出信息,并将特征提取后的服务存入web服务库。

进一步地,所述步骤3.1中,soap服务调用方法如下:

soap服务由于其柔性描述模型中的soaprequestbody属性记录了soap服务的请求体模板,该请求体模板基于xmlschema规范来描述,通过将用户输入的参数值与soap服务的请求体模板中对应的输入参数进行替换拼接,生成最终真实的soap服务的请求体,再通过将soap请求体发送至soap服务器端即可进行soap服务的自动化调用。

进一步地,所述步骤3.2中,rest服务调用方法如下:

rest服务根据其柔性描述模型中url属性指明了服务的发布地址,querytype属性指明了调用该服务的参数来自于http请求的哪个位置,method属性指明了调用服务的方法,根据这些信息,生成满足柔性描述模型要求的rest请求体,最后将该请求体发送至对应rest服务器端,进行rest服务的自动化调用。

本发明的有益效果如下:(1)本发明提供了一种便于服务匹配和服务调用的组合服务柔性描述模型;(2)基于所提出的组合服务柔性描述模型,利用该模型所记录的组合关系实现组合服务的调用;(3)简化编程流程,提高软件开发效率,提高软件的互用性。

附图说明

图1示出了soap服务和rest服务集成流程。

图2示出了rest服务网页信息爬取解析流程。

图3示出了soap服务和rest服务调用流程。

图4示出了soap服务柔性描述模型中的soaprequestbody属性。

图5示出了采用soap柔性描述模型描述的soap服务实例。

图6示出了采用rest柔性描述模型描述的rest服务实例。

图7示出了原子服务构成组合服务的组合情况图。

图8示出了采用组合服务柔性描述模型描述的组合服务实例。

图9示出了组合服务调用引擎执行流程图。

具体实施方式

下面对本发明作进一步说明,但本发明并不局限于以下实施例。

参照图1~图9,本发明提供的方法包括如下步骤:

第一步:对已经发布在互联网上的soap服务和rest服务进行集成,如图1所示;

1.1、soap服务集成;wsdl是soap服务的描述文档,描述了soap服务的方法名、发布地址、功能、输入输出参数等信息。首先通过人工手动收集wsdl或者爬虫程序爬取发布在互联网上的wsdl,其次对wsdl进行解析得到服务的具体描述信息并用soap服务柔性描述模型描述。

1.2、rest服务集成;rest服务大都采用基于自然语言的html文档来描述,为此,采用人工辅助或者爬虫程序爬取发布在互联网上的rest网页,对其解析提取出rest服务相关描述信息,如服务的名称、功能、发布地址、输入参数、输出参数等信息。

进一步,所述步骤1.1中,wsdl解析过程如下:

1.1.1、获取wsdl文件的根节点definitions节点,解析出所有的service节点,service节点包含了服务的名称,其次解析出对应service节点下的port节点,port节点包含了服务的发布地址。

1.1.2、根据步骤1.1.1中解析得到的port节点去查找binding节点,binding节点用来描述服务的通信协议。

1.1.3、根据步骤1.1.2中解析得到的binding节点去查找porttype节点,porttype节点下每一个operation节点代表一个方法,每一个operation节点下都有一个input节点和output节点,分别代表该方法的输入与输出。

1.1.4、根据步骤1.1.3中解析得到的每一个operation节点下的input节点查找message节点,message节点用来描述通信消息数据结构的抽象类型化定义。

1.1.5、根据步骤1.1.4中解析得到的message节点下的part节点查找element节点。

1.1.6、根据步骤1.1.5中解析得到的element节点查找conplextype节点,conplextype节点下指明了步骤1.1.3中对应方法输入参数和输出参数的名称及其类型。

进一步,所述步骤1.2中,rest服务网页解析过程,如图2所示:

1.2.1、爬取rest服务原始网页。利用爬虫引擎将发布在互联网上的rest服务原始网页抓取,获得html页面基础库,为后续的特征提取做好准备。

1.2.2、去噪。对html页面基础库中的页面进行去噪处理,过滤掉无关的内容,保留页面的主体部分。

1.2.3、分词去除停用词。对步骤1.2.2中所得的页面主体进行分词,将页面主体中的句子划分为词语并移除无意义的词语如“a”、“the”等词汇。

1.2.4、建立数据词典。建立表示输入、输出、标签、服务描述等规则的数据词典,如“请求参数说明”、“返回参数说明”、“请求方式”等。

1.2.5、特征提取。利用所建立的数据词典,在遍历网页过程中进行服务特征提取,包括服务的名称、服务的功能描述、服务的输入输出信息,并将特征提取后的服务存入web服务库。

第二步:对集成后的soap服务和rest服务采用柔性描述模型进行建模;

2.1、soap服务柔性描述模型;soap服务柔性描述模型见定义1,包含了soap服务的基本描述属性、soap服务的输入参数、返回信息以及用来实现soap服务调用的soap请求体信息等信息。

定义1:soap服务柔性描述模型(soapserviceflexibledescriptionmodel,soap-fdm)是由基本描述属性、soap请求体、输入参数、返回信息组成的四元组。

soap-fdm=<attributes,soaprequestbody,inputparams,outputparams>。

●attributes描述服务的基本信息,至少包含服务的名称、类型、描述信息、发布地址、调用方法、来源;

●soaprequestbody来自于dom4j等java库解析wsdl文件,用来与soap服务器进行通信,实现soap服务的自动化调用

●inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义;可形式化表述为inputparams=<param1,param2,…,paramn>;其中,param是一个二元组,由参数类型type、输入参数描述inputparamdes组成,即param=<type,inputparamdes>;

●outputparams描述了返回信息,包含返回信息的含义以及类型;可形式化表述为outputparams=<param1,param2,…,paramn>;其中,param是一个二元组,由参数类型type、输出参数描述outputparamdes组成,即param=<type,outputparamdes>;

其中,attributes是一个九元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,name,chiname,method,description,comefrom,area>

id是每个服务的唯一标识符;url是服务发布的地址;servicetype是明服务类型,取值为soap或者rest;name是服务的英文名称;chiname是服务的中文名称;method是服务调用的方法,取值为post、get、put、delete;description是服务的功能描述;comefrom是服务的来源;area是服务所属的领域;

2.2、rest服务柔性描述模型;rest服务柔性描述模型见定义2,包含了rest服务的基本描述属性、rest服务的输入参数、返回信息以及用来实现rest服务调用的rest请求体信息。

定义2:rest服务柔性描述模型(restserviceflexibledescriptionmodel,rest-fdm)是由基本描述属性、输入参数、返回信息组成的三元组。rest-fdm=<attributes,inputparams,outputparams>。

●attributes至少包含服务的名称、类型、描述信息、发布地址、调用方法、来源;

●inputparams描述了所需的输入参数信息,包括输入参数的个数、类型、含义

●outputparams描述了返回信息,包含返回信息的含义以及类型

其中,attributes是一个十一元组,可形式化表示为如下形式:

attributes=<id,url,servicetype,querytype,contenttype,name,chiname,method,description,comefrom,area>

与soap-fdm不同的是,rest-fdm中attributes多了querytype、contenttype这2个属性,用于rest服务的自动化调用,其他属性与soap-fdm类似,具体含义见表1所示;其中,id是每个服务的唯一标识符;url是服务发布的地址;servicetype是明服务类型,取值为soap或者rest;querytype属性指明了rest服务的参数来源,至少包含以下几类标注:@pathparam、@queryparam、@headerparam、@cookieparam、@matrixparam、@formparam。如:@pathparam表明请求来自于url的路径,@queryparam表明请求自于url的查询参数;contenttype为浏览器端以编码格式接收返回结果,如:application/json表示服务调用后的返回信息将以json格式返回;name是服务的英文名称;chiname是服务的中文名称;method是服务调用的方法,取值为post、get、put、delete;description是服务的功能描述;comefrom是服务的来源;area是服务所属的领域。

表1-属性表

第三步:基于所述原子服务柔性描述模型,soap服务和rest服务调用方法如图3所示:

3.1:soap服务调用方法;根据soap服务柔性描述模型,生成soap服务的请求体,将用户输入的信息与所生成的soap服务请求体进行拼接替换生成本次访问的、真实的soap请求体,并采用java语言的httpurlconnection类将该请求体发送至soap服务器,实现soap服务的调用。

3.2:rest服务调用方法;根据rest服务柔性描述模型,生成rest服务的请求体,将用户输入的信息与所生成的rest服务请求体进行拼接替换生成本次访问的、真实的rest请求体,并采用java语言的httpurlconnection类将该请求体发送至rest服务器,实现rest服务的调用。

进一步,所述步骤3.1中,soap服务调用方法如下:

soap服务由于其柔性描述模型中的soaprequestbody属性记录了soap服务的请求体模板,该请求体模板基于xmlschema规范来描述,通过将用户输入的参数值与soap服务的请求体模板中对应的输入参数进行替换拼接,生成最终真实的soap服务的请求体,再通过将soap请求体发送至soap服务器端即可进行soap服务的自动化调用。如图5所示,图5是一个采用soap-fdm描述的soap服务实例,该soap服务来自webxml,其功能是查询手机号码归属地,用户输入手机号码,返回该手机号码归属地信息。描述该soap服务的wsdl地址为http://ws.webxml.com.cn/webservices/mobilecodews.asmx?wsdl。图5中的soaprequestbody属性记录了该soap服务与soap服务器进行通信的soap请求体信息。通过获取用户的输入并将该输入信息与soaprequestbody进行拼接替换,生成最终对应本次请求的soap请求体,最后将该请求体发送至服务器端即可实现soap服务的自动化调用。

进一步,所述步骤3.2中,rest服务调用方法如下:

rest服务根据其柔性描述模型中url属性指明了服务的发布地址,querytype属性指明了调用该服务的参数来自于http请求的哪个位置,method属性指明了调用服务的方法,如get等信息,根据这些信息,生成满足柔性描述模型要求的rest请求体,最后将该请求体发送至对应rest服务器端即可进行rest服务的自动化调用。如图6所示,图6是一个采用rest-fdm描述的github服务实例,该服务的功能是查询github中都有哪些用户关注了github用户,用户通过输入要查询的github用户名,返回该github用户名下被关注的其他github用户名,该服务的发布地址url为:https://api.github.com/users/{user}/followers。其中{user}代表该服务的输入参数,同时也代表了该服务querytype为@pathparam类型,即该服务的输入参数来自于url的路径。调用的方法为get请求。通过获取用户的输入信息,即所要查询的github用户名,将得到输入查询信息与url信息进行拼接替换,如用户输入了“michael”,则生成的最终访问的链接为https://api.github.com/users/michael/followers,再生成满足该服务柔性描述模型要求的rest请求体,将该请求体发送至对应服务器,即可完成rest服务的自动化调用。

第四步:在步骤1至步骤3的基础上,根据原子服务构成组合服务的组合情况,给出各类组合情况的定义。记ipi,opi分别为asi的输入参数,输出参数,ipj,opj分别为asj的输入参数,输出参数,f为输入参数与输出参数之间的依赖关系,则各类组合情况的定义如图7所示:

定义3:顺序结构。对于原子服务asi,asj,若则asi→asj,即asi与asj之间是顺序结构依赖,asi为asj的儿子节点,asi为asj的父亲节点。

定义4:同步结构。对于原子服务as1、as2、…、asm以及asj,若则as1∧as2∧…∧asm→asj。

定义5:合并结构。对于原子服务as1、as2、…、asm以及asj,若则as1∨as2∨…∨asm→asj。

定义6:选择结构。对于原子服务asi以及as1、as2、…、asm,若则asi→as1∨as2∨…∨asm。

定义7:并发结构。对于原子服务asi以及as1、as2、…、asm,若则asi→as1∧as2∧…∧asm。

第五步:根据第四步所述原子服务构成组合服务的组合情况,结合定义1、定义2所述的原子服务柔性描述模型,给出组合服务柔性描述模型如下:

定义8:组合服务柔性描述模型(combinationalserviceflexibledescriptionmodel,cs-fdm)是由基本描述属性、服务组合关系集合、服务节点集合组成的三元组。cds-fdm=<attributes,links,nodes>。除了包含了组合服务的基本功能信息外,还包含了构成组合服务的原子服务组合信息以及对应的各个原子服务之间的参数匹配关系。具体各属性含义见表2。

●attributes至少包含服务的id、名称、描述信息、领域、来源;

●links节点内包含了各个原子服务之间的组合关系;可形式化描述为links==<father,child,and,or,end,parammatch>。其中,father代表组合关系可分为父节点关系;child代表组合关系可分为儿子节点关系;and为与操作,用来定义顺序结构、同步结构和并发结构;or为或操作,用来定义合并结构与选择结构;end描述了组合服务最终的输出节点;parammatch节点用来描述原子服务之间的输入输出参数依赖关系;

●nodes节点包含了该组合服务所涉及到的所有原子服务。

其中,attributes是一个七元组,可形式化表示为如下形式:

attributes=<id,name,chiname,description,area,comefrom,contenttype>

其中,id是每个组合服务的唯一标识符;name是服务的英文名称;chiname是服务的中文名称;description是服务的功能描述;area是服务所属的领域;comefrom是服务的来源;contenttype为浏览器端以编码格式接收返回结果;

表2-属性表

以图8为例,图8描述了一个基于顺序结构的组合服务柔性描述模型,由2个原子服务组合构成,分别是id为0的“加1服务”as0和id为1“平方服务”as1,as0的功能是对输入的数进行加1操作,as1是对输入的数进行平方操作。在图9中,as0是as1的儿子节点,即as0→as1。该组合服务的id为“20170426133922”,英文名称为“addoneandsquare”,中文名称为“加1再平方”,领域和来源为“计算”,功能为“对输入的数加1再平方”。nodes节点描述了构成组合服务的原子服务id,分别为“0”和“1”,“0”代表as0的id,“1”代表as1的id。links节点描述了原子服务的组合关系,links中的属性为“end”的节点描述了该组合服务的输出节点为id为1的原子服务,即as1。links中的属性为“1”的节点描述了平方服务的父亲节点为“end”节点,即它自身,儿子节点为id为0的节点。links中的属性为“0”的节点中的“child”属性中的“or”属性和“and”属性都为空数组,代表该服务节点没有儿子节点。属性为“0”的节点中的“father”属性中的“and”属性指向id为“1”的原子服务节点,即as0为as1的儿子节点,且“parammatch”属性描述了参数匹配关系为的as0输出参数sum将作为as1的输入参数num。

第六步:根据所述组合服务柔性描述模型,给出组合服务调用引擎执行步骤,如图9所示:

6.1、发起原子服务调用请求;组合服务由有限个数的原子服务组合而成,用户选取组合服务中的某一个原子服务asi,输入asi所需的输入参数,发起调用请求。

6.2、调用判断;服务调用引擎接收到用户发起的调用请求,在组合服务缓存池中查找调用请求所属的组合服务网络,并判断asi是否满足以下调用条件之一,满足即可执行调用请求:

3)当asi不存在儿子节点时,判断asi执行所需的输入参数是否满足,若满足,则执行本次调用;若不满足,则将本次用户发起调用请求中的输入参数缓存到组合服务缓存池中该调用请求所属的组合服务网络,等待用户发起新的调用请求。

4)当asi存在儿子节点时,判断组合服务缓存池中asi的所有儿子节点是否都已执行完毕,若完毕,则执行本次调用;若未完毕,则将本次用户发起调用请求中的输入参数缓存到组合服务缓存池中该调用请求所属的组合服务网络,等待用户发起新的请求,将所有的儿子节点执行完毕。

6.3、执行调用请求;当步骤6.2服务调用引擎判断本次调用请求满足执行条件时,服务调用引擎发起模拟访问请求得到本次调用的返回结果,并将得到的返回结果更新到组合服务缓存池中该调用请求所属的组合服务网络中。

6.4、end输出节点判断;服务调用引擎判断本次调用的服务节点asi是否为组合服务的end输出节点,若为end输出节点,则输出本次调用结果;若非end输出节点,则执行步骤6.5。

6.5、对asi的所有父节点进行模拟访问,执行步骤6.2至6.4;

6.6、组合服务网络状态判断;当步骤6.5中asi的所有父节点、祖父节点、曾祖父节点等祖先节点都执行过步骤6.2至6.4,此时组合服务网络达到稳定状态,等待用户发起新的调用请求;当存在一个asi的祖先节点仍未执行完毕时,则组合服务网络处于演化推进状态,继续对asi的祖先节点执行步骤6.2至6.4,直到asi的所有祖先节点都执行过6.2至6.4,即组合服务网络达到稳定状态为止。

最后,需要注意的是,以上列举的仅是本发明的具体实施例。显然,本发明不限于以上实施例,还可以有很多变形。本领域的普通技术人员能从本发明公开的内容中直接导出或联想到的所有变形,均应认为是本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1