摘 要: 针对如何更高效和准确地将已存在的Web服务集成到业务流程中,提出了服务构件模型。该模型以Web服务为业务功能实现的基础,用BPMN建模用户需求,输出为可执行的BPEL模型。该服务构件模型内部对原子服务进行了重新定义,便于服务的查找;而且加入了服务的QoS特征,便于服务的选择。
关键词: Web服务;业务流程管理;BPMN;BPEL
企业应用的复杂度越来越大,关键性遗留系统也越来越多,为了解决因遗留系统而出现的信息孤岛、企业间的业务交互以及数据共享等问题,面向服务架构SOA(Service-Oriented Architecture)、业务流程管理BPM(Business Process Management)以及Web服务等技术得到了很大的发展,并且相关的实现技术也日益成熟[1]。
Web服务是SOA的主要实现技术,它提供了标准的访问接口以便在服务调用及组合方面变得更加方便[2]。目前,存在大量可用的Web服务,包括企业内部的、商用的以及开源的,它们各自有优势,怎样选择一个能够满足业务需求以及非功能需求的服务便是一个比较难的问题。现在的应用系统在业务上变得越来越复杂,这些业务不只是针对于本系统,还可能与其他系统,特别是与其他公司的系统进行交互。由此,针对于每一项业务过程,都需要有一个标准的描述方式,这样的流程描述不只是针对于业务分析人员,也要便于开发人员能够在程序中直接应用。业务流程管理很大的用途或特点在于对Web服务的编排[3],根据需求,按照某种逻辑或者规则将存在的Web服务组装成一个可执行的流程,该流程可以通过Web服务的接口标准暴露成为流程服务供其他应用调用,也可以作为一个流程的子流程。目前,已存在很多的业务流程规范,主要分成两个类别,一个是基于可视化图形的,如BPMN、BPML、XPDL等;另一个是基于块结构的语言,如WS-BPEL,可以直接被流程引擎执行。经过实际的应用和验证,WS-BPEL已经成为事实上业务流程运行时描述语言的标准,是专门为Web服务编排和组合描述而定制的一种规范标准[4]。目前,很多执行引擎都支持BPEL,并且也存在相关的图形编辑工具以减少BPEL建模的复杂度[5]。然而,各个建模工具实现方式各不相同,对BPEL各个元素的图形表示也没有一个统一的标准定义,再则,BPEL属于块结构语言,对于业务流程的分析与设计人员显得比较抽象和晦涩。基于这样的问题以及为了提高业务人员对业务流程的建模效率,业务流程建模符号BPMN(Business Process Modeling Notation)被正式提出为标准[6]。它定义了各个元素的图形表示,便于业务人员更好地理解。
基于以上提出的在业务和功能上的需求以及可用的建模方法和工具,本文提出了一种服务构件模型,它通过BPMN来描述业务需求,然后从大量的Web服务中选择满足要求的服务进行绑定,最后生成可执行的BPEL模型以及流程服务。主要是设计一种完整的流程模型来描述用户调用Web服务的需求、服务的匹配和绑定以及可执行流程的生成。用户只需要将BPMN文件提交到模型中,处理后便可以自动地部署对应的可执行流程服务,然后在执行引擎中运行。
本文提出的服务构建模型是以Web服务为基础的,这些Web服务可能来自不同的提供者,可能是本公司的系统,也可能是其他合作者提供的服务,比如对于电子商务网站而言,一些业务流程中的服务就会来自于其他公司,如第三方支付服务、物流服务等。对于要调用这些Web服务的客户端,必须先通过BPMN进行需求建模,BPMN模型以图形符号的形式描述了客户端的功能需求。随后,该BPMN会被切分成原子服务,该原子服务的格式是在WSDL基础上重新定义的,与服务库里的服务格式相同;服务库里的服务是通过在线抓取和人工录入的形式完成的,这些服务都是以WSDL进行描述,通过与BPMN原子服务切分方式一样的形式进行WSDL的解析。最后形成的原子服务是以接口方法为单位的,这样在服务的匹配中就会减少由于每个接口存在多个方法的干扰。整个模型中都是以原子服务为基础,因此,以下对原子服务的定义进行了详细的说明并且给出了相应的xml格式。
1 原子服务
原子服务AS为一个6元组,形式如下:
AS:<RSc,FSc,FBSc,Sign,FuncR NonFuncR>;
其中Rsc为原子服务所属源服务的WSDL。Fsc是由方法表示的服务,形式为ServiceName(in:U,out:V),U为服务的输入变量,V为服务的输出变量。FBSc为该原子服务调用时的条件限制,形式为<PreCondition,PostCondition>,分别表示为服务调用的前置条件和后置条件。Sign为服务标示,形式为<Type,URL>,其中Type表示服务所属的类型,Type ∈(Local Service,Partener Service,Openservice),表示该服务所属的类型,分别为本地服务、伙伴服务以及开源服务;URL表示该服务调用的地址。FuncR为该原子服务的属性定义,形式为<Desc,Class,Domain,In,Out>,Desc表示服务的描述信息;Class表示该原子服务所属源服务的名称,因为原子服务由源服务接口的方法生成的,而一个接口包含了多个方法,所以这些方法都属于统一Class;Domain表示该服务所属的域,也就是可调用服务的名字空间;In表示服务的输入;Out表示服务的输出。NonFuncR为该服务的非功能性描述,形式为<ResponseTime,Availability,Invocation,Cost,Rank,Level>,其中,ResponseTime为发送请求到接收响应的时间;Availability为成功调用的服务次数与调用的总次数的比例,aavailability∈[0,1];Invocation为单位时间内(1 min)服务的调用次数,Invocation∈[0,1];Cost为调用该服务的费用;Rank为用户满意度,用1~5之间的整数表示,数值越大满意度越高;Level为服务等级,形式为[LocalService=2,PartnerService=1,OpenService=0],值越大等级就越高,当服务库里有多个能满足需求的服务时,优先选择的顺序为LocalService、PartnerService、OpenService。
以上便是对原子服务的定义,主要是依据WSDL中PortType的operation元素为主体进行定义,该服务的视图形式为XML文档,如图1所示,唯一的改进就是在此基础上增加了NonFuncR元素表示服务的非功能性特征,当出现多个服务满足需求时进行服务的选择。对于BPMN文档的解析也是依据该原子服务的格式进行切分的,然而,在切分时只关注于功能的调用部分,即重点是切分出FuncR数据。
2 服务构件模型层次结构
本文研究的服务构件模型会涉及到多个方面,以上给出的原子服务是整个模型的基础,图2中以分层的形式显示了该模型涉及到的功能模块结构,从底层的服务构件发布到上层流程应用的部署和调用。
图2中,基础服务层作为整个服务模型的基础,利用SCA框架将组件暴露为Web服务,为服务流程的各个业务需求提供功能接口;服务解析层根据原子服务格式将需求的BPMN模型以及服务库的WSDL进行解析;服务匹配层主要是对功能性需求进行匹配,如果出现多个服务时,利用其QoS属性选择一个最优的;最上层便是面向用户的接口层,是将服务匹配成功后通过模型转换生成的BPEL部署到执行引擎中。
3 服务构件模型流程
图2显示了模型的层次图,包含了具体的服务模块以及相应的操作,下层对上层提供接口或服务。模型层次图只是在总体上显示了模型执行的各个阶段,并没有给出模型内部具体的执行细节。图3表示服务构件模型的流程,该流程描述了用户进行业务功能访问时的内部运行流程。
图3显示了用户依据业务需求进行服务的调用,在BPMN需求模型中,需要实现的功能都是由Web服务完成的。绑定的服务都是来自于本地服务库,该服务库在原来的基础上增加了服务的QoS属性,便于在多服务中的选择。服务库的更新和用户请求的处理是同时进行的,两者是不同的进程,因此,整个服务构件模型的实现都是部署在服务端,客户端只需要在应用程序中通过相应的接口或者在客户端界面上提交BPMN的XMI文件即可完成服务的自动匹配和BPEL的生成。
本文从整体上分析与设计了服务构件模型,该模型利用BPMN为需求建模,BPEL为输出模型,Web服务为功能需求提供实现接口。在设计中,对原子服务进行了重新定义使其能更好地完成服务匹配的要求;并且给出了该模型的层次图以显示该模型执行的各个阶段,每一个阶段都相对独立;最后还给出模型的执行流程完整地描述了服务调用的整体流程。该模型的提出为接下来的工具实现奠定了理论基础,对于接下来要实现的工具,会增加服务的形式化来实现服务查找和选择的智能性。该工具会部署在服务器端,通过该工具可以方便地进行Web服务的调用。
参考文献
[1] 梁爱虎.SOA思想、技术与系统集成应用详解[M].北京:电子工业出版社,2007.
[2] 高哲.基于SOA的软件架构的研究与应用[D].武汉:武汉理工大学硕士研究生论文,2007.
[3] 刘华峰,胡元岭.基于Web服务的业务流程管理(BPM)的实现方法[J].机电产品开发与创新,2009,22(3):68-69.
[4] 吴丽贤,和力.基于BPMN的Web服务合成框架[J].开发案例,2009(301):171.
[5] 胡燕梅,邱锦伦.用BPMN辅助整合Web Service[J].计算机工程与设计,2007,28(19):4785-4786.
[6] 秦天保.从BPMN到可执行业务流程建模[J].计算机应用,2006(26):266-267.