书籍浏览:面向服务架构(SOA)--概念、技术和设计
时间:2005-11-11
作者:David Karr
《Service-Oriented Architecture——Concepts, Technology, and Design》是Thomas Erl所著的《Service-Oriented Architecture——A Field Guide to Integrating XML and Web Services》一书的后续。它不论从内容上来看还是从重量上来看,都不是一本轻松读物。它最初是以精装本的形式出版的,这对于技术书籍来说是不常见的。它共有792页。您可以将这本书视为SOA的罗赛塔石碑(Rosetta Stone,破译了古埃及文字),它澄清了SOA的概念和对它的误解、在部署SOA时要使用哪些组件、进行哪些考虑,并将其与其他架构作了比较。
简介
本书是Thomas Erl所著的《Service-Oriented Architecture——A Field Guide to Integrating XML and Web Services》一书的后续。它不论从内容上来看还是从重量上来看,都不是一本轻松读物。它最初是以精装本的形式出版的,这对于技术书籍来说是不常见的。它共有792页。您可以将这本书视为SOA的罗赛塔石碑(Rosetta Stone,破译了古埃及文字),它澄清了SOA的概念和对它的误解、在部署SOA时要使用哪些组件、进行哪些考虑,并将其与其他架构作了比较。
前一本书主要集中于面向服务架构的启用,涉及到XML和Web Services的集成。在某些地方暗示了采用SOA的好处,但并未明说。
本文将描述的这本书则会打开SOA的大门,说明Web Services的作用,并介绍SOA的一些特性,这些特性Web Services并没有以开箱即用的形式提供,而是让用户自行设计。
它详细地介绍了主要的WS-*扩展、这些扩展相互之间的关系,并推荐了一些具体的开发SOA的流程,从规划到分析直到具体的接口设计。
延续前一本书的模式,它对技术平台的实现介绍得比较少,而是把重点放在SOA和Web服务的设计上。但是,在最后一章中,它从一个比较高的层面上,概览了支持SOA的J2EE和.NET平台中的架构组件。
虽然介绍实际平台支持的最后一章与面向服务的分析和设计内容关系不大,但是从前言中(大家应该都是从前到后按顺序阅读的吧?)可以看出,作者对这方面内容的研究实际上是本书要阐明的其他概念的基础。有了这个基础,作者才能集中于实际平台所支持的概念。
在这本书中,将通过对两个互相之间通过电子商务来往的虚构公司(到最后,一个公司甚至决定收购另一个公司)的案例分析来说明一些原理。
接下来,我将对这本书的章节及其主旨做一摘要。
第一部分:SOA和Web Services基础知识
在这本书后面提供了关于WS-*扩展和具体的SOA开发流程的细节。而第一部分则介绍了必要的基本概念。
这些基本概念的基础是所谓的“基本SOA”和“现代SOA”。基本SOA表示使用“普通的”Web服务所能做到的,而现代SOA则更注重于将Web服务用作策略的一部分的实际SOA。然后它介绍了能够代表好的面向服务架构的特征的一些特性。第三部分和第四部分将更详细地说明这些特征。
首先,书中暗示,市场上没有关于Web Services的常规书籍。书中没有重复对SOA概念的各种不同解释,而是通过说明关于SOA和Web Services的几个被误解的概念,指出了SOA不是什么。它描述了几种其他的软件架构,比如“客户/服务器”、“分布式互联网”和面向对象架构,并解释了这些架构所提供的特性,以及为什么它们不是SOA。
本部分还总结了涉及到SOA和Web Services以及它们之间的关系的标准组织。
第二部分:SOA和WS-*扩展
本部分包括两章内容,介绍了基本WS-*扩展,详细说明了这方面的概念及其相互之间的关系,以及这些概念如何支持现代SOA原理。
这部分的第一章从对消息交换模式即MEP的讨论开始,比如“请求/响应”、“fire-and-forget”,以及更复杂的“发布/订阅”。谈到了MEP与SOAP、WSDL和SOA的关系。然后又讨论了一些概念,如:协调、原子事务、业务活动、编制(Orchestration)和编排(Choreography),以及这些概念与SOA的关系和对SOA的作用。还简要提到了这些概念与旨在支持它们的WS-*扩展之间的关系。
接下来的一章在结构上与前一章类似,介绍了寻址、可靠消息传递、关联、策略、元数据交换、安全性和Notification/Eventing的概念,并简要说明了支持这些概念的WS-*扩展。
第三部分:SOA和面向服务
这部分首先讨论了服务的设计和面向服务原理的使用。
这部分的第一章探讨了一个要点(可能是整本书中最重要的),即前面所确定的SOA的特性。重要的是,在插入Web服务时,应该以开箱即用的形式实现一些基本SOA的特征(如“服务契约”和“服务抽象”)。但是,一些基本SOA的特征(如“可重用性”和“无状态性”)除非通过显式设计才能实现。这一点也在本书的其他地方多次得以验证。这很可能会使实现Web服务就会魔法般地产生SOA的神话破灭。
这部分的第二章首先介绍了SOA的特性以及Web服务和WS-*扩展对那些特征造成了何种影响。然后就引出了服务设计中的服务层的概念。其基本理念是,设计良好的服务应该是应用层、业务层或编制层这些服务层其中一个的一部分。还介绍了这些层之间的关系,以及每一层都有哪些服务。
第四部分:构建SOA(规划和分析)
这一部分的三章内容是关于在现代SOA中,为将业务和应用逻辑安排到服务候选者而进行的规划和分析。
第一章介绍了三种可能的SOA交付策略,它们都与从分析SOA到设计SOA都要用到的高级策略有关。这三种方法分别是:top-down、bottom-up和agile。
top-down策略可以描述为“首先分析”,而bottom-up策略可以描述为“依次设计服务,以满足应用需求”。这两种策略都要进行一些权衡。
这一章以对agile策略的讨论结束,它被视为是对其他两种策略的一种比较好的折衷而推荐使用。这种方法可以描述为“迭代开发”,它具有反复的分析和设计周期。
接下来的两章以前面所学到的原理为基础,引入了面向服务分析的理念。此时SOA交付策略应该已经选定。
以明确定义业务服务而不是应用服务为目标,面向服务分析的步骤以导出一组表示业务需求的服务操作候选者而宣告结束。有许多不同种类的业务服务,以及任务或实体服务。它们因相互之间的关系而区分开来,在本书后面的部分我们将看到这两类服务的开发流程的细微区别。
本部分的最后一章描述了为SOA(由应用层、业务层和编制层组成)建模服务候选者的基本步骤。在这一开发层面上,称之为“候选者”是一个重要的特征,因为随着开发的推进,情况可能会发生变化。与本书的其他章一样,本章使用了来自连续的案例分析的几个非常详细的例子。除了流程步骤外,还描述了每一步以及整个流程应该考虑的一些建模指导原则。这包括针对增强和规划候选服务的重用、均衡对需求的影响以及开发和遵循服务建模标准的指导原则。
接下来讨论了面向服务企业的概念,它是指业务逻辑的单元,这些业务逻辑被安排为构件块(称为服务建模单元),其作用域层次从基本业务活动到企业业务流程。这看起来与前一本书(《ented Architecture——A Field Guide to Integrating XML and Web Services》)的第十四章“Building the Service-Oriented Enterprise (SOE)”(构建面向服务企业)的内容类似。区别在于本书中的这一章并未讨论这些概念性的作用域到更具体的Web服务操作、服务和集成架构的作用域的映射(虽然它也引用了与那本书中相同的一幅图,用来描述这些概念)。
本章以一个非常详细的案例分析结束,它说明了服务建模的方法。
第五部分:构建SOA(技术和设计)
本部分由两个子部分组成。第一部分比较大,由四章组成,重点介绍面向服务设计。接下来的一章又回顾了WS-*扩展,但是这次的重点放在接口的细节上,最后一章将中立地概述J2EE和.NET两种基本开发平台对面向服务架构的支持。
关于面向服务设计的第一章,首先概述了面向服务设计的目标,然后介绍了一组步骤,用于将候选服务划分到服务类型(如:“实体”、“应用”和“任务”)中,并选择应该用于设计中的核心SOA标准和SOA扩展。该章的许多地方都有对XML Schema的语法基础的介绍,因为这关系到WSDL。该章最后讨论了从自动生成到硬编码的WSDL编写策略,以及对WSDL设计工具的要求。
关于面向服务设计的第二章更详细地介绍了服务层和前一章所述的SOA标准/扩展。在决定面向服务架构的服务层时,有一些实际的方面需要考虑。这些方面主要是有关性能、部署和管理的。接下来是在将若干个核心XML组件和WS-*扩展结合到SOA中的过程中会遇到的一些实际问题。例如,提到了使用来自多个源的自动生成XML所带来的不一致问题。还提到了WS-I Basic Profile中的SOAP和WSDL文档设计标准。还谈到了在SOA上下文中使用XML Schema、SOAP、WSDL和UDDI的设计标准。本章最后给出了选择WS-*扩展的一些简要的指导原则(集中于WS-BPEL)。
关于面向服务设计的第三章则深入介绍了应用服务层和业务服务层的细节,描述了设计应用服务、以实体为中心的服务以及以任务为中心的服务的具体步骤。每一套步骤都附有使用该套步骤的详尽的案例分析。本章最后给出了一些设计这些服务的指导原则,比如使用命名标准、注重于粒度性和可扩展性、识别当前和未来的服务请求者、使用模块化WSDL,以及使用元数据说明服务。
关于面向服务设计的最后一章集中于最后一个服务层,编制层,以及可能用于实现编制层的WS-BPEL和WS-Coordination标准的语法元素。编制层的流程服务也有类似于前一章的逐步设计流程。并使用了一个详尽的案例分析例子,该例子使用WS-BPEL定义一个流程服务。
在四章关于关于面向服务设计的内容之后,接下来的一章深入介绍了几个基本WS-*扩展(即:WS-Addressing、WS-ReliableMessaging、WS-Policy、WS-MetadataExchange和WS-Security)的语法元素方面的细节。附有几个详尽的案例分析例子,这些例子使用所有这些扩展定义服务。所有这些例子都是第二部分中相同例子的延续,第二部分中的例子说明了WS-*的概念,而这些例子则指出了那些概念的语法细节。这么做是为了使分析人员和开发人员可以集中于书的不同部分,但是如果您能够同时从两个视角理解这些例子,您会获益更多。
最后一章首先综 述了在开发和运行时实际的SOA平台必须提供的高级组件和块,然后以对J2EE和.NET中的SOA支持的切实中立的概述收尾。
结束语
总而言之,如果您要了解面向服务架构,想知道它是什么、它不是什么、它是什么样的、如何实现,那么本书将为您提供独特而令人感兴趣的内容,以及对一些您曾经遇到困难的概念的简要归纳。
原文出处:
Book Review: Service-Oriented Architecture - Concepts, Technology, and Design
http://dev2dev.bea.com/blog/dkarr/archive/2005/09/book_review_ser.html
作者简介 |
| David Karr是美国华盛顿互惠银行(Washington Mutual)技术解决方案团队的一名软件工程师,他专攻J2EE、XML、Web Services和Unix技术。他是SUN认证的企业架构师,还是Struts-EL标签库的创建者。目前他是西雅图BEA User Group的负责人。 |