ONEPSOFT | 软考学习知识库
deepread6|论文6 面向服务架构 SOA(ESB / Web Service / REST / 微服务演进)详解
对应清单条目:#6 论文·面向服务架构 SOA(ESB/WebService/REST/微服务演进)
教材来源:《系统架构设计师教程(第 2 版)》第 15 章 面向服务架构设计(15.1–15.9)、第 1 章微服务、第 14 章微服务化
一、知识点定位
一句话定位:SOA 把系统拆成 " 通过中立接口互联的服务 ",用 ESB 总线把异构子系统松耦合地连起来;Web Service(SOAP/WSDL/UDDI) 是经典实现,REST 是轻量风格;微服务是 SOA 去掉重总线、走向去中心化的下一代。
二、教材原文精摘(第 15 章,原封不动)
【SOA 定义】原文:
从软件基本原理定义,SOA 是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式定义的,独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种系统中的服务可以统一和通用的方式进行交互。
作为软件架构师,从软件原理方面的定义对日常工作更具指导性。
【SOA 特点 / 设计原则 15.7】原文:
(1) 无状态:避免服务请求者依赖于服务提供者的状态。
(2) 单一实例:避免功能冗余。
(3) 明确定义的接口:服务的接口由 WSDL 定义,指明公共接口与内部专用实现的界线;服务定义必须长时间稳定。
(4) 自包含和模块化:服务封装稳定重复的活动,功能实体独立自主,独立部署、版本控制、自我管理恢复。
(5) 粗粒度:服务数量不应太大,靠消息交互而非 RPC,交互频度低。
(6) 服务之间的松耦合性:使用者只看接口,位置/实现/状态不可见。
(7) 重用能力:服务应可重用。
【ESB 定义与功能】原文:
企业服务总线 (ESB) 是消息中间件的发展,采用 " 总线 " 模式管理和简化应用间集成拓扑,以开放标准支持应用在消息、事件和服务级别动态互联互通。
ESB 核心功能:①位置透明性的消息路由和寻址;②服务注册和命名管理;③多种消息传递范型(请求/响应、发布/订阅);④多种传输协议;⑤多种数据格式及转换;⑥日志和监控。
【Web Service / UDDI / WSDL / SOAP】原文:
Web Service 是 SOA 最典型应用模式,一个 Web 应用向外提供内部服务。
UDDI(统一描述、发现和集成):使商业实体彼此发现、定义如何交互,并在全球注册架构中共享信息;是 Web 服务集成体系框架,含服务描述与发现规范。
WSDL(Web 服务描述语言):描述 Web 服务三个基本属性——做什么(操作)、如何访问(数据格式与协议)、位于何处(地址 URL)。
SOAP:基于 XML 的协议,含封装、编码规则、RPC 表示、绑定四部分,用于分散/分布式环境交换信息。
【REST】原文:
REST 是 Fielding 提出的概念,是一种设计风格而非架构。借助 HTTP、JSON、URI、HTML 等标准,通过 HTTP 方法操作资源状态。微服务对外即以 REST API 形式暴露。
SOAP 是基于 XML 的协议(含 4 部分);REST 是设计风格,借助 HTTP/JSON/URI/HTML。
【服务注册发现 15.8.1】原文:
服务注册表 (Service Registry) 提供主控制点(策略执行点 PEP),服务可在 SOA 中注册和被发现。治理功能:①服务注册(提供者公布功能);②服务位置(开发者查询符合要求的服务);③服务绑定(消费者用检索到的合同开发代码并调用)。
【SOA 参考架构 15.3】原文:
以服务为中心的企业集成划分 6 大类:业务逻辑服务、控制服务、连接服务(企业服务总线 ESB 提供连接性)、业务创新和优化服务、开发服务、IT 服务管理。
【SOA vs 微服务 15.2.3】原文:
SOA 以企业服务总线链接各子系统,是集中式技术架构,应用服务间相互依赖导致部署复杂。
微服务是 SOA 进一步优化,去除了 ESB 企业服务总线,是真正意义上去中心化的分布式架构,降低耦合,不同微服务采用不同数据库技术、服务独立。
【服务粒度 15.9.2】原文:
对暴露在整个系统外部的服务推荐粗粒度接口,较细粒度接口用于系统内部。通常可用 BPEL 由细粒度操作组成粗粒度服务接口。
三、系统解读(逐段讲透)
核心一句话总结:SOA = 用中立接口把功能拆成服务 + 用 ESB 总线松耦合互联 + 用注册中心做发现;Web Service(SOAP) 是重实现、REST 是轻风格;微服务是 SOA 去总线的下一代。
四、工程实践举例(土木工程视角)
大型项目集成与 SOA 同构:
知识点 ↔ 工程实践 对照表
| 教材知识点要素 | 你的实践场景对应 | 映射说明 |
|---|---|---|
| SOA(中立接口互联服务) | 模块化装配式(标准接口互联) | 接口独立于材料/工艺 |
| ESB 总线(位置透明路由) | 施工现场统一物流总线 | 集中式互联,重但透明 |
| 服务注册中心 UDDI | 分包商名录/资质库 | 注册→查询→绑定 |
| WSDL(接口说明书) | 构件标准接口说明书 | 做什么/怎么接/在哪 |
| SOAP(重 XML 协议) | 正式公文函件 | 重格式规范 |
| REST(轻 HTTP/JSON 风格) | 直接电话/微信对接 | 轻量即时 |
| 微服务去 ESB | 各单体独立物流 | 去中心化自主 |
| 服务粒度(外粗内细) | 分部分项工程划分 | 对外粗粒度工作面 |
当知识点涉及参考架构角色时,补充结构(提供者—注册中心—总线—消费者):
流程图(结构化呈现)
对应关系
| 节点A | 关系 | 节点B |
|---|---|---|
| 服务提供者 | 注册 | 服务注册中心 UDDI |
| 服务消费者 | 查询/绑定 | 服务注册中心 UDDI |
| 服务消费者 | 调用 SOAP/REST | ESB 企业服务总线 |
| ESB 企业服务总线 | 路由 | 服务提供者 |
| 服务提供者 | WSDL 接口说明书 | 服务消费者 |
运维视角提示:ESB 的 " 日志监控、格式转换、位置透明 " 本质就是运维可观测与解耦能力——总线集中了所有调用,监控一处即可看全局(但总线本身是高可用焦点,挂了全瘫,这正是微服务去 ESB 的运维动机)。而 " 无状态服务 " 让扩容/故障迁移极简单,是运维友好的设计。SOA 的运维权衡(集中可控 vs 单点风险)正是该建立的核心判断。