基于异构服务组装的调度方法

(整期优先)网络出版时间:2019-01-20
/ 3
摘 要:异构服务组装是指在分布式环境下,将基于不同架构标准的服务,根据统一的基于XML 的服务组装描述文档进行自动组装,形成功能更强、更大的服务或应用的软件复用方法。本文研究并设计了一个面向异构服务组装的基于工作流引擎的异构服务调度引擎,并对其中的关键技术和模块做出了详细的说明。

关键词:异构服务 服务组装 调度引擎
一、引言

随着基于网络计算平台的分布式计算技术的迅猛发展。以支持应用互操作的应用需求为核心,以面向对象技术为主要特征的分布式构件技术和异构的服务技术得到了蓬勃发展,在开发大型分布式应用系统中表现出了强大的生命力,逐渐形成了三种具有代表性的主流技术,即OMG组织的CORBA、Microsoft公司的COM/DCOM,Sun公司的JavaBean/EJB[3]。

针对服务的分布与异构特性,基于各种应用需求,本文提出了异构服务组装的概念。异构服务是指Web 服务[1]、EJB、CORBA、COM/DCOM 等技术规范在内的多种能够经由网络访问的,并能被用户远程调用的分布式软件构件提供的服务。异构服务组装是尽可能大的将分布在广域网中的Web 服务、EJB、CORBA、COM/DCOM 等各种服务无缝整合起来,完成软件的开发及复用[4]。本文设计了一种基于异构服务组装的调度引擎架构,并详细阐述了此架构的实现。

二、异构服务组装调度引擎架构

异构服务组装调度引擎需要有以下一些基本功能:

(1)易操作性:提供友好的用户界面使管理人员(软件开发人员)和使用web 浏览器的远程用户均可方便操作。(2)可扩展性:可不断支持新的网络资源类型,扩大可组装服务范围。(3)自动化:组装过程完全自动化,无须人工驱动服务流程。引擎结构[2]可分为三个层次:界面层、应用层和资源层。界面层用于提供用户和管理人员可视化组装流程,并可监控流程运行状态和步骤。应用层是引擎的核心,它用于定制流程的驱动方式,完成流程实例的运行任务。资源层是为应用层提供资源支持,包括异构服务流程描述文档库和各种异构服务资源。其特性有:

屏蔽异构:网络中异构服务架构不同,远程调用机制不同,用户无法了解所有服务调用方法。在此,用户无需了解服务调用规范和机制细节,只需提供服务参数配置信息即可完成服务的远程调用。

异构服务资源动态绑定:用户无需关心服务的物理地址和服务的内部架构。服务在运行时动态完成远程服务绑定,即在运行时将服务映射成相应的服务实体。用户可以通过引擎自动绑定服务资源和接口,而无需了解服务细节。

服务之间松耦合:网络中的资源不稳定、易失,我们无法保证其在规定时间内的可用性,这种不稳定性意味着服务之间必须松耦合。本引擎采用多任务表模式来组装服务,以支持异构服务之间的松耦合、可扩展性。

架构易于扩展:网络服务资源种类繁多,引擎应能够支持、容纳新类型的服务。当引擎支持一种新服务种类时无需改动整个引擎,添加新的异构服务实例调用接口即可。

三、异构服务调度引擎设计

异构服务调度引擎为异构服务运行实例提供了执行环境,它是整个异构服务组装系统的核心。因此,异构服务调度引擎的好坏直接影响到异构服务组装的执行效率和可扩展性。

本系统使用自定义的基于XML 的异构服务统一发布与描述语言。异构服务调度引擎根据生成的异构服务组装流程定义文档,将其解析生成流程调度任务表,然后通过异构服务调用代理完成调用。

1.解析器

异构服务组装流程定义文档解析器将装载、解析用户提交的流程定义文档,采用存储有向图节点的方式,将流程中的每一个节点信息(node information)分别存储在流程调度控制表(PSaCL: Processes Scheduling and Controlling List)和服务参数配置表(PCoFL: Parameter Configuration of Services List )中,这两个表分别存储在流程调度库和服务实例库中。

2.流程调度多任务表模式

流程调度任务表用来管理每个服务实例的调度信息,采用工作流多任务表模式,将流程定义文档中的服务组装流程信息与服务实例调用信息分别管理,此任务表是由解析器解析生成的。通过解析器将每个任务表项分解。

(1)流程调度控制表

流程调度控制表存储服务组装流程信息,保存流程中每个服务实例待处理记录及服务实例处理的历史记录,所有的流程调度控制表都被存储在流程调度库中。流程调度控制表的结构为:PSaCL(ProcessID, ServiceID, ServiceInstanceID, ServiceInstanceSatus,Pre_condition[],Post_condition[],Candidate)

ProcessID:服务流程ID,服务实例所在流程的ID;ServiceID:服务ID,用于区别不同的服务;ServiceInstanceID:服务实例ID,同一个服务可以有多个运行实例,该字段用于标识同一服务的不同实例;ServiceInstanceSatus:服务实例状态,标志服务实例的当前状态。其状态包含:激活(active)、运行(running)、等待(waiting)、中断(terminated)、结束(finished)、失效(invalid);Pre_condition[]:前驱条件,这是一个数组,用来记录服务实例运行所需的所有前驱条件信息,包括前驱节点是否正常运行完毕,用户认证信息,安全认证等;Post_condition[]:后继条件,也是一个数组,记录服务实例正常运行结束后应触发的条件信息,包括后继服务的触发,权限的传递等;Candidate:候选标识位,当服务选取有多个满足条件时,用于表示该服务是否为候选服务,按照服务质量降序排列,首选服务标志位为0。(2)服务参数配置表


