所属篇章:上篇·综合知识
预估分值:8~12 分(核心高分章节)
考查重点:架构风格、架构描述语言(ADL)、基于架构的开发(ABSD)、中间件
难度等级:★★★★★(综合知识和案例分析均高频出题)
一、本章知识图谱
系统架构设计
├── 7.1 软件架构概述
│ ├── 架构的概念与作用
│ └── 架构的层次
├── 7.2 架构风格(重点)
│ ├── 五大类架构风格
│ └── 各风格对比
├── 7.3 特定领域软件架构(DSSA)
├── 7.4 架构描述语言(ADL)
├── 7.5 基于架构的软件开发(ABSD)
├── 7.6 中间件技术
└── 7.7 Web 架构与微服务架构
二、核心考点详解
考点 1:软件架构的概念与层次
1.1 架构在软件开发中的位置
需求分析
↓
【软件架构设计】 ← 本章核心
↓
详细设计
↓
编码实现
↓
测试与维护
1.2 架构设计的输入与输出
1.3 4+1 视图模型(Philippe Kruchten)
| 逻辑视图 | ||
| 开发视图 | ||
| 进程视图 | ||
| 物理视图 | ||
| 场景视图(+1) |
高频考点:4+1 视图是架构描述的标准框架,场景视图起到统一和验证的作用。
考点 2:架构风格(最核心考点)
2.1 数据流风格
| 批处理 | ||||
| 管道-过滤器 |
管道-过滤器的关键特征:
每个过滤器独立运行,不共享状态 过滤器不关心输入输出的来源和去向 数据格式需要统一约定
2.2 调用/返回风格
| 主程序/子程序 | |||
| 面向对象 | |||
| 层次式架构 |
层次式架构关键要点:
- 严格层次
每层只能调用相邻下层 - 松散层次
允许跨层调用(降低灵活性但提高效率) 优点:低耦合、易替换、易测试 缺点:性能开销(层层传递)、不易确定层次边界
2.3 独立组件风格
| 进程通信 | |||
| 事件驱动(隐式调用) |
事件驱动架构关键特征:
组件通过注册-发布-通知机制交互 发布者不知道谁在监听(匿名通信) 监听者不知道谁发布的事件 适合松耦合和可扩展系统
2.4 虚拟机风格
| 解释器 | ||
| 规则系统 |
2.5 仓库风格
| 数据库系统 | ||
| 黑板系统 | ||
| 超文本系统 |
黑板系统关键组成:
- 知识源(KS)
独立的专家模块 - 黑板
全局共享数据结构 - 控制器
协调知识源的活动
考点 3:架构风格对比(案例分析高频出题)
考点 4:特定领域软件架构(DSSA)
DSSA 是针对特定应用领域的一套架构和组织结构。
三个基本活动:
- 领域分析
识别领域中的共性和变化性 - 领域设计
创建领域特定的架构 - 领域实现
开发和复用组件
关键概念:
- 领域模型
描述领域中实体和关系 - 参考需求
领域中的典型需求 - 参考架构
满足参考需求的架构方案
考点 5:架构描述语言(ADL)
ADL 是用于描述软件架构的形式化语言。
| Wright | |
| Rapide | |
| UniCon | |
| Acme | |
| xADL |
ADL 的基本元素:
- 组件(Component)
计算和存储单元 - 连接件(Connector)
组件间交互的媒介 - 约束(Constraint)
组件和连接件组合的规则
考点 6:基于架构的软件开发(ABSD)
ABSD 强调以架构为中心驱动整个开发过程。
ABSD 三大基础:
- 功能分解
将系统分解为功能模块 - 选择架构风格
根据需求选择合适的架构风格 - 软件模板
使用模板指导开发
ABSD 过程:
架构需求 → 2. 架构设计 → 3. 架构文档化 → 4. 架构评审 → 5. 架构实现 → 6. 架构演化
考点 7:Web 架构与微服务
7.1 Web 架构演进
单体架构 → 垂直架构 → SOA → 微服务 → Serverless
7.2 微服务架构特征
| 服务粒度小 | |
| 独立部署 | |
| 去中心化 | |
| 容错设计 | |
| 轻量级通信 | |
| 自动化 |
7.3 微服务的挑战
分布式系统的复杂性(网络延迟、一致性) 服务间通信和协调 分布式事务(Saga 模式) 运维复杂度(需要容器化、编排) 数据一致性(最终一致性)
7.4 微服务 vs SOA
三、历年真题解析
【真题 2020 年·案例分析】
题目:某在线视频处理系统需要将原始视频经过"转码→剪辑→加字幕→渲染"四个步骤处理。请分析该系统适合采用哪种架构风格,并说明理由。
参考答案:
该系统适合采用管道-过滤器(Pipe-Filter)架构风格。
理由分析:
- 数据流特征明确
视频数据按照固定流程经过多个处理步骤,属于典型的线性数据流处理场景 - 各步骤独立
转码、剪辑、加字幕、渲染四个步骤各自独立,不需要共享状态 - 组件可复用
每个处理步骤可以作为独立的过滤器,可在其他流程中复用 - 易于并行
不同视频文件可以同时流经管道,实现并行处理 - 易于扩展
未来如需增加新的处理步骤(如压缩),只需添加新的过滤器即可
【真题 2022 年·综合知识】
题目:以下关于事件驱动架构的叙述中,不正确的是( )。
A. 组件之间通过事件的发布和订阅进行通信
B. 事件的发布者需要知道所有订阅者的身份
C. 事件驱动架构有利于实现松耦合
D. 事件驱动架构适合构建可扩展的系统
答案:B
解析:事件驱动架构的核心优势是匿名通信——发布者不需要知道谁在监听,监听者也不需要知道谁发布了事件。这种匿名性是实现松耦合的关键。
【真题 2023 年·综合知识】
题目:在 4+1 视图模型中,用于验证其他四个视图一致性的是( )。
A. 逻辑视图
B. 进程视图
C. 物理视图
D. 场景视图
答案:D
解析:场景视图(也称用例视图)是"+1"视图,通过具体的用例场景来验证逻辑视图、开发视图、进程视图和物理视图之间的一致性和完整性。
考点 8:架构描述语言(ADL)详解
ADL 的核心元素:
| 组件 | ||
| 连接件 | ||
| 架构配置 | ||
| 约束 |
常见 ADL 对比:
考点 9:特定领域软件架构(DSSA)详解
DSSA 的三个基本活动:
DSSA 的关键概念:
- 领域边界
确定哪些系统属于同一领域 - 共性
领域内所有系统都有的特征 - 变化性
领域内系统间的差异点 - 参考架构
体现共性和变化性的架构方案
三、补充历年真题解析
【真题 2019 年·案例分析】
题目:某语音识别系统需要多个专家模块协作工作,每个专家模块可以独立工作,通过共享的知识库交换信息。请分析该系统适合采用的架构风格。
参考答案:
该系统适合采用黑板系统架构风格(属于仓库风格)。
理由分析:
- 多专家协作
语音识别是典型的不确定问题,需要多个专家模块(如声学专家、语言专家、语义专家)协作求解 - 共享知识库
各专家模块通过黑板(共享知识库)交换信息,而不是直接通信 - 控制器协调
控制器根据黑板状态激活相应的知识源 - 知识源独立
每个专家模块可以独立工作,松耦合
黑板系统组成:
知识源(KS):声学分析、词汇识别、语法分析、语义理解等独立专家模块 黑板:全局共享数据结构,存储中间结果 控制器:根据黑板状态变化激活相应的知识源
【真题 2021 年·综合知识】
题目:在 ABSD(基于架构的软件开发)方法中,架构需求阶段的主要活动不包括( )。
A. 需求获取 B. 标识构件 C. 架构评审 D. 生成类图
答案:C
解析:架构评审是 ABSD 的独立阶段,不属于架构需求阶段。ABSD 架构需求阶段包括需求获取、标识构件、生成类图等。ABSD 的完整过程是:架构需求→架构设计→架构文档化→架构评审→架构实现→架构演化。
【真题 2022 年·综合知识】
题目:某实时监控系统需要持续接收传感器数据并进行实时分析处理。该系统最适合采用( )架构风格。
A. 层次式 B. 仓库式 C. 管道-过滤器 D. 事件驱动
答案:D
解析:实时监控系统需要持续接收数据并实时响应,事件驱动架构能够通过事件触发机制实现实时响应,且具有松耦合、可扩展的特点。管道-过滤器更适合批处理数据流。
【真题 2023 年·综合知识】
题目:以下关于微服务架构与 SOA 架构的对比中,正确的是( )。
A. 微服务通常使用 ESB 进行服务通信
B. SOA 的服务粒度通常比微服务更细
C. 微服务倡导每个服务拥有独立的数据库
D. SOA 强调去中心化的治理
答案:C
解析:微服务的核心原则之一是每个服务拥有独立的数据库(去中心化数据管理)。微服务不使用 ESB(A 错),SOA 粒度更粗(B 错),SOA 强调集中式治理(D 错)。
考点 10:软件架构与生命周期
架构设计在生命周期中的位置:
需求分析 → 架构设计 → 详细设计 → 实现 → 测试 → 部署 → 运维 → 演化
架构设计早期介入,贯穿整个生命周期 架构决策在早期做出,影响整个项目 架构需要在运维和演化阶段持续验证
考点 11:软件架构复用
复用的分类:
复用粒度:
代码复用:函数、类、组件 设计复用:架构风格、设计模式 分析复用:需求模型、领域模型
架构复用过程:
构造/获取可复用资产(组件、模式、框架) 管理可复用资产(分类、存储、检索) 使用可复用资产(检索、适配、组装)
复用障碍:
“非我所创”综合征(NIH) 复用成本(查找、理解、适配) 知识产权和许可证问题
三、补充历年真题解析
真题 2020 年·综合知识
题目:以下关于软件架构复用的叙述中,正确的是( )。
A. 架构复用只包括代码级别的复用
B. 设计模式属于过程复用
C. 复用不会带来任何成本
D. 框架是一种粗粒度的复用方式
答案:D
解析:框架提供了一种应用骨架,开发者在框架基础上进行定制开发,属于粗粒度的架构复用。架构复用不仅包括代码(A 错),设计模式是过程复用的一种形式(B 正确但不如 D 明确),复用有查找/理解/适配等成本(C 错)。
真题 2022 年·综合知识
题目:在 ABSD 方法中,体系结构复审的主要目的是( )。
A. 确定体系结构是否满足需求
B. 编写详细设计文档
C. 进行代码审查
D. 制定测试计划
答案:A
解析:体系结构复审是在架构设计完成后进行的评估活动,主要目的是确认架构设计是否满足需求,识别潜在风险。可以使用 ATAM、SAAM 等方法。
真题 2019 年·综合知识
题目:在 4+1 视图模型中,关注软件模块的组织和打包的是( )。
A. 逻辑视图 B. 开发视图 C. 进程视图 D. 物理视图
答案:B
解析:开发视图(也称实现视图)关注软件模块的组织和打包,面向开发人员。逻辑视图关注功能需求(面向用户),进程视图关注并发(面向系统集成人员),物理视图关注部署(面向运维人员)。
真题 2021 年·综合知识
题目:以下关于 ABSD(基于架构的软件开发)的叙述中,不正确的是( )。
A. ABSD 以架构为中心驱动开发
B. ABSD 包括架构需求、设计、文档化、复审、实现和演化
C. ABSD 的架构需求来自于功能需求和质量属性
D. ABSD 只适用于大型系统
答案:D
解析:ABSD 适用于各种规模的系统,不仅限于大型系统。ABSD 以架构为中心(A 正确),包含完整开发流程(B 正确),架构需求来自功能和质量属性(C 正确)。
真题 2022 年·综合知识
题目:在架构风格中,以下属于虚拟机风格的是( )。
A. 解释器 B. 管道-过滤器 C. 主程序/子程序 D. 黑板系统
答案:A
解析:虚拟机风格包括解释器和规则系统。解释器为特定问题创建自定义的执行环境,规则系统基于规则库进行推理。管道-过滤器属于数据流风格(B 错),主程序/子程序属于调用/返回风格(C 错),黑板系统属于仓库风格(D 错)。
真题 2023 年·综合知识
题目:以下关于软件架构复用的叙述中,正确的是( )。
A. 复用只能发生在代码级别
B. 框架是一种细粒度的复用方式
C. 设计模式属于过程复用
D. 复用总是能降低开发成本
答案:C
解析:设计模式属于过程复用(复用开发经验和方案)。复用不仅限于代码(A 错),框架是粗粒度复用(B 错),复用有查找/适配成本,不一定总能降低成本(D 错)。
真题 2021 年·案例分析
题目:某编译器系统需要将源代码翻译为目标代码。请分析该系统适合采用的架构风格及其理由。
参考答案:
该系统适合采用管道-过滤器架构风格(数据流风格)。
理由:
编译过程是线性处理流程:词法分析→语法分析→语义分析→中间代码→代码优化→目标代码 每个处理步骤可以作为独立的过滤器 过滤器之间通过管道传递数据,松耦合 可以灵活重组过滤器(如增加代码优化阶段) 支持并行执行独立的过滤器
三、补充考点
考点 11:架构设计原则
考点 12:架构决策方法
考点 13:特定领域软件架构(DSSA)
DSSA 三个基本活动:
领域分析:识别领域共同特征和需求 领域设计:建立领域架构参考模型 领域实现:开发可复用组件和工具
DSSA 与通用架构的关系:DSSA 提供特定领域的参考架构,通用架构提供基础模式
考点 14:架构风格深度对比
真题 2023 年·综合知识
题目:以下关于 DSSA(特定领域软件架构)的叙述中,正确的是( )。
A. DSSA 只适用于单一领域
B. DSSA 的三个基本活动是领域分析、领域设计和领域实现
C. DSSA 不涉及可复用组件
D. DSSA 与通用架构没有关系
答案:B
解析:DSSA 的三个基本活动确实是领域分析、领域设计和领域实现。DSSA 可跨领域应用(A 错),核心就是可复用组件(C 错),与通用架构互补(D 错)。
三、补充考点(二)
考点 15:架构视图模型对比
C4 模型四层:
考点 16:常见架构模式
MVC vs MVP vs MVVM 对比:
考点 17:中间件架构深入分析
中间件层次模型:
应用层
↓
中间件层(RPC、消息、对象、交易、Web、ESB)
↓
操作系统层(OS + 网络)
↓
硬件层
中间件分类与应用:
消息中间件对比:
考点 18:架构演化与维护
架构演化驱动力:
架构演化策略:
架构腐化信号:
架构违规:实现偏离了设计的架构 过度耦合:模块间依赖越来越多 功能蔓延:模块承担不属于自己的职责 技术债务累积:临时方案变成永久方案
考点 19:架构文档化与 ADR
架构文档内容:
ADR(Architecture Decision Record):
真题 2023 年·综合知识
题目:在 C4 模型中,描述系统内部容器及其关系的层次是( )。
A. C1 - 系统上下文
B. C2 - 容器
C. C3 - 组件
D. C4 - 代码
答案:B
解析:C2 容器层描述系统内部的容器(Web 应用、数据库、微服务等)及其之间的关系。C1 关注系统与外部的关系,C3 关注容器内部组件,C4 关注代码实现。
真题 2022 年·综合知识
题目:以下关于 MVVM 模式的叙述中,正确的是( )。
A. View 直接与 Model 交互
B. ViewModel 通过数据绑定与 View 通信
C. MVVM 不支持单元测试
D. MVVM 比 MVC 耦合度更高
答案:B
解析:MVVM 模式中,ViewModel 通过数据绑定机制与 View 通信,View 不直接与 Model 交互。数据绑定使得 View 和 ViewModel 松耦合,可测试性好(C 错),耦合度比 MVC 更低(D 错)。
真题 2021 年·综合知识
题目:在架构演化中,绞杀者模式的核心思想是( )。
A. 一次性替换旧系统
B. 新系统逐步替代旧系统的功能
C. 新旧系统永远并行运行
D. 删除旧系统后重新开发
答案:B
解析:绞杀者模式(Strangler Fig Pattern)的核心是将旧系统的功能逐步迁移到新系统,每次迁移一个功能,直到旧系统完全被替代。这降低了整体替换的风险。
真题 2020 年·综合知识
题目:以下关于 Kafka 和 RabbitMQ 的对比中,正确的是( )。
A. Kafka 的吞吐量低于 RabbitMQ
B. RabbitMQ 更适合日志收集场景
C. Kafka 适合大数据流处理,RabbitMQ 适合业务消息
D. RabbitMQ 不支持消息可靠性
答案:C
解析:Kafka 适合大数据流处理和日志收集(高吞吐),RabbitMQ 适合业务消息(低延迟、路由灵活)。Kafka 吞吐量更高(A 错),RabbitMQ 不适合日志场景(B 错),RabbitMQ 支持消息可靠性(D 错)。
真题 2022 年·综合知识
题目:以下关于架构文档化的叙述中,不正确的是( )。
A. 架构文档应包含架构决策及其理由
B. ADR 用于记录重要的架构决策
C. 架构文档只需要在开发完成后编写
D. 架构视图是架构文档的核心内容之一
答案:C
解析:架构文档应在架构设计阶段就开始编写,并随项目演化持续更新,而不是只在开发完成后编写。架构文档包含决策和理由(A 正确),ADR 记录重要决策(B 正确),架构视图是核心内容(D 正确)。
真题 2019 年·综合知识
题目:以下关于架构腐化信号的叙述中,正确的是( )。
A. 架构违规不会影响系统质量
B. 技术债务累积是架构腐化的信号之一
C. 过度耦合不是架构问题
D. 架构腐化只能通过重写解决
答案:B
解析:技术债务累积是架构腐化的典型信号,表示临时解决方案变成了永久方案,增加维护成本。架构违规会影响系统质量(A 错),过度耦合是严重架构问题(C 错),架构腐化可以通过重构解决(D 错)。
真题 2023 年·案例分析
题目:某大型电商平台计划将单体架构迁移到微服务架构。请分析迁移过程中可以采用的架构演化策略,并说明每种策略的优缺点。
参考答案:
架构演化策略分析:
推荐方案:采用绞杀者模式进行迁移
理由:
电商平台是核心业务系统,不能停机,需要渐进式迁移 可以先抽取独立功能(如用户服务、商品服务、订单服务)为独立微服务 通过 API 网关统一路由,逐步将流量切换到新系统 每个微服务独立部署,降低迁移风险 可以逐步验证新架构的正确性,发现问题及时解决
四、高频易错点归纳
五、本章小结
系统架构设计是全书最核心的章节,务必深入掌握:
- 4+1 视图模型
五个视图各自关注的方面 - 五大架构风格
数据流、调用/返回、独立组件、虚拟机、仓库的特征和适用场景 - 架构风格对比
能在案例分析中根据需求选择合适的架构风格 - ABSD
以架构为中心的开发过程 - 微服务架构
与 SOA 的区别,核心特征和挑战 - 架构设计原则
关注点分离、单一职责、依赖倒置、开闭原则 - DSSA
领域分析/设计/实现三个基本活动 - 架构决策
ATAM、CBAM、ADR 的应用 - 视图模型对比
4+1、RM-ODP、C4、Zachman 的区分 - 架构模式
MVC/MVP/MVVM、微前端、六边形、CQRS、边车 - 中间件深入
消息中间件对比(Kafka/RabbitMQ/RocketMQ) - 架构演化
绞杀者模式、架构腐化信号、技术债务 - 架构文档化
ADR 要素、架构文档内容结构