1引言
随着软件开发方法研究的发展和分布式技术应用的深人,基于多种开发平台和工具的商业系统得到大量应用,使得企业中的软件系统变得日益庞大和复杂。由于传统的软件开发使用的平台、开发工具、操作系统在结构上的紧藕合,以致这些位置上分散的独立系统逐渐形成了所谓的“信息孤岛”。
为了更好地重用已有模块、加快软件开发速度,使这种重用可以不用考虑各自运行平台和开发环境的差异,并使被重用的模块可以方便地由旧系统纳人新系统,一种面向服务的体系结构SOA(ServiceOrientedArchitecture)的软件设计方法被提了出来,这种通过对服务流程化的组织来构建分布式系统的方法既是体系结构模型,又是编程模型。
本文讨论了如何利用SOA提供的这种较面向对象和基于构件更好的软件复用方法去构建出一个松散藕合的分布式系统,使其达到复用度高和扩充性好的目的。
2基于SOA的软件开发方法
由于侧重方向和观察角度上的差异。对于SOA的具体定义各有不同。但是从体系结构方面考虑可以这样给出:SOA是一种松散耦合的软件体系结构,在这种体系结构中,由各自独立可复用的服务去构成系统功能。这些服务向外公布有意义明确的接口,软件的开发是通过对这些实现透明的接口的调用来完成”。其体系结构如图1所示。
图1SOA的体系结构
在面向服务的体系结构中主要有三种角色:
服务消费者是需要使用服务的应用程序或其它的服务。通过对注册中心的服务进行查询后,根据接口说明信息并使用某种传输协议与服务绑定并执行服务功能。
服务提供者是创建服务的实体。可以从服务消费者处接受请求并可以远程执行所请求服务。通过向注册中心发布服务接口信息以供服务消费者发现和访问服务。
服务注册中心处于中心位置提供了展示服务的功能。服务消费者通过查询存储有服务信息库的注册中心以找到感兴趣服务的接口信息。
在面向服务的体系结构中的每个实体的角色并非固定,可以同时充当以上三种角色中的一个或多个。
在面向服务的体系结构中主要的操作有:
发布为了被访问,服务的描述信息必须被发布以便服务消费者发现和调用。
发现服务请求者通过查询注册中心去定位符合其需求标准的服务。
绑定和调用在获得服务描述信息之后,服务消费者据此去调用服务。
服务是SOA中的基础设施,位于业务需求和底层技术之间的抽象层次中。在开发基于SOA软件系统的过程中:首先,要明确功能需求和可获得服务之间的动态关系,以及服务与实现服务的底层技术的关系;其次,SOA中的基本服务必须满足定义明确和功能单一的要求,每个独立部署的服务不必依赖其它系统;最后,整个系统功能需求的满足通过服务的流程化组织而得到实现。
与传统开发方法相比,SOA的特点在于具有:基于标准、松散藕合、共享服务和粗粒度等,其优势可表现为:
(1)易于集成现有系统:在对现有系统不做修改的前提下,SOA可将现有系统和应用迅速转换为服务。通过封装可以提供服务接口的应用层来访问遗留系统,因此不用修改现有系统体系结构。
(2)具有标准化的架构:只要符合相关标准,无论何时开发的组件都可以合并在一个结构良好的SOA系统中。并且不同开发者开发出的组件将被作为服务方便的添加部署在现有的基础构架中。
(3)提升开发效率:由于SOA在可复用方面的特点,新的软件在设计、开发、测试和部署时可以充分利用已有服务。因此,其开发周期可以显著缩短。
(4)降低开发维护复杂度:通过采用SOA体系结构,在进行二次开发时成本急剧减少。同时,由于系统具有松散藕合的特征,维护成本也大大减少。
3SOA的实现技术—Web服务
SOA中的应用是由服务使用者通过接口访问服务而形成。潜在使用者可发现由服务提供者发布的该类接口并通过网络来进行调用。这种设计思想同Web服务这种灵活而强大的具体实现技术有着某种程度的暗合,因此,使用Web服务来实现SOA具有天然的优势。
此外,SOA是一种不受限于具体技术的体系结构,定位于特定技术的集合如Web服务、RMI,COM,CORBA等之上。从广义角度来说,可以被上述任意一种具体技术来实现。从严格意义上讲,只能由符合协议中立的技术去实现。相比以前的分布式计算技术,Web服务技术具有更好的可靠性、扩展性、易用性且具有协议开放性。虽然Web服务并非是实现SOA的必需组件,而且部署了Web服务也并非意味实现了SOA。但由于它所具有的上述优势使其在实现SOA时具有重要地位,在实践过程中往往被优先考虑为实现SOA的技术而得到采用。
3.1Web服务的关键技术
基本的Web服务栈由SOAP,WSDL,UDDI等技术组成,其服务栈结构如图2所示。SOAP(Sim-pleObjectAccessProtocol)是一种轻型的基于XML的简单通信协议,它定义了一种通过网络传送XML消息的格式。该消息由一个SOAP信封(envelope)元素和被信封元素包围的一个可选择的SOAP头元素(header)和一个必须的SOAP体元素组成。
图2Web服务协议栈
WSDL(WebServicesDescriptionLanguage)也是一种基于XML的语言,通过这种语言,Web服务可以向其它应用程序传递它所提供的方法(method),以及该方法的使用规则。
UDDI(UniversalDescriptionDiscoveryandIntegration)定义了一种基于XML的格式,使用者可以使用这种格式去描述其功能和过程。它定义了Web服务的发现和发布的方法。
3.2Web服务的运行方式
Web服务的运行方式与SOA的设计思想很相似:服务提供者将其服务的WSDL描述信息发表到UDDI注册中心。服务使用者通过查询注册中心获得所要使用服务的WSDL文档,该文档提供了与Web服务进行交互的信息。服务使用者向提供者发送SOAP请求消息,然后由Web服务提供者返回SOAP应答消息。