对于面向同步和异步应用的,基于请求 / 响应模式的分布式计算来说, SOA 是一场革命。一个应用程序的业务逻辑( business logic )或某些单独的功能被模块化并作为服务呈现给消费者或客户端。这些服务的关键是他们的松耦合特性。例如,服务的接口和实现相独立。应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现。举例来说,一个服务可以用。 NET 或 J2EE 来实现,而使用该服务的应用程序可以在不同的平台之上,使用的语言也可以不同。

   SOA 有以下特性

   SOA 服务具有平台独立的自我描述 XML 文档。 Web 服务描述语言( WSDL , Web Services Description Language )是用于描述服务的标准语言。

   SOA 服务用消息进行通信,该消息通常使用 XML Schema 来定义(也叫做 XSD , XML Schema Definition )。消费者和提供者或消费者和服务之间的通信多见于不知道提供者的环境中。服务间的通讯也可以看作企业内部处理的关键商业文档。

  在一个企业内部, SOA 服务通过一个扮演目录列表( directory listing )角色的登记处( Registry )来进行维护。应用程序在登记处( Registry )寻找并调用某项服务。统一描述,定义和集成( UDDI , Universal Description , Definition , and Integration )是服务登记的标准。

  每项 SOA 服务都有一个与之相关的服务品质( QoS , quality of service )。 QoS 的一些关键元素有安全需求(例如认证和授权),可靠通信(译注:可靠消息是指,确保消息“仅且仅仅”发送一次,从而过滤重复信息。),以及谁能调用服务的策略。

  为什么选择 SOA ?

  不同种类的操作系统,应用软件,系统软件和应用基础结构( application infrastructure )相互交织,这便是 IT 企业的现状。一些现存的应用程序被用来处理当前的业务流程( business processes ),因此从头建立一个新的基础环境是不可能的。企业应该能对业务的变化做出快速的反应,利用对现有的应用程序和应用基础结构( application infrastructure )的投资来解决新的业务需求,为客户,商业伙伴以及供应商提供新的互动渠道,并呈现一个可以支持有机业务( organic business )的构架。 SOA 凭借其松耦合的特性,使得企业可以按照模块化的方式来添加新服务或更新现有服务,以解决新的业务需要,提供选择从而可以通过不同的渠道提供服务,并可以把企业现有的或已有的应用作为服务, 从而保护了现有的 IT 基础建设投资。

  如图 1 的例子所示,一个使用 SOA 的企业,可以使用一组现有的应用来创建一个供应链复合应用( supply chain composite application ),这些现有的应用通过标准接口来提供功能。

1.JPG 
 
Figure 1. Supply chain application. Click on thumbnail to view full-sized image.

  服务架构

  为了实现 SOA ,企业需要一个服务架构,图 2 显示了一个例子:

  1.JPG
Figure 2. A sample service architecture. Click on thumbnail to view full-sized image.

  在图 2 中, 服务消费者( service consumer )可以通过发送消息来调用服务。这些消息由一个服务总线( service bus )转换后发送给适当的服务实现。这种服务架构可以提供一个业务规则引擎( business rules engine ),该引擎容许业务规则被合并在一个服务里或多个服务里。这种架构也提供了一个服务管理基础( service management infrastructure ),用来管理服务,类似审核,列表( billing ),日志等功能。此外,该架构给企业提供了灵活的业务流程,更好地处理控制请求( regulatory requirement ),例如 Sarbanes Oxley ( SOX ),并且可以在不影响其他服务的情况下更改某项服务。

   SOA 基础结构

  要运行,管理 SOA 应用程序,企业需要 SOA 基础,这是 SOA 平台的一个部分。 SOA 基础必须支持所有的相关标准,和需要的运行时容器。图 3 所示的是一个典型的 SOA 基础结构。接下来的章节将逐一讨论该结构的每个部分。

2.JPG
  
