2.2 面向服务的软件架构
HTTP在网络中的广泛应用,使得采用SOAP和HTTP的Web Services实现互连成为可能,而且Web Services可以轻松地穿越绝大多数的防火墙,与XML结合使其具有数据交换的能力。以XML、Web Services为核心的面向服务架构(Service Oriented Architecture,SOA),是实现跨领域信息交换的一种理想软件架构[8]。
2.2.1 面向服务架构特点
面向服务架构(SOA)通过建立一种规范、统一的架构,实现系统的快速开发、集成和重用。集成的对象是Web服务或者被封装成Web服务的业务流程。Web服务基于广泛接受的、开放的技术标准,以面向对象技术为基础,对数据和业务流程进行封装,支持服务实现和服务接口描述的分离、服务的自动查找和动态绑定,以及服务的组合。
SOA不仅可以实现资源的重复使用和整合,而且能够跨越各种硬件平台和软件平台,实现不同资源和应用的互联、互通和互操作。SOA是一种粗粒度、松耦合的服务架构,服务之间通过简单、精确定义的接口进行通信,不涉及底层编程接口和通信模型,其主要特点如下。
1.基于开放的标准
SOA采用开放式XML、XML Schema、SOAP、WSDL等标准,因此可以利用XML、XML Schema定义数据规范,使用WSDL、WADL等标准定义各种数据访问服务接口,实现分布数据源的统一管理。无论底层数据源有多复杂,通过将数据访问变为Web服务,所有上层应用都可以使用统一的方式进行数据访问,实现对底层大量异构的孤立数据源的数据访问服务。通过统一的数据访问,可以解决信息访问不标准、不规范的问题。
2.松散的系统耦合
SOA将各种信息资源和应用资源按一定的标准封装为服务,服务使用者和服务提供者之间是一种松耦合关系。这样,可以把遗留系统的数据和业务封装为服务加以复用,实现了对现有信息资源的保护,充分挖掘了现有资源的应用潜力,避免了信息系统信息资源利用率低、重复建设等问题。
3.快速的业务需求响应
信息共享需求,在不同的阶段和条件下,会不断发生变化。为了使信息共享快速满足新的业务需要,需要让应用和数据具备一种敏捷的适应变化能力,从而迅速实现关键业务服务,并满足变化的需求。通过SOA平台可以灵活地控制以Web服务为核心的业务逻辑,实现高效的业务组合和数据格式转换,在最短的时间内满足各种数据共享需求。
面向服务架构的主要技术是Web Services。Web Services是基于一系列开放的、标准协议的分布式计算模式,提供基于网络的、与开发环境无关的软件服务。Web Services的实现方式主要有SOAP Web Services和Restful Web Services。这两种方式各具特点,在实施跨领域信息交换时可根据具体应用需求选择。
2.2.2 SOAP Web Services
SOAP Web Services主要基于服务使用者、服务注册中心、服务提供者3种角色进行交互。这3种角色通过发布/撤消发布、查找、绑定3种动作实现交互,如图2-30所示。
图2-30 Web服务体系结构
服务提供者(Service Provider),是Web服务的所有者,也是提供服务的平台,为其他服务和用户提供自己已有的功能。服务提供者可以发布自己的服务,并对使用自己服务的请求进行响应。
服务使用者(Service Requester),是Web服务功能的使用者,利用SOAP消息寻找并调用服务,或启动与服务交互的应用程序。服务使用者利用服务注册中心查找所需的服务,然后请求使用该服务。
服务注册中心(Service Registry),作用是把一个服务使用者与合适的服务提供者联系在一起,充当管理者或代理的角色,通常也称为服务代理,用于注册已经发布的服务并对其进行分类管理,提供搜索服务。在静态绑定开发或动态绑定执行期间,服务使用者查找服务并获得服务的绑定信息(在服务描述中)。服务注册中心一般是可搜索的服务描述注册中心(如UDDI),服务提供者在此发布他们的服务描述,服务使用者查找服务并获得服务的绑定信息。对于静态绑定的服务使用者,服务注册中心是体系结构中的可选角色,因为服务提供者可以把描述直接发送给服务使用者。同样,服务使用者可以从服务注册中心以外的其他来源得到服务描述,如本地文件、FTP站点、Web站点、广告等。
服务提供者、服务使用者和服务注册中心的主要操作如下。
(1)发布(Publish)/撤消发布(Delete)操作。该操作是指将服务发布至服务注册中心或从服务注册中心撤消。服务提供者通过服务注册中心来发布或撤消某个服务。
(2)查找(Find)操作。该操作由服务使用者和服务注册中心共同完成,服务使用者可以通过服务注册中心查找特定种类的服务,服务使用者描述他们正在寻找的服务类型,服务注册中心反馈和请求最匹配的结果。
(3)绑定(Bind)操作。该操作发生在服务使用者和服务提供者之间,双方经过适当的商讨之后,服务使用者就可以访问和调用服务提供者所提供的服务。
SOAP Web Services采用XML、简单对象访问协议(Simple Object Access Protocol,SOAP)、Web服务描述语言(Web Services Description Language,WSDL)、统一描述发现和整合(Universal Description,Discovery and Integration,UDDI)等协议,实现跨平台、跨系统的分布式应用集成。
SOAP是消息传递的协议,它规定了Web Services之间是怎样传递信息的。SOAP继承了XML规范的开放性和描述的可扩展性,与现有的HTTP、SMTP等网络通信协议能很好地兼容。SOAP的主要目标是消除组件平台和编程语言的差异,完成分布式环境下端与端之间信息的通信与交互,提高互操作性。SOAP是一种简单且轻量级的、不包含任何应用语义或传输语义的消息框架,因此其非常利于扩展。
WSDL是一种基于XML规范的关于Web服务的描述语言,Web Services的提供者将自己Web服务的所有相关内容,如所提供服务的传输方式、服务方法接口、接口参数、服务路径等,生成相应的文档,发布给服务使用者。WSDL由3个部分组成:What、How和Where。What部分描述了Web Services的具体内容;How部分将Web Services的服务内容和通信协议进行绑定;Where部分指定Web Services的URI。
UDDI是一种创建注册服务的规范。简单来说,UDDI用于集中存放和查找WSDL描述文件,起到目录服务器的作用,以便服务提供者将自己的Web Services进行注册发布,供服务使用者查找。
2.2.3 Restful Web Services
传统的Web应用大多采用B/S架构,这种架构的特点是部署方便,但许多HTTP自身的特性没有得到利用。为了能够充分利用HTTP更多良好的特性,Roy Thomas Fielding博士提出了REST方法。REST的全称是Representation State Transfer,它描述了一种设计Web应用的架构风格,可以降低开发的复杂性。
Restful Web Services 是符合REST架构风格的一种轻量级的Web Services。它采用HTTP作为应用协议和传输协议,使用统一资源标识符(Uniform Resource Identifier,URI)来表示唯一对应的资源,使用HTTP提供的GET、POST、PUT、DELETE共4种基本方法,对资源进行查询、创建、修改和删除操作,利用缓存来提高响应速度,其性能、效率和易用性都优于SOAP Web Services。Restful Web Services的优势主要表现为:①可以利用缓存来提高响应速度;②通信本身的无状态性可以让不同的服务器处理一系列请求中的不同请求,进而提高服务器的扩展性;③浏览器可作为客户端,简化软件开发的需求;④相对于其他叠加在HTTP协议之上的机制,Restful Web Services的软件依赖性更小;⑤不需要额外的资源发现机制;⑥在软件技术的演进中,兼容性更好。
Restful Web Services相关的概念主要有资源、统一资源标识符、表示、统一接口服务[8]。
(1)资源。
资源是存放在计算机或网络上的文档、记录及运行某程序所获得的结果等。Restful Web Services将整个Web看作资源的集合。例如,信息使用者想获得信息提供者的船舶位置信息,则“船舶位置信息”就可以看作一个资源。
(2)统一资源标识符。
Restful Web Services是面向资源的,因此资源必须是唯一的。这就需要使用一种一致的命名规则去标识资源。资源用URI(Uniform Resource Identifier)命名。URI中不仅包含资源的地址,还包含对资源的操作指令,服务器端则根据URI中的指令确定客户请求的处理方式。因此,这里的URI不是单纯的URL(Uniform Resource Locator)网址。
例如,资源使用者要与资源提供者进行一次交互,资源使用者会发出形如这样的请求:http://hello.hello.org/hello.txt。资源使用者对该请求的理解是:①连接到资源提供者所在服务器hello.hello.org;②向其发送GET方法及指定相关资源的详细路径/hello.txt。
(3)表示。
表示(Representation)是一种序列化的数据结构。在Restful Web Services中,表示是一种超媒体,它不仅包含数据,还包含指向其他资源的链接。表示可以在资源使用者和资源提供者之间进行双向的信息传递。除此之外,客户端可以将对一个新资源的表示传送到服务器,在服务器上创建该资源;也可以将对一个现有资源的新表示传送到服务器,使服务器对已有资源进行更新操作。表示的超媒体格式有多种,如XHTML+XML、ATOM+XML和JSON。
(4)统一接口服务。
REST是基于HTTP协议的,任何对资源的操作行为都是通过HTTP协议提供的方法来实现的。HTTP把对一个资源的操作限制在4种方法以内:GET、POST、PUT和DELETE。若要在服务器上创建资源,使用POST方法;若要检索某个资源,使用GET方法;若要更改资源状态或对其进行更新,使用PUT方法;若要删除某个资源,使用DELETE方法。
2.2.4 企业服务总线
企业服务总线(Enterprise Service Bus,ESB)是传统消息中间件技术与Web Services、XML技术的结合,可以在一个异构的环境中保证信息稳定,实现信息可靠传输,屏蔽了硬件层、操作系统层、网络层等相对复杂、烦琐的接口,为应用提供了一个统一、标准的信息通道,确保应用和这些底层平台无关,从而实现不同操作系统、不同数据库、不同平台和基于这些平台之上开发的应用软件的数据交换、数据共享与应用集成,为信息系统的数据交换与共享提供信息传输手段。
不同厂家实现的ESB,其组成可能不同,但基本的构成包括通信组件、服务组件和适配器组件,如图2-31所示。
图2-31 企业服务总线框架
通信组件主要实现基于消息中间件的传输。
服务组件主要实现服务编排、消息格式转换服务、消息路由、扩展引擎等功能,包括:①服务编排组件,可以将多个不同功能的Web服务编排成一个具有新业务功能的服务;②XSLT消息格式转换服务,支持使用XSLT将输入XML格式的消息转换成目标XML格式;③路由规则引擎,能够实现基于规则库的消息路由和智能化的服务调用;④扩展引擎开发API,为开发者提供二次开发服务,扩展总线功能。
适配器组件主要实现各种协议的接入,包括:①通过SOAP适配器,能够连接Web Services端点;②通过E-mail适配器,可以连接POP3(SMTP)电子邮件服务器,监听收到的电子邮件并自动处理;③通过FTP适配器,可以连接FTP服务器,监听收到的文件并自动处理;④通过数据库适配器,可以连接各种关系数据库;⑤通过专用系统定制适配器,可以连接遗留系统信息。
ESB能实现多种通信协议的接入、不同通信协议之间的转换、不同数据格式的加工和处理、基于数据内容的智能路由。ESB的核心功能如下。
(1)协议适配。ESB可以方便地与HTTP、FTP、POP3/SMTP和文件系统等通信协议或传输方式对接。
(2)可靠的消息传输。ESB采用消息中间件实现可靠的消息传输和异步通信,如MQ、JMS等标准消息中间件。
(3)基于XML的消息传递。XML独立于操作平台和编程语言,具有很好的互操作性、可读性、可扩展性。基于XML的消息便于ESB进行转换和路由。
(4)智能路由和分发。ESB可以方便地解析XML消息,并根据其内容进行路由、聚合、加工和验证等操作。
(5)消息转换。ESB支持XML与XML、文本文件与XML、数据库与XML等之间的转换,并提供多种转换函数。
(6)内置丰富引擎组件和可扩展的API。ESB内置包括BPEL、XSLT、Rules、Script、SCA等组件,实现服务编排、规则编辑、脚本语言和二次开发。
(7)监控和管理。ESB监控和管理应用程序运行的状态和使用的资源,平衡处理负载,减少对网络带宽的利用,并监控服务之间消息的转发、服务的调用、业务流程的执行。此外,ESB还具有良好的日志功能。
目前,商业ESB产品主要有IBM WebSphere ESB、Microsoft ESB、JBOSS SOA Platform、普元ESB、金蝶ESB等,开源的ESB产品主要有OpenESB、Mule、Apache ServiceMix等。