基本概念
SOA---Service Oriented Architecture,简单可被认为是,面向服务的框架
但是,更被认为是,一整套新的分布式软件系统构造方法和环境,包含运行环境、编程模型、架构风格和相关方法论等在内。涵盖服务的整个生命周期:建模-开发-整合-部署-运行-管理。
在SOA的架构风格中,服务是最核心的抽象,业务被划分为(组件化)一些粗粒度的业务服务和业务流程,业务服务是独立的,自包含,可重用的,由一系列的分布式系统提供,业务流程由服务组装,一个"服务"定义了一个与业务功能或业务数据相关的接口,以及约束这个接口的契约 , 接口和契约采用中立、基于标准的方式进行定义,它独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在不同系统中的服务可以以一种统一的和通用的方式进行交互、相互理解。除了这种不依赖于特定技术的中立特性,通过服务注册库(Service Registry)加上企业服务总线(Enterprise Service Bus)来支持动态查询、定位、路由和中介(Mediation)的能力,使得服务之间的交互是动态的,位置是透明的。技术和位置的透明性,使得服务的请求者和提供者之间高度解耦。这种松耦合系统的好处有两点:一点是它适应变化的灵活性;另一点是当某个服务的内部结构和实现逐渐发生改变时,不影响其他服务。
SOA架构带来的另一个重要观点是业务驱动IT,即IT和业务更加紧密地对齐。以粗粒度的业务服务为基础来对业务建模,会产生更加简洁的业务和系统视图;以服务为基础来实现的IT系统更灵活、更易于重用、更好(也更快)地应对变化;以服务为基础,通过显式地定义、描述、实现和管理业务层次的粗粒度服务(包括业务流程),提供了业务模型和相关IT实现之间更好的"可追溯性",减小了它们之间的差距,使得业务的变化更容易传递到IT。
因此,可以将SOA的主要优点概括为:IT能够更好更快地提供业务价值(Business Centric)、快速应变能力(Flexibility)、重用(Reusability)。
第一, SOA是架构风格,是方法;而不是具体架构具体实现技术(如Web Service)、具体架构元素(如企业服务总线,Enterprise Service Bus,ESB)。
第二, SOA的首要目标是IT与业务对齐,支持业务的快速变化;其次是IT架构的灵活性和IT资产的重用。
第三, 在工程上,SOA的重点是服务建模和基于SOA的设计原则进行架构决策和设计。
计算环境
计算环境由一组计算机、软件平台和相互联通的网络组成,这个环境能够处理和交换数字信息,允许外界访问其内信息资源 。不同的计算环境有不同的计算风格和编程模型,由一些特定于该计算环境的技术来支撑。
在面向服务的计算环境中,系统可以是高度分布、异构的。它一般包括服务运行时环境(Service Runtime)、服务总线(Service Integration
Infrastructure)、服务网关(Service Gateway)、服务注册库(Service Registry)和服务组装引擎(Service
Choreography Engine)等,如图1-1所示。
服务运行时环境提供服务(和服务组件)的部署、运行和管理能力,支持服务编程模型,保证系统的安全和性能等质量要素;服务总线提供服务中介的能力,使得服务使用者能够以技术透明和位置透明的方式来访问服务;服务注册库支持存储和访问服务的描述信息,是实现服务中介、管理服务的重要基础;而服务组装引擎,则将服务组装为服务流程,完成一个业务过程;服务网关用于在不同服务计算环境的边界进行服务翻译,比如安全。
图1-1 SOA计算环境的组成要素
图1-2 SOA计算环境的标准协议栈
随需应变计算环境应具备以下特点,如图1-3所示。
图1-3 随需应变的计算环境应该具备的特点 |
(1) 整合:将人、过程、应用和数据全面整合起来。
(2) 虚拟化:将分布、异构的物理资源(服务器、存储设备等)整合起来,呈现为统一的逻辑对象,以安全和可管理的方式供使用。
(3) 自主计算:如同生物体一样,系统具备一些高级生物系统的能力,包括自我诊断和修复问题,自动配置和调整以适应环境的变化,自动优化资源的使用效率、增强工作负荷的处理的能力,自我保护数据和信息的安全。
(4) 开放标准:整个环境建立在开放的标准之上,保证系统的交互性。
面向服务的编程模型:服务组件架构(SCA)和服务数据对象(SDO)
为了促进面向服务应用的开发,IT公司联合起来,在2005年11月发布了服务组件架构(Service Component Architecture)和服务数据对象(Service Data Object)规范,这些公司包括IBM,BEA,Oracle,SAP等。
SCA的目标是大大地简化服务开发,直接采用Web服务和XML开发服务,使得程序员工作在底层技术上,需要应付各种异构环境下的具体实现细节。其中,SCA定义和规范了技术中立和实现透明的服务组件、服务及服务调用和组装;而SDO定义和规范了服务世界里的数据,这些数据对象拥有清晰定义的信息模型,独立于数据源和具体数据访问技术,使得服务访问数据和在服务之间交换数据更方便、有效。
很多公司已经在J2EE平台上支持了SCA/SDO,还提供了C++的版本。IBM
WebSphere Process Server 6实现了SCA/SDO规范,提供了最新的SOA编程模型的支持,已经在很多实践中被广泛使用。
面向服务的设计原则
从抽象手段而言,SOA在原有方法的基础上,增加了服务、流程等元素。这些抽象手段之间的关系如图1-5所示。
如何利用这些抽象手段,将一个业务需求转化为流程、服务,进一步建模为服务组件,然后结合具体实现环境,在重用已有系统的功能和数据资源的基础上来实现?如图1-6所示是IBM总结的SOA架构概念模式。
图1-5 SOA中的重要抽象手段
图1-6 SOA的概念架构模式
SOA架构中,继承了来自对象和组件设计的各种原则,如封装、自我包含等。那些保证服务的灵活性、松散耦合和重用能力的设计原则,对SOA架构来说同样是非常重要的。
结构上,服务总线是SOA的架构模式之一。
关于服务,一些常见和讨论的设计原则如下:
(1)无状态。以避免服务请求者依赖于服务提供者的状态。
(2)单一实例。避免功能冗余。
(3)明确定义的接口。服务的接口由WSDL定义,用于指明服务的公共接口与其内部专用实现之间的界线。WS-Policy用于描述服务规约,XML模式(Schema)用于定义所交换的消息格式(即服务的公共数据)。使用者依赖服务规约来调用服务,所以服务定义必须长时间稳定,一旦公布,不随意更改;服务的定义应尽可能明确,减少使用者的不适当使用;不要让使用者看到服务内部的私有数据。
(4)自包含和模块化。服务封装了那些在业务上稳定、重复出现的活动和组件,实现服务的功能实体是完全独立自主的,独立进行部署、版本控制、自我管理和恢复。
(5)粗粒度。服务数量不应该太大,依靠消息交互而不是远程过程调用(RPC),通常消息量比较大,但是服务之间的交互频度较低。
(6)服务之间的松耦合性。服务使用者看到的是服务的接口,其位置、实现技术、当前状态等对使用者是不可见的,服务私有数据对服务使用者是不可见的。
(7)重用能力。服务应该是可以重用的。
(8)互操作性、兼容和策略声明。为了确保服务规约的全面和明确,策略成为一个越来越重要的方面。这可以是技术相关的内容,比如一个服务对安全性方面的要求;也可以是跟业务有关的语义方面的内容,比如需要满足的费用或者服务级别方面的要求,这些策略对于服务在交互时是非常重要的。WS- Policy用于定义可配置的互操作语义,来描述特定服务的期望、控制其行为。在设计时,应该利用策略声明确保服务期望和语义兼容性方面的完整和明确。
SOA的主要组件
在前面关于计算环境的讨论里,我们已经提到SOA计算环境的主要组件包括:服务运
行时环境、服务总线、服务注册库、服务网关和流程引擎。通常,还会包括服务管理、业务活动监控(Business Activity Monitoring)和业务绩效管理(Business Performance Management,
BPM)。另外,在服务建模、开发和编排服务等方面,我们需要相应的工具来支持。在分析、
设计方面,我们需要基于服务的分析、设计方法,就是我们通常说的服务建模,包括服务的
识别、定义和实现策略,其输出是一个服务模型(Service Model)。
SOA主要技术和标准
Web服务作为实现SOA中服务的最主要手段。我们首先来了解跟Web Service相关的标
准,它们大多以"WS-"作为名字的前缀,所以统称WS-*。
Web服务最基本的协议包括UDDI,WSDL和SOAP,通过它们,我们可以提供直接而
又简单的Web Service支持,如图1-7所示。
但是基本协议无法保证企业计算需要的安全性和可靠性,所以我们需要增加这方面的协
议,比如WS-Security,WS-Reliability和WS-ReliableMessaging;对于复杂的业务场景,我
们需要WS-BPEL和WS-CDL这样的语言来将多个服务编排成为业务流程;管理服务的协
议如WS-Manageability,WSDM等。跟Web服务相关的标准,还在快速发展当中。目前在
SOA产品和实践中,除了基本协议外,比较重要的还包括BPEL,WS-Security,WS-Policy
和SCA/SDO。如表1-1所示给出了一个基本的总结,后面的章节会介绍重要的技术和标准。
图1-7 基本Web服务协议
目前,Web的标准和技术在演变当中,不同的技术环境的支持力度也不同,但是前面提
到的基本核心协议,都有很好的支持。关于Web服务协议的接受和支持程度,如图1-8所示。
图1-8 当前Web服务的接受情况