Figure 3. A typical SOA infrastructure. Click on thumbnail to view full-sized image.

   SOAP , WSDL , UDDI

   WSDL , UDDI 和 SOAP 是 SOA 基础的基础部件。 WSDL 用来描述服务; UDDI 用来注册和查找服务;而 SOAP ,作为传输层,用来在消费者和服务提供者之间传送消息。 SOAP 是 Web 服务的默认机制,其他的技术为可以服务实现其他类型的绑定。一个消费者可以在 UDDI 注册表( registry )查找服务,取得服务的 WSDL 描述,然后通过 SOAP 来调用服务。

   WS-I Basic Profile

   WS-I Basic Profile ,由 Web 服务互用性组织( Web Services Interoperability Organization )提供,是 SOA 服务测试与互用性所需要的核心构件。服务提供者可以使用 Basic Profile 测试程序来测试服务在不同平台和技术上的互用性。

   J2EE 和 .Net

  尽管 J2EE 和。 NET 平台是开发 SOA 应用程序常用的平台,但 SOA 不仅限于此。像 J2EE 这类平台,不仅为开发者自然而然地参与到 SOA 中来提供了一个平台,还通过他们内在的特性,将可扩展性,可靠性,可用性以及性能引入了 SOA 世界。新的规范,例如 JAXB ( Java API for XML Binding ),用于将 XML 文档定位到 Java 类; JAXR ( Java API for XML Registry )用来规范对 UDDI 注册表( registry )的操作; XML-RPC ( Java API for XML-based Remote Procedure Call )在 J2EE1.4 中用来调用远程服务,这使得开发和部署可移植于标准 J2EE 容器的 Web 服务变得容易,与此同时,实现了跨平台(如。 NET )的服务互用。

  服务品质

  在企业中,关键任务系统( mission-critical system ,译注:关键任务系统是指如果一个系统的可靠性对于一个组织是至关重要的,那么该系统就是该企业的关键任务系统。比如,电话系统对于一个电话促销企业来说就是关键任务系统,而文字处理系统就不那么关键了。)用来解决高级需求,例如安全性,可靠性,事物。当一个企业开始采用服务架构作为工具来进行开发和部署应用的时候,基本的 Web 服务规范,像 WSDL , SOAP ,以及 UDDI 就不能满足这些高级需求。正如前面所提到的,这些需求也称作服务品质( QoS , quality of services )。与 QoS 相关的众多规范已经由一些标准化组织( standards bodies )提出,像 W3C ( World Wide Web Consortium )和 OASIS ( the Organization for the Advancement of Structured Information Standards )。下面的部分将会讨论一些 QoS 服务和相关标准。

  安全

   Web 服务安全规范用来保证消息的安全性。该规范主要包括认证交换, 消息完整性和消息保密。该规范吸引人的地方在于它借助现有的安全标准,例如, SAML ( as Security Assertion Markup Language )来实现 web 服务消息的安全。 OASIS 正致力于 Web 服务安全规范的制定。

  可靠

  在典型的 SOA 环境中,服务消费者和服务提供者之间会有几种不同的文档在进行交换。具有诸如“仅且仅仅传送一次”( once-and-only-once delivery ),“最多传送一次”( at-most-once delivery ),“重复消息过滤”( duplicate message elimination ),“保证消息传送”( guaranteed message delivery )等特性消息的发送和确认,在关键任务系统( mission-critical systems )中变得十分重要。 WS-Reliability 和 WS-ReliableMessaging 是两个用来解决此类问题的标准。这些标准现在都由 OASIS 负责。

  策略

  服务提供者有时候会要求服务消费者与某种策略通信。比如,服务提供商可能会要求消费者提供 Kerberos 安全标示,才能取得某项服务。这些要求被定义为策略断言( policy assertions )。一项策略可能会包含多个断言。 WS-Policy 用来标准化服务消费者和服务提供者之间的策略通信。

  控制

  当企业着手于服务架构时,服务可以用来整合数据仓库( silos of data ),应用程序,以及组件。整合应用意味着例如异步通信,并行处理,数据转换,以及校正等进程请求必须被标准化。在 SOA 中,进程是使用一组离散的服务创建的。 BPEL4WS 或者 WSBPEL ( Web Service Business Process Execution Language )是用来控制这些服务的语言。 WSBPEL 目前也由 OASIS 负责。

  管理

  随着企业服务的增长,所使用的服务和业务进程的数量也随之增加,一个用来让系统管理员管理所有运行在多相环境下的服务的管理系统就显得尤为重要。 WSDM ( Web Services for Distributed Management )规定了任何根据 WSDM 实现的服务都可以由一个 WSDM 适应( WSDM-compliant )的管理方案来管理。

  其它的 qos 特性,比如合作方之間的溝通和通訊,多個服務之間的事務處理,都在 WS-Coordination 和 WS-Transaction 標準中描述, 這些都是 OASIS 的工作。

   SOA 不是 Web 服务

  在理解 SOA 和 Web 服务的关系上,经常发生混淆。根据 2003 年 4 月的 Gartner 报道, Yefim V. Natis 就这个问题是这样解释的:“ Web 服务是技术规范,而 SOA 是设计原则。特别是 Web 服务中的 WSDL ,是一个 SOA 配套的接口定义标准:这是 Web 服务和 SOA 的根本联系。”从本质上来说, SOA 是一种架构模式,而 Web 服务是利用一组标准实现的服务。 Web 服务是实现 SOA 的方式之一。用 Web 服务来实现 SOA 的好处是你可以实现一个中立平台,来获得服务,而且随着越来越多的软件商支持越来越多的 Web 服务规范,你会取得更好的通用性。

   SOA 的优势

   SOA 的概念并非什么新东西, SOA 不同于现有的分布式技术之处在于大多数软件商接受它并有可以实现 SOA 的平台或应用程序。 SOA 伴随着无处不在的标准,为企业的现有资产或投资带来了更好的重用性。 SOA 能够在最新的和现有的应用之上创建应用; SOA 能够使客户或服务消费者免予服务实现的改变所带来的影响; SOA 能够升级单个服务或服务消费者而无需重写整个应用,也无需保留已经不再适用于新需求的现有系统。总而言之, SOA 以借助现有的应用来组合产生新服务的敏捷方式,提供给企业更好的灵活性来构建应用程序和业务流程。

   About the author

   Raghu R. Kodali is consulting product manager and SOA evangelist for Oracle Application Server. Kodali leads next-generation SOA initiatives and J2EE feature sets for Oracle Application Server , with particular expertise in EJB , J2EE deployment , Web services , and BPEL. Prior to product management , Kodali held presales and technical marketing positions in Oracle Asia-Pacific , based in Singapore. Prior to Oracle , he worked as software developer with National Computer Systems , Singapore. He holds a master's degree in computer science and is a frequent speaker at technology conferences. Kodali maintains an active blog at Loosely Coupled Corner