面向服务的网格体系架构
网格计算技术是一个生机勃勃、充满活力的领域。从诞生之日起,网格的体系架构就不断更新演化。主要可分为两个阶段,最初采用了支持元计算的传统的以协议为中心的五层沙漏体系架构[1],后来转向了面向服务的OGSA体系架构[2]。
OGSA框架的推出和广泛认同标志着网格计算进入了一个新的时代——基于服务的时代。同时,OGSA确立了网格技术与Web服务技术相结合的路线方针。对于Web服务技术,网格界没有被动地照单全收,而是根据网格计算的实际和需求,对Web服务进行了创造性的改进和探索,提出了基于Web服务核心标准的网格服务。目前最新的网格服务规范是WSRF[3]。
WSRF引入了WSresource[4]的概念,成功地把“有状态(statefulness)”能力加到Web服务中,并将这种能力标准化。这是一个两全其美的解决方案,既兼容了已有的Web服务标准,又满足了网格有状态资源的需求。
1开放网格服务体系架构OGSA
1.1OGSA的设计思想
全球网格论坛GGF在2002年首次制定并公布了开放网格服务体系架构OGSA[5],此后OGSA的规范不断地得到演进、更新和完善,2005年正式发布1.0版[2]。
OGSA是网格计算发展的一个里程碑,标志着网格计算从其诞生起最重大的一次转变,即转向面向服务的体系架构SOA。OGSA确定了用基于服务的技术来实现和应用网格。在OGSA体系架构内,使用了基于Web服务标准的网格服务作为实现网格内互操作的共同协议标准。
OGSA从三个方面精确地定义了网格功能、网格技术如何被实现和应用,指引了整个网格界的研究:
a)从服务本质的角度说明了网格虚拟组织内部所需的互操作性,即能对协议的消息作出响应;
b)确定了网格计算技术与Web服务技术结合的方针;
c)网格计算不仅适用于科学计算场景,同样也适用于商业计算环境。
OGSA最突出的设计思想就是服务化和虚拟化。OGSA确立了网格计算采用面向服务的架构。具体的体现是OGSA将关键的网格技术(资源管理、信息服务和数据管理等)与Web服务机制(服务描述和发现;根据服务描述自动产生客户端和服务端代码;服务描述与互操作的网络协议的绑定;与当今众多开放标准、服务和工具的兼容;广泛的商业支持)结合起来。
网格是由跨多个管理域分布的、动态组合的、异构的资源构成。资源是网格计算环境的最底层支持,是完成现代科学活动中计算任务的最终执行体。资源是一个含义很广泛的概念。在网格中的不同层次,站在不同的角度,资源一词具有不同含义。任何在网格环境中可以提供一定能力的事物都可以被称为资源,如高性能计算机、数据库、科学计算程序、网络,甚至人。但是,各种类型的资源是不能为网络计算环境所直接利用的。在一个分布的、多组织的网格环境中,网格体系架构必须考虑对资源进行虚拟化来屏蔽资源的异构多样性,也就是采用一种统一的描述定义方式、本地异地透明地调用和一致的语法来共享使用这些资源。
基于服务的架构很好地解决了资源虚拟化的问题。通过将各种资源包装成开放、通用、标准的网格服务,就可以用统一的协议定义描述服务接口,使用统一格式的消息来与服务通信,使用统一的服务语法调用服务。
面向服务的资源虚拟化模型具有如下好处:服务化封装各类型资源管理和操作的公共接口,允许在本地异地透明的情况下跨多个异构平台对资源一致地访问,大大提高网格环境的可用性、用户易用性和运行的健壮性。在将网格环境中所有的组件都进行服务虚拟化后,就可以通过提供一组相对统一的核心接口,将所有的服务都基于这些接口实现,即可以一种统一的方式来看待这些跨越不同抽象层次的服务。
网格的基础设施和应用中普遍需要状态,所以希望能够以一种统一、标准的方式来表示、访问和操纵状态。一个标准统一的资源状态机制意味着可以以标准统一的方式描述和获取各种网格资源的有关信息,从而有效地支持了资源的发现选择。设计网格应用时,可以将服务的抽象类型组装起来,不考虑具体的实现,不是立即与具体的资源绑定,而是在执行时利用状态访问机制获取实时的状态信息,绑定到最佳的一个有状态资源实例。同时,协同的服务间通过彼此的状态变化进行通信,然后调整彼此的行为,可以大大改善服务和应用运行的健壮性。在作业运行时,通过状态访问机制就能方便地监控资源的状态,了解作业进度状况。数据传输服务通过状态机制记录传输的阶段和进度,通知给用户,并支持断点续传和第三方传输。因而统一标准的手段实现状态的表示、访问和获取就可以有力地支持网格应用和基础设施的创建。
3网格服务
考虑到网格环境的具体特点和需求,网格界在继承现有Web服务核心标准的基础上加以创造性的改进和探索,提出了网格服务的概念。一个网格服务就是一个符合一套约定和接口的显状态的Web服务,这些约定和接口提供了对显状态服务的一种可控的、抗错的和安全的管理。从定义可以看出,网格服务是建立在Web服务基础上的,是为了网格基础设施和应用的需要而专门设计的一种特殊的Web服务,是对Web服务的精练和进化。此外,还提出了网格服务实例的概念,一个网格服务实例(grid service instance)是指符合一套以WSDL接口表达的约定、扩展和行为特征的服务,目的是为了进行生命期管理、特征发现和通知等。通过网格服务和网格服务的实例,网格界很好地解决了服务发现、动态服务创建、服务生命周期管理等与临时服务有关的问题。
与一般的Web服务一样,网格服务采用了WSDL语言来向外公布其可以实现的功能操作,称为网格服务的接口。一个WSDL服务接口的描述包含对一组操作、消息的一个抽象定义、绑定到这些操作、消息的一个具体协议和这个绑定的一个网络端点规范。
网格服务提供者通过开发网格服务实现文件来实现网格服务接口规定的功能行为,从而在用户提交服务请求时,为其提供承诺的服务。
按照OGSA的架构设想,网格的功能以一组符合通用标准的所谓网格服务的形式暴露以供外界调用。基于网格服务的概念,OGSA将整个网格看做是网格服务的集合。但是这个集合不是一成不变的,是可以扩展的。这反映了网格的动态特性。
按照OGSA的服务模型,构成网格的服务集合应当包括少量的永久服务和大量的瞬时服务。所有的服务遵循网格服务接口和行为的定义,支持可靠的服务激活、生命周期管理、发现、授权、通知、升级、并发和可管理性,支持管理服务实例的接口。
瞬间服务就是网格服务实例,是非常轻量级的实体,用于管理短生命期的活动行为。例如,可以将科学计算程序的一次执行看做一个瞬间服务实例管理的行为。当用户提出科学计算请求时,就为其实例化一个瞬间网格服务实例(科学计算网格服务),负责启动、管理科学计算程序进程,并在计算过程中与用户进行交互计算,待计算结束之后汇报计算进程并退出信息。
网格服务一般运行在一定的服务运行承载环境中。服务运行承载环境,也称做服务容器,目前已有的参考实现包括支持OGSI网格服务的GT3网格服务容器,支持WSRF规范服务的GT4网格服务容器等。服务容器环境定义了一个框架环境,在其内部符合环境定义接口的构件可以被实例化,也可组装起来创建成更复杂的应用程序。用户通过服务容器环境请求执行容器内承载的某个服务接口中定义的操作,而服务容器则为其调用该服务的实现文件,从而实现了对该服务的调用,使用了服务提供的功能。服务容器实现了对网格服务的生命周期管理[8],包括按照用户请求而为其创建符合环境定义接口的网格服务实例,并以适当的方式销毁服务实例。目前,网格服务容器借鉴了工厂模式来产生一个或多个服务实例。网格服务容器支持两种方式销毁服务实例,即立即销毁和调度销毁。一般情况下,请求者会在使用完服务之后请求立即销毁,容器就会同步地完成销毁的消息交换、释放资源、完成销毁操作。但是在其他一些情况下,请求者可能不愿意主动销毁,或者已经和服务容器断开,无法联系了,这时就可以借助调度销毁方式,预定在将来的某个时间终止,回收相应的系统资源。
网格服务使用的服务容器环境与科学计算遗产程序依存的较低层面的执行环境存在着较大的技术沟壑,无法直接将科学计算遗产程序部署到网格服务容器内,需要适当的网格包装工具,将遗产程序进行适当的包装,转换成符合网格服务规范的服务形式,部署到服务容器中。一个支持科学计算的网格环境需要考虑提供网格包装工具支持。
4WSRF
开放网格基础设施(open grid service infrastructure,OGSI)1.0版[6]通过扩展Web服务定义语言WSDL和XML Schema的使用,来解决具有状态属性的Web服务的问题。它提出了网格服务的概念,并针对网格服务定义了一套标准化的接口,主要包括服务实例的创建、命名和生命期管理、服务状态数据的声明和查看、服务数据的异步通知、服务实例集合的表达和管理,以及一般的服务调用错误的处理等。但是OGSI由于自身的缺陷和Web服务技术的一些进展,没有取得成功[7]。
看到OGSI在实践中的不足和问题,globus联盟与Web服务技术研究人员合作,将OGSI的功能进行了分解和演化,并充分利用了Web服务体系架构的最新成果,制定了Web服务资源框架(WSresource framework,WSRF)[3]。
WSRF推出的目的是,定义一个通用且开放的架构,利用Web服务对具有状态属性的资源进行存取。这个架构包含了描述状态属性的机制,并将其延伸至Web服务标准中。
WSRF不是对OGSI完全否定,而是OGSI的重新分解和进化,OGSI中的思想和本质功能都在组成WSRF的几个规范中完整地保留下来,只不过更换了语法和术语,更加贴近、符合现有的Web服务标准,更容易利用现有的Web服务开发部署工具和XML工具。
为了充分兼容现有的Web服务,WSRF使用WSDL 1.1定义OGSI中的各项能力,避免对扩展工具的要求,原有的网格服务已经演变成了Web服务和资源文档两部分。
WSRF包括六个独立的技术规范,如表1所示。
WSRF的核心就是引入了WSresource[4]的概念,目的是将有状态能力加到Web服务中,并将这种能力标准化。GGF将符合WSRF规范的网格服务作为网格界统一通用的标准进行推广。
WSRF将状态信息保存在称为资源的单独实体内,每一个资源具有一个惟一的身份标志符,所以用户在与Web服务进行有状态的交互时,只需在消息中告诉Web服务使用的特定资源的身份标志符即可。一个Web服务可对应多个资源,一个资源也可对应多个Web服务。一个WSresource可以定义为“在Web服务上下文中,一个Web服务与一个有状态资源的组合(composition)”。一个WSresource可以表示为WSresource=Web服务+关联的资源即一个WS