服务参数配置表存储服务实例调用信息,保存服务实例调用所需要的所有参数、操作信息以及认证信息,所有的服务参数配置表均被存储在服务实例库中。服务参数配置表的结构为:PCoFL(ServiceInstanceID,ServiceType, ServiceConfi guration{},SecurityCertification,

IdentityCertification,QoS, ExpireTime)

ServiceInstanceID:服务实例ID,与流程调度控制表中服务实例ID 相同,用于映射流程调度控制表项与服务参数配置表项的对应关系;ServiceType:服务类型,区别不同架构服务标志位,服务架构包括:Web Service、EJB、CORBA、COM/DCOM 等;ServiceConfiguration{}:服务配置信息,采用嵌套表结构,包含服务实例详细配置信息。包括参数类型、名称,参数转换,参数传递约束,服务调用约束条件等;SecurityCertification:安全认证,用于调用服务实例时的安全认证;IdentityCertification:身份认证,用于访问服务实例服务器端的用户身份认证;QoS:服务质量,基于服务响应时间等属性的评价服务优劣的标准;ExpireTime:响应超时阈值,单次服务实例请求响应最大时间。

3.会话管理器

会话管理器是用于处理服务间的通信问题的。会话管理器分为两个部分,一个是加载器,解决服务调用时参数名称、参数类型等格式不匹配问题,将服务参数配置表中的参数信息转化成编译器能够识别的格式,发送给实例调用驱动器。

另一个是消息返回处理器,是会话管理器一个重要的组成部分。采用异步通信机制,能够保证服务相互通信时,时间上可以不相关,即前驱服务应用发送消息时不必关心其后继服务应用的是否在线。根据流程调度多任务表模式,采用发布/订阅(Publish/Subscribe)模型,即当引擎判断可以向某个服务提出请求后,异构服务调用代理向远程服务器发送请求,请求调用相应服务,但无需等待服务器处理请求,只需保证请求到达服务器端后,就可以处理其他任务了。而服务器端返回消息将被保存在一个消息队列中,队列根据服务属性的Post_condition[]项,将消息传给所有后继服务。

4.流程驱动机制

根据多任务表模式,采用任务推动式流程驱动机制,对流程调度库中的流程调度表项循环遍历,判断是否有就绪服务实例满足调用条件。流程的驱动不严格依赖流程的顺序,每个服务只要满足调用条件即可运行,而不必关心流程是否运行到此。当有消息从消息队列中发送到流程调度管理器中,便触发对流程调度管理器中表项的遍历,查看是否有前驱条件均满足并自身状态为就绪的服务表项。将满足条件的服务参数配置信息加载至服务加载器中,等候调用。其特点是当流程中某个服务请求失败,与此服务无关并具备调用条件的后续服务仍然可以运行,不受影响。

5.异构服务调用

根据实际要求提出一种可扩展架构,实现任务流程调度和服务调用功能相分离,该架构的特性是低耦合、可扩展、安全性。针对不同的服务特性开发不同的异构服务调用代理,完成一个可扩展的异构服务调度引擎。

服务调用工具是完成对每个异构服务实例的实时调用,关键在于不同架构服务调用方式的差异以及在调用过程当中参数类型转换,用户认证等。针对异构服务调用机制的特点,采用当前成熟的服务远程调用机制,根据服务参数配置表中配置参数和异构服务实例调用程序模板,智能化地生成异构服务远程调用程序java代码,最后利用标准代码编译器(JDK)将其编译生成一个实例调用实体。

四、结束语

本文从解析器、流程调度控制表、会话管理器、流程驱动机制等几个方面入手,介绍了异构服务调度引擎的实现。

(1)可以实现对异构服务流程的自动组装,屏蔽异构服务之间的差异;(2)采用任务推动式服务流程驱动机制实现了对服务组装流程流向控制;(3)采用多任务表模式,增加调用安全性;(4)实现架构良性,易于扩展。该设计完成了对异构服务调度引擎的基本实现,但如何提高网络服务访问质量、服务安全性、防窃取机制以及如何实现在分布环境下多个工作流引擎间的协同工作等将是以后研究的方向。

参考文献

[1] Richard Hull, Su Jian-wen. Tools for Composite Web Services:A Short Overview[J].SIGMOD Record

[2] D. Berardi, D. Calvanese, G. De Giacomo, R. Hull, and M. Mecella. Automatic composition of web services in Colombo. In Proc. of 13th Itallian Symp. on Advanced Database Systems, June 2005.


[3] 徐罡,黄涛,刘绍华,叶丹.分布应用集成核心技术研究综述[J].计算机学报.2005,28(4):433-444.

[4] 杨芙清,梅宏,李克勤.软件复用与软件构件技术[J].电子学报.1992,27(2):68-75.

[5] 田宇,陈松乔.基于EJB 的构件组装编译技术研究与实现[J].辽宁工学院学报.2006,26(1).

[6] 赵俊峰,谢冰,杨芙清等.一种支持领域特性的Web服务组装方法[J].计算机学报.2005,28(4