18-面向服务架构设计实践(第18小时)
软考-系统架构设计师 | 第4篇 架构设计实践知识 出题形式:下午案例分析题(必出 25 分)+ 上午选择题(2-5 分)+ 论文题 分值占比:约 25-30 分(重点!必出案例)
0. 考点分析
- SOA 与微服务对比:粗粒度 vs 细粒度、集中式 vs 去中心化
- SOA 参考架构 6 大类:业务逻辑服务/控制服务/连接服务/业务创新优化/开发服务/IT 服务管理
- Web Service 三大协议:UDDI / WSDL / SOAP + REST
- SOA 8 大设计原则:无状态、单一实例、明确定义接口、自包含模块化、粗粒度、松耦合、重用、互操作
- 3 大设计模式:服务注册表、企业服务总线(ESB)、微服务
- 4 种微服务架构模式:聚合器、链式、数据共享、异步消息
- SOA 实施过程:服务模型 + 业务流程
1. 核心架构知识
1.1 SOA 与微服务对比
| 维度 | SOA | 微服务 |
|---|---|---|
| 服务粒度 | 粗粒度 | 更加精细 |
| 存在方式 | 多以应用形式 | 独立的进程 |
| 通信方式 | ESB 重通信、智能路由 | HTTP RESTful,轻量级 |
| 部署 | 倾向于集中式部署 | 分布式去中心化 |
| 适用场景 | 企业级,传统业务 | 互联网业务 |
| 接口方式 | WSDL/SOAP 等重量级 | HTTP RESTful 通用化 |
| 高并发 | 一般 | 局限(无调用关系时才有提升) |
1.2 SOA 参考架构(IBM WebSphere 6 大类)
| 类别 | 描述 |
|---|---|
| 业务逻辑服务 | 实现业务逻辑的服务和执行能力(业务应用服务、业务伙伴服务、应用和信息资产) |
| 控制服务 | 实现人(People)、流程(Process)、信息(Information)集成的服务 |
| 连接服务 | 通过企业服务总线(ESB)实现服务间连接性 |
| 业务创新和优化服务 | 监控业务系统运行时服务的业务性能,并采取措施适应市场变化 |
| 开发服务 | 贯彻整个软件生命周期,从需求分析到建模、设计、开发、测试、维护 |
| IT 服务管理 | 支持业务系统运行的基础设施管理或服务(安全、目录、系统管理、资源虚拟化) |
1.3 SOA 主要协议和规范
1.3.1 三大基础协议
| 协议 | 含义 | 作用 |
|---|---|---|
| UDDI | 统一描述、发现和集成 | 商业实体彼此发现,定义在 Internet 上互相作用 |
| WSDL | Web 服务描述语言 | XML 语言,描述 Web 服务的 3 个基本属性 |
| SOAP | 简单对象访问协议 | 分散/分布式环境中交换信息的简单协议,基于 XML |
WSDL 描述的 3 个基本属性:
- 服务做些什么—服务所提供的操作(方法)
- 如何访问服务—数据格式以及必要协议
- 服务位于何处—协议相关的地址,如 URL
1.3.2 REST 规范
为了让不同的软件/应用程序在任何网络环境下都可以进行信息传递。微服务对外以 REST API 形式暴露给调用者。
REST 4 大核心:
| 核心 | 含义 |
|---|---|
| 资源 | 互联网中一切暴露给客户端的事物 |
| 表述 | REST 中用表述描述资源在 Web 中某一时间的状态 |
| 状态转移 | 应用状态(客户端)+ 资源状态(服务端) |
| 超链接 | 通过嵌入链接和其他资源建立联系 |
1.4 SOA 设计的标准要求
| 标准 | 内容 |
|---|---|
| 文档标准化 | 平台独立的自我描述 XML 文档(WSDL) |
| 通信协议标准 | 使用 XML Schema(XSD)定义消息 |
| 应用程序统一登记与集成 | 通过 Registry(UDDI)维护 |
| 服务质量(QoS) | 可靠性、安全性、策略、控制、管理 |
控制语言:BPEL4WS 或 WSBPEL(Web Service Business Process Execution Language)
管理协议:WSDM(Web Services Distributed Management)
1.5 SOA 8 大设计原则
- 无状态:避免服务请求者依赖于服务提供者的状态
- 单一实例:以高内聚的实现方法,避免功能冗余
- 明确定义的接口:WSDL 定义接口,划分公共接口与内部实现
- 自包含和模块化:封装稳定、重复出现的活动和组件
- 粗粒度:服务数量不大,消息交互而非 RPC,交互频度低
- 服务之间的松耦合性:服务使用者看到的是接口
- 重用能力:服务可以复用
- 互操作性、兼容和策略声明:利用策略定义可配置的互操作语义
1.6 SOA 的作用
主要作用:打破信息孤岛,把应用和资源转换成服务;把这些服务变成标准的服务,形成资源的共享。
1.7 SOA 设计模式(3 大类)
1.7.1 服务注册表模式
支持驱动 SOA 治理的服务合同、策略和元数据的开发、发布和管理。
- 服务注册:服务提供者向注册表公布功能
- 服务位置:服务应用开发者查询注册服务
- 服务绑定:服务消费者利用服务合同开发代码,绑定、调用注册服务
1.7.2 企业服务总线(ESB)模式
提供标准的软件底层架构,各种组件以服务单元方式"插入"到平台运行,以标准消息通信方式交互。
6 大核心功能:
- 提供位置透明性的消息路由和寻址服务
- 提供服务注册和命名的管理功能
- 支持多种消息传递范型(请求/响应、发布/订阅)
- 支持多种传输协议
- 支持多种数据格式及其相互转换
- 提供日志和监控功能
1.7.3 微服务模式
将大型单个应用或服务拆分成多个微服务,可扩展单个组件而不是整个应用程序堆栈,从而满足服务等级协议。
5 大特点:
- 复杂应用解耦:单一模块应用分解为多个微服务,保持总体功能不变
- 独立:微服务在系统软件生命周期中是独立开发、测试、部署的
- 技术选型灵活:去中心化,每个团队可选择合适的技术
- 容错:故障隔离在单个服务中,其他微服务可重试、平稳退化
- 松耦合,易扩展:每个服务之间松耦合,可独立扩展
1.8 4 种微服务架构模式方案
| 模式 | 描述 |
|---|---|
| 聚合器微服务 | 聚合器充当流程指挥者,调用多个微服务实现系统所需功能 |
| 链式微服务 | 收到请求后,发生多个服务间的嵌套递归调用,返回合并处理的响应 |
| 数据共享微服务 | 适用于从单体到微服务的过渡阶段,服务间存在强耦合(如共享缓存与数据库) |
| 异步消息传递微服务 | 对不必同步运行的业务逻辑,使用消息队列代替 REST 实现请求、响应 |
1.9 微服务架构面临的问题与挑战
- 服务发现与服务调用链跟踪变得困难
- 很难实现传统数据库的强一致性,转而追求最终一致性
1.10 构建 SOA 应注意的问题
原有系统集成需求:
- 应用程序集成的需求
- 终端用户界面集成的需求
- 流程集成的需求
- 已有系统信息集成的需求
服务粒度控制:
- 暴露在系统外部的服务推荐使用粗粒度的接口
- 相对较细粒度的服务接口通常用于企业系统架构的内部
无状态服务设计:SOA 架构中的服务应该是无状态的,不应依赖于其他服务的上下文和状态。
1.11 SOA 实施过程
选择 SOA 解决方案的 3 个方面:
- 尽量选择能进行全局规划的方案
- 选择时充分考虑企业自身的需求
- 从平台、实施等技术方面进行考察
业务流程分析:
- 建立服务模型:自顶向下分解法、业务目标分析法、自底向上分析法
- 建立业务流程:建立业务对象(实体、过程、事件等)→ 建立服务接口 → 建立服务流程
1.12 实践案例
案例 1:银行核心系统 SOA 改造
- 业务领域拆分为账户、存款、贷款、支付、风险等服务
- 通过 ESB 集成遗留系统
- 使用 BPEL 编排业务流程
案例 2:电商系统的微服务化
- 拆分为商品、订单、库存、支付、用户、推荐 6 大微服务
- Spring Cloud Alibaba(Nacos/Sentinel/Seata)
- 通过 Feign + Ribbon 实现服务调用
- 异步消息用 RocketMQ
2. 关键概念速查
| 概念 | 定义/说明 | 常见考点 |
|---|---|---|
| SOA | Service-Oriented Architecture | 面向服务架构 |
| WSDL | Web Services Description Language | 描述 Web 服务的 XML |
| UDDI | Universal Description Discovery and Integration | 服务注册与发现 |
| SOAP | Simple Object Access Protocol | 简单对象访问协议 |
| REST | Representational State Transfer | 资源表述性状态转移 |
| ESB | Enterprise Service Bus | 企业服务总线 |
| BPEL | Business Process Execution Language | 业务流程执行语言 |
| WSDM | Web Services Distributed Management | Web 服务分布式管理 |
| XSD | XML Schema Definition | XML 模式定义 |
| RESTful | 满足 REST 设计约束的架构 | 资源+表述+状态转移+超链接 |
| 聚合器模式 | Aggregator | 指挥者调用多个微服务 |
| 链式模式 | Chained | 服务嵌套递归调用 |
| 数据共享 | Shared Data | 过渡阶段共享缓存/DB |
| 异步消息 | Asynchronous Messaging | MQ 代替 REST |
| 粗粒度 | Coarse-grained | 外部接口推荐 |
| 细粒度 | Fine-grained | 内部接口使用 |
| DSS | Data Storage Segregation | 数据存储隔离 |
3. 典型例题(案例分析题)
例题 1:选择题(陷阱题)
题目:下列关于 SOA 与微服务的描述,错误的是( )。
A. 微服务相比于 SOA 更加精细,微服务更多地以独立的进程的方式存在,互相之间并无影响 B. 微服务提供的接口方式更加通用化,例如 HTTP RESTful 方式,各种终端都可以调用 C. 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合 D. 微服务更容易实现出高并发的特性,有助于实现互联网业务的秒杀促销活动
参考答案:D 解析:微服务在实现高并发方面是局限的。只有没有调用关系的微服务,相对于单体服务来说,才有并发性的提升。
例题 2:选择题
题目:下列选项( )不是关于 SOA 的服务架构。
A. 业务逻辑服务 B. 中间件服务 C. 连接服务 D. 控制服务
参考答案:B 解析:SOA 的参考架构包括 6 类:业务逻辑服务、控制服务、连接服务、业务创新和优化服务、开发服务、IT 服务管理。没有"中间件服务"。
例题 3:选择题
题目:WSDL 规范描述了 Web 服务的 3 个基本属性:( )。
A. 服务做些什么 / 如何访问服务 / 服务位于何处 B. 服务做些什么 / 如何调用服务 / 服务性能 C. 服务接口 / 数据格式 / 调用方式 D. 服务可用性 / 数据格式 / 服务位置
参考答案:A 解析:
- 服务做些什么:服务所提供的操作(方法)
- 如何访问服务:数据格式以及必要协议
- 服务位于何处:协议相关的地址,如 URL
例题 4:选择题
题目:SOA 的设计原则为无状态、单一实例、明确定义的接口、( )、粗粒度、服务之间的松耦合性、重用能力、互操作性。
A. 复用性和构件化 B. 自包含和模块化 C. 独立性和构件化 D. 隔离性和归一化
参考答案:B 解析:SOA 8 大设计原则之一是自包含和模块化。
例题 5:选择题
题目:微服务架构将一个大型的单个应用或服务拆分成多个微服务……每个服务可以( )。
A. 独立进行开发、管理、迭代 B. 独立进行部署、运维、升级 C. 独立进行测试、交付、验收 D. 独立进行发布、发现、访问
参考答案:A 解析:微服务围绕业务领域拆分,每个服务可以独立进行开发、管理和迭代。
4. 论文素材
本章是论文题出题范围,以下 3 个题目方向可以重点准备:
论面向服务架构(SOA)在企业级应用系统集成中的应用
- 写作要点:ESB 作用、6 大服务类型、UDDI/WSDL/SOAP 协议应用
- 实战案例:银行/电信系统集成项目
论微服务架构的设计与实践
- 写作要点:服务拆分原则、4 种微服务模式选择、最终一致性
- 实战案例:电商中台化改造
论 SOA 与微服务架构的对比与选型
- 写作要点:粗细粒度、集中/去中心化、ESB 治理
- 实战案例:传统企业 → 互联网企业的架构演进
5. 高频考点
- SOA 与微服务对比:每年必出,重点是高并发的局限性
- SOA 6 大服务类型:易混淆,需逐字记忆
- WSDL 3 大属性:服务做些什么/如何访问/位于何处
- SOA 8 大设计原则:送分题,区分"自包含和模块化"
- ESB 6 大核心功能:经常考简答
- 4 种微服务架构模式:聚合器/链式/数据共享/异步消息
- SOA 实施的 3 方面 + 业务流程分析 2 方面:综合题
- REST 4 大核心:资源/表述/状态转移/超链接