《Patterns: Service-Oriented Architecture and Web Services》— IBM Redbooks 经典 SOA 著作
来源:IBM Redbooks(SG24-6303-00,2004年4月第一版) 作者:Mark Endrei, Jenny Ang, Ali Arsanjani 等 8 位 IBM 架构师 云盘路径:/田浩然上传的资料/0B105-SoftwareArchitecture/CS-PKU-SA/Service—Oriented architecture and Web Services.pdf 规模:370 页,8 章 + 附录,文字版 PDF
一、书籍定位
这是 IBM 在 SOA 早期(2004 年)出版的一本里程碑式红皮书,系统阐述了:
- 什么是 SOA(面向服务架构)及其业务驱动力
- SOA 方法论:从业务需求到服务识别的七步法
- 技术选型全景:传输层、消息协议、服务描述、注册中心、安全、事务、管理
- 四大 SOA 模式实践:HTTP 服务总线、JMS 服务总线、服务目录(UDDI)、Web 服务网关
- IBM Patterns for e-business 分层资产模型与 SOA 的结合
注:本书技术栈基于 IBM WebSphere 5.x 和 J2EE 1.3,部分产品已过时,但架构思想、方法论和模式分类至今仍有参考价值。
二、SOA 核心概念
2.1 业务驱动力:为什么需要 SOA?
IT 行业长期面临的核心矛盾:
- 业务变化越来越快,IT 系统响应迟缓
- 遗留系统孤岛,集成成本高昂
- 点对点集成呈指数级增长,维护困难
- 复用率低,每个项目从头开始
- 技术锁定,供应商绑定严重
SOA 的目标是:以服务为核心单元,将业务功能封装为可发现、可复用、可组合的标准化服务,从而提升业务敏捷性和 IT 资产复用率。
2.2 SOA 的定义
SOA 是一种架构风格,其核心特征:
- 松耦合(Loose coupling):服务消费者与提供者解耦,不感知对方实现细节
- 粗粒度(Coarse-grained):服务以业务功能为单位,而非细粒度对象操作
- 接口契约(Contract-based):通过标准化接口描述(WSDL)定义服务交互
- 位置透明(Location transparency):消费者不需知道服务物理位置
- 协议独立(Protocol neutral):底层传输协议可替换(HTTP/JMS/SMTP 等)
- 可发现(Discoverable):通过注册中心动态查找服务
2.3 从 OO → 组件 → 服务的演进路径
书中梳理了软件工程的三代复用技术:
| 阶段 | 核心单元 | 粒度 | 复用范围 | 问题 |
|---|---|---|---|---|
| 面向对象(OO) | 对象(Object) | 细粒度 | 项目内 | 粒度太小,缺乏标准,跨系统复用困难 |
| 基于组件(CBD) | 组件(Component) | 中粒度 | 应用内 | 黑箱封装,但组件标准不统一,跨平台难 |
| 面向服务(SOA) | 服务(Service) | 粗粒度 | 企业内/跨企业 | 标准化接口,跨平台,以业务功能为单位 |
关键洞见:组件是服务的实现载体,服务是组件的对外暴露。 组件使用一组技术协同工作(可以是 OO 语言 + 遗留系统封装),而服务通过一致的发布接口被访问。
2.4 SOA 的收益
- 业务敏捷性:快速组合现有服务响应新业务需求
- 资产复用:业务功能一次实现,多处调用
- 降低集成成本:标准化接口替代点对点集成
- 技术灵活性:底层实现可替换,不影响消费者
- 渐进式演进:可从现有系统逐步封装服务,不需推倒重来
三、Web 服务架构(WUS 协议栈)
3.1 Web 服务三要素
即经典的 WUS 栈(WSDL + UDDI + SOAP):
-
SOAP(Simple Object Access Protocol)
- 消息通信协议,基于 XML
- 信封(Envelope)+ 头(Header)+ 体(Body)结构
- 支持多种传输协议绑定(HTTP、JMS、SMTP 等)
-
WSDL(Web Services Description Language)
- 服务接口描述语言,XML 格式
- 描述服务做什么(操作)、在哪里(地址)、怎么调用(消息格式)
- 核心元素:types、message、portType、binding、service
-
UDDI(Universal Description, Discovery, and Integration)
- 服务注册与发现机制
- 白页(企业信息)、黄页(分类)、绿页(技术接口)
- 支持静态绑定和动态发现
3.2 Web 服务与 SOA 的关系
Web 服务是实现 SOA 的一种技术手段,但 SOA 不等于 Web 服务。
- SOA 是架构风格/设计理念
- Web 服务是最流行的 SOA 实现技术(因为标准化程度最高、跨平台最好)
- SOA 也可以用其他技术实现(如 CORBA、DCOM、消息队列等)
3.3 互操作性问题
Web 服务的互操作性不是理所当然的。书中强调 WS-I Basic Profile 的重要性——它定义了 Web 服务规范的子集和使用约束,确保不同厂商实现之间可以互操作。
常见互操作性陷阱:SOAP 编码方式不统一、命名空间处理差异、数据类型映射不一致、SOAP Action 头缺失等。
四、企业服务总线(ESB)
4.1 从点对点到服务总线
点对点集成的问题:
- N 个系统 → N*(N-1)/2 条连接,指数级增长
- 每条连接需要独立的适配、转换、安全管理
- 变更影响大,牵一发而动全身
服务总线模式:所有系统连接到一条总线上,由总线负责路由、转换、传输协议桥接。
4.2 ESB 的核心能力
IBM 在书中给出的 ESB 定义:
- 传输协议转换(HTTP ↔ JMS ↔ SMTP 等)
- 消息格式转换(XML ↔ 二进制 ↔ 自定义格式)
- 消息路由(基于内容、基于规则的智能路由)
- 服务注册与发现(动态定位服务提供者)
- 事件驱动(发布/订阅消息模式)
- 服务质量保障(可靠性、安全性、事务)
4.3 ESB 的两种技术实现
书中分别用两章详细讨论:
-
HTTP 服务总线(第6章)
- 基于 HTTP/SOAP 协议
- 适合同步请求-响应模式
- 跨防火墙友好
- IBM 实现:WebSphere Application Server + HTTP 传输
-
JMS 服务总线(第7章)
- 基于消息中间件(IBM WebSphere MQ)
- 适合异步、可靠通信
- 支持发布/订阅、点对点
- 事务性更好,适合企业内部集成
五、SOA 七步方法论(核心)
本书第4章提出了一套完整的 SOA 服务识别与设计方法,共 7 步,以供应链管理(SCM)为贯穿案例。
步骤 1:领域分解(Domain Decomposition)
目标:从业务视角拆解,识别候选服务。
方法:
- 按业务领域划分功能区域
- 识别业务用例(Business Use Cases)
- 将用例归类到功能子域
- 每个业务用例 → 一个候选服务
输出:功能域分解图 + 业务用例列表
案例(WS-I SCM):8 个用例分布在零售商、仓库、制造商、日志设施等功能域。
步骤 2:目标-服务模型(Goal-Service Model Creation)
目标:自顶向下验证服务完整性,防止遗漏。
方法:
- 从业务高层目标出发
- 逐层分解为子目标(Goal → Sub-goal → Service)
- 每个目标对应实现它的服务
- 与步骤 1 的候选服务交叉验证
输出:目标-服务树(Goal-Service Tree)
核心思想:自底向上(领域分解)+ 自顶向下(目标分解),两端对齐,确保服务既覆盖业务需求,又有合理的粒度。
步骤 3:子系统分析(Subsystem Analysis)
目标:检查现有系统,识别已有功能的服务化潜力。
方法:
- 盘点现有应用和遗留系统
- 评估哪些功能可以封装为服务
- 识别需要新建的服务
- 考虑服务的归属(哪个子系统提供)
输出:现有系统服务映射 + 新建服务清单
步骤 4:服务分配(Service Allocation)
目标:将服务分配到子系统/组件中。
方法:
- 按业务关联性聚合服务
- 每个服务分配给一个服务提供者(子系统)
- 定义服务之间的依赖关系
- 考虑服务的可复用性和自治性
输出:服务-子系统分配图
步骤 5:组件规格说明(Component Specification)
目标:定义实现服务的组件细节。
方法:
- 服务由组件实现
- 定义组件的接口、操作、数据模型
- 定义组件之间的交互
- 考虑非功能性需求
输出:组件规格说明书
步骤 6:用模式结构化组件与服务
目标:应用架构模式优化服务结构。
方法:
- 使用 IBM Patterns for e-business 分层模式
- 业务模式 → 应用模式 → 运行时模式 → 产品映射
- 选择合适的集成模式(直连/代理/串行/并行)
输出:架构模式选型 + 运行时拓扑
步骤 7:技术实现映射(Technology Realization Mapping)
目标:将逻辑架构映射到具体技术产品。
方法:
- 根据运行时模式选择产品
- 考虑现有投资、技术栈、团队技能
- 定义部署拓扑
- 规划实现路径
输出:产品映射方案 + 部署架构
注意:书中的产品映射基于 IBM WebSphere 5.x 平台,技术栈已过时,但方法步骤仍然有效。
六、技术选型全景
第5章对 SOA 各层技术做了系统性梳理,是全书知识密度最高的章节之一。
6.1 传输层(Transport)
| 协议 | 特点 | 适用场景 |
|---|---|---|
| HTTP | 简单、广泛、跨防火墙 | 同步 Web 服务,B2B |
| JMS | 异步、可靠、事务性 | 企业内部集成,松耦合 |
| SMTP | 异步、离线、非实时 | 邮件驱动的业务流程 |
| HTTPR | 可靠 HTTP | 需要可靠性的 HTTP 场景(IBM 提出) |
6.2 消息协议层
- SOAP:Web 服务标准消息格式,XML 编码
- SOAP 消息结构:Envelope(信封)包含 Header(可选头)和 Body(正文)
- 支持 RPC 风格和 Document 风格
6.3 服务描述层
| 技术 | 定位 | 特点 |
|---|---|---|
| XML Schema | 数据类型定义 | 定义消息结构和数据类型 |
| WSDL | 服务接口描述 | 操作、消息、绑定、端口 |
| ebXML | B2B 商务标准 | 比 WSDL 更重,包含业务流程、协作协议 |
6.4 服务注册层
- UDDI:Web 服务注册标准
- 白页:企业基本信息
- 黄页:行业分类
- 绿页:技术接口详情
- 静态 vs 动态发现:设计时绑定 vs 运行时查找
6.5 业务流程层
- WSFL(IBM):Web 服务流语言
- XLANG(Microsoft):Web 服务业务流程设计语言
- 当时正在演进中的标准:BPEL4WS(即后来的 BPEL)
这一部分反映了 2004 年的标准竞争格局。最终 BPEL(WS-BPEL)成为主流,但也逐步被更轻量的方案替代。
6.6 安全架构(分层安全模型)
SOA 的安全是分层的,每层解决不同问题:
-
传输层安全:SSL/TLS,保证传输机密性和完整性
- 优点:简单、成熟、性能好
- 缺点:点到点,不支持端到端安全
-
消息层安全:WS-Security
- SOAP 消息签名、加密、安全令牌
- 支持端到端安全
- 支持多种安全令牌(X.509、用户名/密码、Kerberos)
-
服务描述层安全:安全策略声明
- 在 WSDL/策略中声明服务安全要求
6.7 事务与管理
- 事务:WS-Transaction(当时为新兴标准),处理分布式事务协调
- 管理:Web 服务的可管理性规范,监控、日志、计量
书中多次标注「Emerging standards」(新兴标准),反映了 2004 年 SOA 技术栈快速演进的状态。WS-* 家族规范在此后几年大量涌现,也因过于复杂而被微服务时代的简化方案替代。
七、四大 SOA 模式实践
第6-9章分别深入四个典型 SOA 场景,每个都包含完整的设计指南、开发指南、运行时指南和最佳实践。
| 模式 | 对应章节 | 核心问题 | 关键技术 |
|---|---|---|---|
| HTTP 服务总线 | 第6章 | 基于 HTTP 的服务集成 | SOAP over HTTP + 服务总线 |
| JMS 服务总线 | 第7章 | 基于消息队列的异步集成 | JMS + MQ + 服务总线 |
| 服务目录 | 第8章 | 服务的注册、发现与动态绑定 | UDDI + WSDL |
| Web 服务网关 | 第9章 | 跨防火墙的服务安全访问 | 网关 + 安全 + 协议转换 |
关键模式:服务网关(Service Gateway)
服务网关的作用:
- 安全边界:企业内外网之间的安全控制点
- 协议转换:外部 HTTPS ↔ 内部 JMS/HTTP
- 消息过滤:请求验证、授权、审计
- 服务虚拟化:隐藏内部服务拓扑
这一模式与微服务架构中的 API Gateway 本质上是同一种模式,只是技术栈不同。核心思想完全一致。
八、IBM Patterns for e-business 分层模型
本书的一个特色是将 SOA 放入 IBM 成熟的电子商务模式框架中。这个框架分为 7 层:
业务模式(Business Patterns)
↓ 4 种核心模式:自助服务 / 信息聚合 / 协作 / 扩展企业
集成模式(Integration Patterns)
↓ 应用集成、流程集成
应用模式(Application Patterns)
↓ 直连 / 代理 / 串行 / 并行
运行时模式(Runtime Patterns)
↓ 定义中间件节点和拓扑
产品映射(Product Mappings)
↓ 具体产品选型
最佳实践指南(Best-Practice Guidelines)
↓ 设计、开发、部署、管理
使用方法:从业务问题出发,自上而下逐层细化,每一层都有经过验证的模式可复用。
四种核心业务模式
- 自助服务(Self-Service / User-to-Business):用户直接与企业应用交互(如在线查询保单)
- 信息聚合(Information Aggregation / User-to-Data):从多数据源提取信息(如商业智能)
- 协作(Collaboration / User-to-User):人与人之间的协作(如邮件、视频会议)
- 扩展企业(Extended Enterprise / Business-to-Business):跨企业业务流程集成(如供应链、EDI)
应用集成的四种模式
- 直连模式(Direct Connection):服务消费者与提供者直接通信
- 代理模式(Broker):通过中央代理进行消息路由和转换
- 串行流程(Serial Process):多个服务按顺序执行
- 并行流程(Parallel Process):多个服务并发执行
这些模式与后来企业集成模式(EIP)中的分类高度一致,是分布式系统集成的经典模式。
九、最佳实践精华
书中第6章末尾总结了 HTTP 服务总线的最佳实践,对 SOA 设计有普遍参考价值:
设计最佳实践
- 服务接口设计要面向业务,而非面向技术
- 采用粗粒度服务接口,减少远程调用次数
- 消息格式使用 Document 风格而非 RPC 风格,灵活性更好
- 版本管理:服务接口变更需要版本控制,向后兼容
互操作最佳实践
- 遵循 WS-I Basic Profile,避免使用规范中模糊的部分
- 测试时使用多平台交叉验证
- 注意数据类型映射(如 Java 类型 ↔ XML Schema 类型)
性能最佳实践
- 减少序列化/反序列化开销
- 合理使用缓存
- 异步处理长耗时操作
- 考虑消息压缩
十、历史定位与当代反思
历史价值
- 这本书是 SOA 早期最系统的实践指南之一,代表了 IBM 在 SOA 领域的完整方法论
- 提出的服务识别七步法、ESB 架构、服务网关等概念影响了整个行业
- Patterns for e-business 分层模型是架构方法学的经典范例
技术演进(2004 → 今天)
书中很多当时的「新兴标准」和产品已成为历史:
- ✅ SOAP/WSDL → 仍在企业级系统中广泛使用,但 REST/JSON 已成为主流
- ⚠️ UDDI → 基本被弃用,服务发现转向 DNS、注册中心(如 Nacos、Consul)
- ⚠️ WS-* 系列规范 → 过于复杂,大部分未被广泛采纳
- ✅ ESB 模式 → 思想延续,但实现转向云原生 API Gateway 和 Service Mesh
- ✅ 服务网关 → 模式完全有效,演变为 API Gateway / BFF / Ingress
核心思想的延续
SOA 与微服务的关系:
- 相同点:松耦合、服务化、接口契约、复用
- 不同点:SOA 偏重企业级集成和 ESB 集中式治理;微服务偏重独立部署、去中心化、团队自治
- 传承关系:微服务在很多方面是 SOA 思想的演进和轻量化
一句话总结:SOA 的架构思想没有过时,过时的是实现技术栈。 理解 SOA 的经典理论,有助于更好地理解微服务、Service Mesh 等后续架构风格的来龙去脉。
关联笔记
- 软件体系结构-周立新Lecture-1-概述 — 课程视角的 SOA 简介
- 软件体系结构-第1讲-概述 — 北大课程版本的软件架构概述
- 企业架构EA — 更高层级的架构方法论(待创建)
- 微服务架构 — SOA 思想的当代演进(待创建)
处理信息
- 处理日期:2026-08-31
- 处理方式:PDF 文本提取(pdftotext)+ 人工消化整理
- 文件状态:全书 370 页,本次整理覆盖第1-5章核心概念 + 模式框架,第6-9章实践细节可后续按需深入