摘 要:异构服务组装是指在分布式环境下,将基于不同架构标准的服务,根据统一的基于XML 的服务组装描述文档进行自动组装,形成功能更强、更大的服务或应用的软件复用方法。本文研究并设计了一个面向异构服务组装的基于工作流引擎的异构服务调度引擎,并对其中的关键技术和模块做出了详细的说明。
关键词:异构服务 服务组装 调度引擎
一、引言
随着基于网络计算平台的分布式计算技术的迅猛发展。以支持应用互操作的应用需求为核心,以面向对象技术为主要特征的分布式构件技术和异构的服务技术得到了蓬勃发展,在开发大型分布式应用系统中表现出了强大的生命力,逐渐形成了三种具有代表性的主流技术,即OMG组织的CORBA、Microsoft公司的COM/DCOM,Sun公司的JavaBean/EJB。
针对服务的分布与异构特性,基于各种应用需求,本文提出了异构服务组装的概念。异构服务是指Web 服务[1]、EJB、CORBA、COM/DCOM 等技术规范在内的多种能够经由网络访问的,并能被用户远程调用的分布式软件构件提供的服务。异构服务组装是尽可能大的将分布在广域网中的Web 服务、EJB、CORBA、COM/DCOM 等各种服务无缝整合起来,完成软件的开发及复用。本文设计了一种基于异构服务组装的调度引擎架构,并详细阐述了此架构的实现。
二、异构服务组装调度引擎架构
异构服务组装调度引擎需要有以下一些基本功能:
(1)易操作性:提供友好的用户界面使管理人员(软件开发人员)和使用web 浏览器的远程用户均可方便操作。(2)可扩展性:可不断支持新的网络资源类型,扩大可组装服务范围。(3)自动化:组装过程完全自动化,无须人工驱动服务流程。引擎结构可分为三个层次:界面层、应用层和资源层。界面层用于提供用户和管理人员可视化组装流程,并可监控流程运行状态和步骤。应用层是引擎的核心,它用于定制流程的驱动方式,完成流程实例的运行任务。资源层是为应用层提供资源支持,包括异构服务流程描述文档库和各种异构服务资源。其特性有:
屏蔽异构:网络中异构服务架构不同,远程调用机制不同,用户无法了解所有服务调用方法。在此,用户无需了解服务调用规范和机制细节,只需提供服务参数配置信息即可完成服务的远程调用。
异构服务资源动态绑定:用户无需关心服务的物理地址和服务的内部架构。服务在运行时动态完成远程服务绑定,即在运行时将服务映射成相应的服务实体。用户可以通过引擎自动绑定服务资源和接口,而无需了解服务细节。
服务之间松耦合:网络中的资源不稳定、易失,我们无法保证其在规定时间内的可用性,这种不稳定性意味着服务之间必须松耦合。本引擎采用多任务表模式来组装服务,以支持异构服务之间的松耦合、可扩展性。
架构易于扩展:网络服务资源种类繁多,引擎应能够支持、容纳新类型的服务。当引擎支持一种新服务种类时无需改动整个引擎,添加新的异构服务实例调用接口即可。
三、异构服务调度引擎设计
异构服务调度引擎为异构服务运行实例提供了执行环境,它是整个异构服务组装系统的核心。因此,异构服务调度引擎的好坏直接影响到异构服务组装的执行效率和可扩展性。
本系统使用自定义的基于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。