架构复习
考试形式:英文卷面,中文作答。复习目标:看到英文题干能识别考点,中文能写出结构化答案,案例题能说明架构决策、质量属性权衡和图中元素。
最高优先级速背
一页纸总表
| 考点 | 必背句 |
|---|---|
| 软件架构定义 | 软件架构是系统的一个或多个结构,包括软件元素、元素外部可见属性以及元素之间的关系;也包括指导系统设计和演化的原则。 |
| Architecture vs Design | 所有架构都是设计,但不是所有设计都是架构;架构关注高层、系统级、重要且难以改变的设计决策。 |
| 质量属性场景 | 用六要素 source、stimulus、artifact、environment、response、response measure 结构化描述质量需求。 |
| ASR | ASR 是对架构产生重大影响的需求,包括关键质量属性、关键约束、核心功能和高风险需求。 |
| Tactic | 战术是影响某个质量属性响应控制方式的设计决策。 |
| Architecture Pattern | 架构模式是宏观结构级的可复用解决方案,通常组合多个战术。 |
| Views | 多视图用于服务不同利益相关者和关注点;单个视图无法表达完整架构。 |
| ATAM | ATAM 用质量属性场景分析架构决策,识别风险、非风险、敏感点和权衡点。 |
| ADD | ADD 以架构驱动因素为输入,通过迭代选择驱动因素、细化元素、选择设计概念、记录决策来生成架构。 |
| C&C | C&C style 描述运行时组件和连接器的交互结构。 |
| SOA | SOA 通过服务契约、封装、复用、组合、自治、无状态等原则提高企业系统互操作和复用。 |
| Microservices | 微服务围绕业务能力拆分服务,服务独立开发、部署、扩展和演进。 |
英文题干识别
| 题干关键词 | 立刻想到 |
|---|---|
| stimulus-response / six elements | 质量属性场景六要素 |
| response measure | 质量需求可测试、可量化 |
| ASR / architecturally significant | 架构显著需求及来源 |
| utility tree | 质量属性逐层拆解、重要性和风险排序 |
| views / viewpoints | 多视图文档化 |
| implementation units | Module views |
| runtime behavior and interactions | C&C views |
| non-software environment | Allocation views |
| 4+1 | Logical、Process、Physical、Development、Scenarios |
| ATAM | 风险、非风险、敏感点、权衡点、utility tree |
| ADD 3.0 | 七步迭代式架构设计方法 |
| design strategies | decomposition、abstraction、divide and conquer、generate and test、iteration、reuse |
| C&C style | components、connectors、attachments、ports、roles |
| SOA | service contract、ESB、interoperability |
| microservices | business capabilities、decentralization、smart endpoints and dumb pipes |
| Strangler Fig | 遗留系统逐步替换 |
| Broker | 分布式对象/服务解耦、中介、动态发现 |
| Pipe-and-Filter | Filter + Pipe,数据流处理 |
质量属性场景
定义与六要素
质量属性场景是描述质量需求的标准模板。它把“系统要高可用、性能好、易修改”这类模糊要求,写成可分析、可测试的结构。
| Element | 中文 | 含义 |
|---|---|---|
| Source of Stimulus | 刺激源 | 谁产生刺激,例如用户、外部系统、攻击者、开发人员 |
| Stimulus | 刺激 | 发生了什么,例如请求、故障、攻击、变更请求 |
| Artifact | 制品 / 受影响对象 | 哪部分系统受到影响,例如服务、组件、数据、接口 |
| Environment | 环境 | 刺激发生时系统处于什么状态,例如正常运行、峰值负载、开发时 |
| Response | 响应 | 系统如何反应,例如处理请求、检测故障、拒绝访问、完成修改 |
| Response Measure | 响应度量 | 如何量化响应是否达标,例如 2 秒内、99.9%、3 人天内 |
默写模板:
一个质量属性场景包括六个部分:刺激源、刺激、受影响制品、环境、响应和响应度量。
它描述在某个环境下,某个刺激源对系统某部分发出刺激,系统应产生什么响应,以及用什么量化指标判断响应是否满足要求。
考试常考质量属性场景表
这张表可以直接当作 quality attribute scenario 的填空模板。考试如果让你画 stimulus-response 图,就从表中选对应质量属性,把六要素展开即可。
| 质量属性 | 刺激源 | 刺激 | 工件 | 环境 | 响应 | 响应度量 | 对应 tactic / 设计理由 |
|---|---|---|---|---|---|---|---|
| Availability | Heartbeat 监视器 | 服务器无响应 | 进程 | 正常操作 | 通知操作者,并继续运行 | 没有停机时间 | heartbeat 用于 detect faults;process monitor / failover 用于自动恢复或继续服务 |
| Interoperability | 本车车辆信息系统 | 发送当前位置 | 路况监控系统 | 系统在运行前已知 | 路况监控系统将当前位置与其他信息结合,叠加到 Google Maps 上,并进行广播 | 我们的信息在 99.9% 的时间被正确包含 | discovery service 用于 locate;orchestrate / tailor interface 用于管理多个系统接口和响应处理 |
| Modifiability | 开发者 | 希望修改 UI | 代码 | 设计时 | 修改完成并进行单元测试 | 在 3 小时内完成 | encapsulate / use an intermediary 降低 UI 与业务逻辑耦合;defer binding 让 UI 变化更局部 |
| Performance | 用户 | 发起事务 | 系统 | 正常操作 | 事务被处理 | 平均延迟为 2 秒 | prioritize events / reduce overhead 控制资源需求;introduce concurrency / caching 管理资源 |
| Security | 来自远程地点、心怀不满的员工 | 尝试修改薪酬标准 | 系统内数据 | 正常操作 | 系统维护审计追踪 | 正确数据在 1 天内恢复,并识别篡改来源 | authenticate / authorize actors 控制访问;verify message integrity / audit log 追踪篡改 |
| Testability | 单元测试者 | 代码单元完成 | 代码单元 | 开发时 | 结果被捕获 | 3 小时内达到 85% 的路径覆盖 | specialized interfaces 控制和观察状态;record/playback 记录测试过程和结果 |
| Usability | 用户 | 下载新应用 | 系统 | 运行时 | 用户高效地使用应用 | 经过 2 分钟试用 / 探索即可达到 | maintain task model / user model 提供引导;cancel、undo、feedback 降低误操作成本 |
General Scenario vs Concrete Scenario
- General scenario:通用场景,与具体系统无关,是质量属性需求的模板。
- Concrete scenario:具体场景,针对某个具体系统,必须包含具体刺激、具体环境和可度量指标。
答题句:
General scenario 用来帮助生成需求,concrete scenario 才是真正可用于某个系统架构设计和评估的质量属性需求。
质量属性场景图模板

对应往年题
- 2015:How to model quality attribute scenarios? Graphically model availability and performance.
- 2017:Graphically model availability and modifiability.
- 2018:Graphically model availability and modifiability.
- 2019:Graphically model interoperability and modifiability.
- 2025:如何描述质量属性场景,描述互操作性和性能的质量属性场景。
质量属性
这一节按单个质量属性复习。每个质量属性都要掌握四类内容:
- 定义:这个属性到底衡量什么;
- 识别词:英文题干里出现什么词要想到它;
- 场景:六要素怎么填;
- 战术:架构上通常怎么实现或改善它。
Availability 可用性
定义:
系统在需要使用时能够提供服务的比例。
常见指标:
Availability = MTBF / (MTBF + MTTR)
其中:
- MTBF = Mean Time Between Failures,平均故障间隔时间。
- MTTR = Mean Time To Repair,平均修复时间。
- MTBF 越大、MTTR 越小,可用性越高。
- 有计划的关闭状态通常不计入不可用时间。
影响不可用时间的阶段:
- detect failure:检测故障。
- correct failure:修复故障。
- restart application:重启应用。
Fault、Error、Failure 区分:
Fault -> Error -> Failure
故障根因 -> 内部错误状态 -> 对外服务失效
| 概念 | 含义 | 例子 |
|---|---|---|
| Fault | 故障根因,导致错误的原因 | 代码缺陷、硬件损坏、配置错误 |
| Error | 系统内部出现的错误状态 | 内存中算出了错误结果、状态变量异常 |
| Failure | 系统对外没有提供预期服务 | 用户看到错误页面、请求超时、服务不可用 |
Outage 是服务中断。Recoverability 可恢复性会影响 Availability,它指系统在发生故障后恢复到原有或可接受状态,并找回或修复受影响数据的能力。
FMECA:
FMECA = Failure Mode, Effects, and Criticality Analysis
故障模式、影响和严重性分析
它用来分析系统可能以什么方式失败、失败造成什么影响、这个失败有多关键。架构设计不能假设系统永远不坏,而要提前考虑检测、隔离、恢复和降级。
| 六要素 | 可用性典型内容 |
|---|---|
| Source | 内部组件、外部系统、运维人员 |
| Stimulus | fault、crash、omission、incorrect response |
| Artifact | 进程、服务、通信通道、存储、节点 |
| Environment | 正常运行、降级模式、过载模式 |
| Response | 检测、记录、通知、切换、恢复、降级服务 |
| Measure | 检测时间、恢复时间、可用性百分比、丢失请求数 |
可直接写的场景:
当系统正常运行时,某个服务实例发生崩溃,故障检测机制应在 5 秒内发现故障,并在 30 秒内将请求切换到备用实例,使 99% 的用户请求不失败。
核心战术:
- Detect faults 检测故障:
- ping / echo:主动询问组件是否仍有响应。
- heartbeat:组件定期发送“我还活着”的信号,超时未收到就认为组件故障。
- voting:多个冗余组件计算结果后投票,偏离多数结果的组件可能出错。
- exception:通过异常机制检测运行时错误,如超时、连接失败、非法输入。
- Recover from faults 故障恢复:
- active redundancy:所有冗余组件并行响应并保持相同状态,故障后快速切换。
- passive redundancy:主组件响应请求并同步状态给备用组件,主故障后备组件接管。
- spare:准备备用计算平台,成本较低但恢复较慢。
- shadow operation:修复组件先影子运行,确认行为正确后再恢复服务。
- state re-synchronisation:恢复组件上线前先同步到最新状态。
- checkpoint / rollback:保存稳定状态,故障后回滚。
- Prevent faults 预防故障:
- removal from service:在组件可能故障前先移出服务进行维护。
- transaction:多个步骤绑定成一个整体,失败时整体撤销。
- process monitor:监控进程故障并自动创建新进程实例。
Performance 性能
定义:
性能关注时间以及软件系统满足时序要求的能力。
所有系统都有性能需求,即使题目没有显式写出来。
响应时间由两部分构成:
- processing time:处理时间,系统正在处理响应。
- blocked time:阻塞时间,系统无法响应或等待资源。
常见响应度量:
| 度量 | 含义 |
|---|---|
| latency | 从请求发出到响应返回的延迟 |
| deadline | 必须完成响应的最后期限 |
| throughput | 单位时间内处理的请求数或事务数 |
| jitter | 响应时间波动 |
| miss rate | 未满足 deadline 或响应要求的比例 |
| 六要素 | 性能典型内容 |
|---|---|
| Source | 用户、外部系统、定时器 |
| Stimulus | 请求到达、事件流、周期事件 |
| Artifact | 服务、组件、队列、数据库 |
| Environment | 正常负载、峰值负载、过载 |
| Response | 处理请求、返回结果、调整优先级、降级 |
| Measure | latency、deadline、throughput、jitter、miss rate |
可直接写的场景:
在系统处于正常负载时,用户提交查询请求,查询服务应处理该请求并在 2 秒内返回结果,95% 的请求满足该响应时间。
核心战术:
- Control resource demand 控制资源需求:
- manage sampling rate:降低采样频率,减少需要处理的数据量。
- limit event response:事件到达过快时排队或限制响应,避免压垮系统。
- prioritize events:关键事件优先处理,低优先级事件延后、降级或丢弃。
- reduce overhead:减少重复计算、数据转换、通信和中间层开销。
- Manage resources 管理资源:
- increase resources:增加 CPU、内存、网络、机器等资源。
- introduce concurrency:通过多线程、多进程、异步任务提高吞吐量。
- maintain multiple copies of computations:多个计算副本配合负载均衡。
- maintain multiple copies of data:缓存或数据复制,提高读取性能,但要处理一致性。
Modifiability 可修改性
定义:
可修改性关注进行修改所需要的时间或金钱成本,以及修改会影响到的范围。
修改成本不仅包括代码修改,也包括理解、测试、部署和风险。
规划可修改性的四个问题:
- What can change? 什么可能变化?
- What is the likelihood of the change? 变化可能性多大?
- When is the change made and who makes it? 何时变化,由谁变化?
- What is the cost of the change? 变化成本是多少?
Environment 常写变化发生的生命周期阶段:
- design time:设计时。
- compile time:编译时。
- build time:构建时。
- deployment time:部署时。
- runtime:运行时。
Response measure 常写:修改时间、修改成本、影响模块数、引入缺陷数。
| 六要素 | 可修改性典型内容 |
|---|---|
| Source | 开发人员、管理员、业务人员、外部系统 |
| Stimulus | 变更请求,例如新增功能、修改接口、改变数据模型 |
| Artifact | 模块、接口、数据、配置、组件 |
| Environment | 设计时、编译时、部署时、运行时 |
| Response | 定位修改点、完成修改、测试、部署 |
| Measure | 修改时间、成本、影响模块数、引入缺陷数 |
可直接写的场景:
在设计时,开发人员提出新增支付方式的变更请求,系统应只修改支付模块并新增一个支付适配器,在 3 人天内完成修改和回归测试。
核心战术:
- Reduce size of a module(减小模块规模):
- split module:大模块包含太多功能时,把它拆成更小、更专一的模块。
- Increase cohesion(提高内聚):
- increase semantic coherence:模块内部职责应服务同一目的,不相关职责应拆开。
- Reduce coupling(降低耦合):
- encapsulate:通过稳定接口访问模块,而不是依赖内部实现。
- use an intermediary:用适配器、代理、服务层、消息队列等中介打断直接依赖。
- refactor:移动职责、提取公共逻辑、重新划分边界,降低变化传播。
- Defer binding(推迟绑定 / 延迟绑定):
- 把参数、配置或实现选择推迟到部署、启动或运行时再决定。
- 常见方式:配置文件、插件机制、依赖注入、运行时参数、服务发现。
Interoperability 互操作性
定义:
两个或多个系统在特定上下文中,通过接口有用地交换信息的程度。
两个层面:
- syntactic interoperability 语法互操作:能交换数据,格式、协议、接口能对上。
- semantic interoperability 语义互操作:能正确解释数据,双方对字段含义和业务语义理解一致。
互操作性需要识别:
with whom, with what, under what circumstances
和谁、交换什么、在什么情况下交换
两个重要方面:
- Discovery:服务消费者发现服务位置、身份和接口。
- Handling of response:响应是报告给请求者、发送给其他系统,还是广播给感兴趣方。
| 六要素 | 互操作性典型内容 |
|---|---|
| Source | 另一个系统、第三方服务 |
| Stimulus | 请求交换信息或调用服务 |
| Artifact | 接口、服务、协议、数据格式 |
| Environment | 运行时、服务发现时、集成时 |
| Response | 定位服务、交换信息、解释信息、返回结果 |
| Measure | 正确交换比例、延迟、新系统接入成本 |
核心战术:
- Locate:
- discovery service:通过目录服务或注册中心定位服务,客户端不直接依赖具体服务地址。
- Manage interfaces:
- orchestrate:用控制机制协调多个服务的调用顺序,例如订单流程中依次调用库存、支付、物流。
- tailor interface:向接口中添加或移除能力,使接口更适合特定调用方,避免暴露过多功能。
Security 安全性
定义:
安全性衡量系统保护数据和信息、防止未授权访问,同时仍为授权用户提供访问的能力。
CIA = Confidentiality + Integrity + Availability
CIA 三要素:
| 要素 | 含义 |
|---|---|
| Confidentiality 机密性 | 数据和服务免受未授权访问 |
| Integrity 完整性 | 数据和服务不被未授权篡改 |
| Availability 可用性 | 系统可供合法用户使用 |
| 六要素 | 安全性典型内容 |
|---|---|
| Source | 攻击者、授权用户、恶意内部人员 |
| Stimulus | 访问、修改、删除、拒绝服务攻击、伪造消息 |
| Artifact | 数据、服务、通信链路、账户 |
| Environment | 正常运行、被攻击、离线、维护 |
| Response | 认证、授权、加密、检测、记录、拒绝、恢复 |
| Measure | 检测概率、检测时间、受损数据量、攻击阻止比例 |
核心战术:
- Detect attacks 检测攻击:
- detect intrusion:通过流量、请求模式、日志等检测入侵。
- detect service denial:检测拒绝服务攻击,如请求量异常升高、资源被耗尽。
- verify message integrity:用哈希、校验和等验证消息是否被篡改。
- Resist attacks 抵抗攻击:
- identify actors:识别请求来源。
- authenticate actors:认证身份,回答“你是谁”。
- authorize actors:授权访问,回答“你能做什么”。
- limit access:最小权限、访问控制列表、角色权限控制。
- limit exposure:减少攻击面,如关闭端口、隐藏内部服务、隔离敏感模块。
- encrypt data:加密传输或存储数据。
- React to attacks 响应攻击:
- revoke access:禁用异常账号、吊销 token、关闭会话。
- Recover from attacks 从攻击中恢复:
- restore、audit、recover state:恢复数据和服务,审计攻击影响。
Testability 可测试性
定义:
软件通过测试展示其故障的容易程度。
如果系统要可测试,就必须能够:
- control inputs:控制输入。
- observe outputs:观察输出。
可测试性不只是测试人员的问题,它受到架构结构、接口、依赖、状态可观察性和复杂度的影响。
| 六要素 | 可测试性典型内容 |
|---|---|
| Source | 测试人员、开发人员、测试工具 |
| Stimulus | 执行测试、完成单元测试、注入测试输入 |
| Artifact | 系统、组件、单元、测试代码 |
| Environment | 开发时、构建时、部署前、运行时 |
| Response | 控制状态、记录结果、观察输出、隔离组件 |
| Measure | 覆盖率、测试运行时间、故障发现概率 |
核心战术:
- Control and observe system state 控制并观察系统状态:
- specialized interfaces:为测试提供专用接口,用来控制组件状态或捕获内部值。
- record / playback:记录输入序列或状态,之后回放以复现故障。
- sandbox:隔离测试环境,避免影响真实用户、真实数据或生产系统。
- Limit complexity 限制复杂度:
- limit structural complexity:减少组件依赖、限制继承深度、降低动态调用复杂度。
- limit nondeterminism:固定随机种子、控制时间来源、减少并发不确定性、隔离外部环境。
Usability 易用性
定义:
用户完成目标任务有多容易,以及系统提供何种用户支持。
易用性包括:
- learning system features:学习系统功能。
- using a system efficiently:高效使用系统。
- minimizing the impact of errors:减少错误影响。
- adapting the system to user’s needs:适配用户需求。
- increasing confidence and satisfaction:提高用户信心和满意度。
| 六要素 | 易用性典型内容 |
|---|---|
| Source | 最终用户 |
| Stimulus | 学习、操作、下载新应用、误操作、恢复 |
| Artifact | 系统、用户界面、交互流程 |
| Environment | 首次使用、正常使用、错误状态、运行时 |
| Response | 反馈、帮助、撤销、取消、恢复、减少步骤 |
| Measure | 完成时间、错误率、操作步数、满意度 |
核心战术:
- Support user initiative 支持用户主动性:
- cancel:允许用户取消当前操作,如取消上传、搜索、提交。
- undo:保存足够历史状态,让用户撤销误操作。
- pause / resume:允许长时间任务暂停和恢复。
- aggregate:把多个低层对象聚合成组,用户可批量操作。
- Support system initiative 支持系统主动性:
- maintain task model:系统理解用户当前任务,并给出下一步建议。
- maintain user model:系统理解用户经验、偏好和习惯,提供个性化帮助。
- maintain system model:系统理解自身状态,向用户提供进度、忙碌、错误原因等反馈。
需求、质量属性与 ASR
三类需求
| 类型 | 英文 | 核心含义 | 例子 |
|---|---|---|---|
| 功能需求 | Functional Requirements | 系统必须做什么 | 用户下单、支付、查询订单 |
| 质量需求 | Quality Requirements | 系统做得多好 | 2 秒内响应、99.9% 可用 |
| 约束 | Constraints | 自由度为 0 的设计决策 | 必须使用 Oracle、必须部署在校内服务器 |
答题句:
功能需求描述系统行为,质量需求描述系统行为的质量,约束限制架构师的设计自由度。
ASR 定义
ASR = Architecturally Significant Requirement,架构显著需求。
ASR 是会对架构产生重大影响的需求。如果没有这个需求,系统可能会采用明显不同的架构设计。
ASR 包括:
- 关键质量属性,例如高可用、低延迟、强安全。
- 关键约束,例如必须使用某平台或协议。
- 核心功能,例如决定系统主要分解方式的业务功能。
- 高风险需求,例如新技术、复杂集成、性能瓶颈。
ASR 来源与识别方法
| 来源 / 方法 | 中文解释 | 答题关键词 |
|---|---|---|
| Requirement documents | 从需求文档中识别影响架构的功能、质量属性和约束 | 文档通常不够精确,需要澄清 |
| Interviewing stakeholders / QAW | 访谈利益相关者,进行 Quality Attribute Workshop | 业务目标、场景头脑风暴、优先级排序 |
| Business goals | 从业务目标反推关键质量属性 | 上线速度、成本、市场、合规 |
| Utility tree | 把 utility 分解为质量属性、子属性、具体场景,并标注重要性和风险 | ATAM 常用 |
| Persona-Based / ASP | 用有架构意识的人物画像识别不同用户背后的架构关注点 | 安全、性能、可修改性、工作流 |
QAW 常见步骤可以这样背:
QAW 介绍 -> 业务使命介绍 -> 架构计划介绍 -> 识别架构驱动因素
-> 场景头脑风暴 -> 场景合并 -> 场景优先级排序 -> 场景细化
Utility tree 模板:
Utility
-> Performance
-> 查询响应时间 < 2s (H, M)
-> Availability
-> 单个服务故障 30s 内恢复 (H, H)
-> Modifiability
-> 新增支付方式 3 人天内完成 (M, L)
其中 (H, M) 可以表示重要性 High、风险 Medium。
ASR、需求、质量属性的关系
Software Requirements
├── Functional Requirements
├── Quality Requirements
└── Constraints
ASR 是其中对架构有显著影响的子集。
答题模板:
软件需求是最宽泛的概念,包括功能需求、质量需求和约束。
质量属性是描述系统工作质量的一类需求。
ASR 不是单独一种需求类型,而是所有需求中对架构设计产生重大影响的那部分子集,通常包括关键质量属性、关键约束、核心功能和高风险需求。
对应往年题
- 2017:What are ASRs? List sources and methods for extracting and identifying ASRs.
-
2018:Software requirements、quality attributes、ASRs 的区别和联系。
- 软件需求包括功能性需求和⾮功能性需求(⼜称质量需求)
-
质量属性是由软件的业务⽬标所决定,在功能性需求的基础上提供的整个系统的合乎需求的特性,是⾮功能需求
的⼀种反应
- ASRs架构攸关需求是对于体系结构有着深远影响的需求,肯定是软件需求的⼀部分
- 2019:What are ASRs? List four or more sources and methods.
- 2025:什么需求影响架构,怎么得到。
架构战术
战术定义
Tactic 是影响某个质量属性响应控制方式的设计决策。一组 tactics 可以形成 architectural strategy;architecture pattern 通常内部组合多个 tactics
PPT 2-3 原话:
A tactic is a design decision that influences the control of a quality attribute response.
A collection of tactics is called an architectural strategy.
Tactics are the building blocks of design.
中文背法:
战术是影响质量属性响应控制方式的设计决策;一组战术称为架构策略;战术是设计的构建块。
Tactic 更细粒度,通常针对单个质量属性;
Pattern 更宏观,描述一类上下文中的结构性解决方案。
因此,architecture pattern 可以看作更高层次的结构方案,通常组合多个 tactics 来实现质量属性目标;tactics 可以看作 pattern 内部实现质量属性响应的基本设计手段。
七类架构设计决策
| 类别 | 中文 |
|---|---|
| Allocation of responsibilities | 职责分配 |
| Coordination model | 协调模型 |
| Data model | 数据模型 |
| Management of resources | 资源管理 |
| Mapping among architecture elements | 架构元素映射 |
| Binding time decisions | 绑定时机决策 |
| Choice of technology | 技术选择 |
Availability Tactics
三类:检测、恢复、预防。
| 类别 | 战术 | 解释 |
|---|---|---|
| Detect faults | ping/echo、heartbeat、voting、exception | 发现故障 |
| Recover from faults | active redundancy、passive redundancy、spare、shadow operation、checkpoint/rollback | 从故障中恢复 |
| Prevent faults | removal from service、transaction、process monitor | 防止故障变成 failure |
常考解释:
- heartbeat:组件周期性发送“我还活着”的信号,超时未收到则判定故障。
- active redundancy:多个冗余组件同时工作,故障后快速切换。
- passive redundancy:主组件工作并同步状态到备组件,主故障后备组件接管。
- checkpoint/rollback:定期保存状态,故障后回滚到最近检查点。
FMECA:
FMECA = Failure Mode, Effects, and Criticality Analysis。
它用于分析可能的故障模式、故障影响和严重程度,帮助识别可用性风险和需要采用的检测/恢复战术。
Performance Tactics
两类:控制需求侧,管理资源侧。
| 类别 | 战术 |
|---|---|
| Control resource demand | manage sampling rate、limit event response、prioritize events、reduce overhead |
| Manage resources | increase resources、introduce concurrency、multiple copies of computations、multiple copies of data |
答题句:
性能战术要么减少或控制进入系统的资源需求,要么增加和更好地管理系统可用资源。
Modifiability Tactics 可修改性战术
| 目标 | 战术 |
|---|---|
| Reduce size of a module(减小模块规模) | split module(拆分模块) |
| Increase cohesion(提高内聚) | increase semantic coherence(提高语义一致性) |
| Reduce coupling(降低耦合) | encapsulate(封装)、use an intermediary(使用中介)、refactor(重构) |
| Defer binding(推迟绑定 / 延迟绑定) | configuration(配置文件)、plugin(插件机制)、dependency injection(依赖注入)、runtime binding(运行时绑定) |
核心句:
高可修改性的架构应尽量局部化变化,使一个变更影响尽可能少的模块,并把变化点封装在稳定接口之后。
Security Tactics
| 类别 | 战术 |
|---|---|
| Detect attacks | detect intrusion、detect service denial、verify message integrity |
| Resist attacks | identify actors、authenticate actors、authorize actors、limit access、limit exposure、encrypt data |
| React to attacks | revoke access |
| Recover from attacks | restore、audit、recover state |
Interoperability、Testability、Usability Tactics
Interoperability:
- locate:discovery service,服务发现。
- manage interfaces:orchestrate、tailor interface。
Testability:
- control and observe system state:specialized interfaces、record/playback、sandbox。
- limit complexity:limit structural complexity、limit nondeterminism。
Usability:
- support user initiative:cancel、undo、pause/resume、aggregate。
- support system initiative:maintain task model、user model、system model。
对应往年题
- 2015:Describe relationships between architecture patterns and tactics. List four tactics and describe usage.
- 往年多次:质量属性场景图题会要求同时说明相关 tactics。
架构基本概念
软件架构定义
SEI 定义:
软件架构是系统的一个或多个结构,这些结构包括软件元素、元素的外部可见属性以及元素之间的关系
IEEE 1471 定义:
软件架构是系统的基本组织结构,体现在组件、组件之间关系、组件与环境之间关系,以及指导系统设计和演化的原则中
Architecture vs Design vs Structure
Architecture 和 design 的关系:
- Architecture 是 software design 的一部分
- architecture 关注的是 high-level design,是一组对系统整体结构和关键质量属性有重要影响的 design decisions
Architecture 和 structure 的关系:
- Structure 更强调把系统分解为 components、modules、subsystems
- Architecture 包含 structure / organization,但比简单分解更进一步:它定义 component interfaces,即组件能做什么;定义 component communications and dependencies,即组件如何通信、如何依赖;还定义 component responsibilities,即当请求某个组件时,它具体应该完成什么
What Does a Software Architect Do
| 英文 | 中文 | 解释 |
|---|---|---|
| liaison | 沟通协调 / 联络 | 在客户、技术团队和业务 / 需求分析人员之间;与管理层或市场人员之间 |
| software engineering | 软件工程 | 软件工程最佳实践 |
| technical knowledge | 技术知识 | 对技术领域的深入理解 |
| risk management | 风险管理 | 与设计、技术选择相关的风险;以及其他风险 |
速记:架构师 = 对外联络,对内按工程做,用技术判断,管架构风险
Where Do Architectures Come From
| 英文 | 中文 | 对架构的影响 |
|---|---|---|
| NFRs | 非功能需求 | 描述系统“做得多好”,如性能、可用性、安全性、易用性,通常直接驱动架构决策 |
| ASRs | 架构显著需求 | 对架构有重大影响的需求,是架构设计最直接的驱动因素 |
| QRs | 质量需求 / 质量属性需求 | 具体化质量属性要求,常用质量属性场景表达 |
| stakeholders | 利益相关者 | 提供业务目标、关注点、约束和质量属性优先级 |
| organizations | 组织因素 | 团队结构、开发流程、预算、进度、治理方式会限制或塑造架构 |
| technical environments | 技术环境 | 平台、框架、基础设施、已有系统、部署环境和技术约束会影响架构选择 |
速背
- 需求类:NFRs、ASRs、QRs
- 人:stakeholders
- 组织:organizations
- 技术环境:technical environments
为什么架构重要
| 作用 | 说明 |
|---|---|
| 沟通工具 | 让客户、架构师、开发者、测试人员围绕同一设计讨论 |
| 最早设计决策 | 决定系统难以改变的核心结构和技术方向 |
| 影响组织结构 | 团队划分、任务分配、集成计划往往跟架构结构一致 |
| 影响质量属性 | 架构促进或阻碍性能、可用性、安全、可修改性等 |
| 帮助讨论变化 | 判断一个变更会影响哪些架构元素,以及是否会改变基本结构 |
| 可复用抽象 | 一个架构可用于多个相似系统,支持产品线工程和 CBSE |
架构帮助讨论变化:
软件系统大量工作发生在部署之后,架构图和架构决策可以帮助判断一个变更的影响范围。考试如果问“为什么架构重要”,可以把这一点作为展开句:清晰的架构能帮助区分局部变化、非局部变化和架构级变化。
| 变化类型 | 含义 |
|---|---|
| Local change | 只影响单个元素内部 |
| Non-local change | 影响多个元素,但不改变基本结构 |
| Architectural change | 改变系统基本结构、通信机制、协调机制或核心设计原则 |
例子:
- 修改某个模块内部算法,接口不变,是 local change。
- 修改订单模块接口,导致支付模块、库存模块都要调整,是 non-local change。
- 从单体系统改为微服务,或从同步调用改为事件驱动,是 architectural change。
软件架构生命周期
PPT 中的生命周期概括:
| 活动 | 含义 |
|---|---|
| Architecture Analysis | 分析架构关注点和上下文,形成 ASR |
| Architecture Synthesis | 根据 ASR 创建候选架构方案 |
| Architecture Evaluation | 用 ASR 评价候选架构 |
| Architecture Implementation | 通过详细设计和开发实现架构 |
| Architecture Maintenance | 演化架构以适应修正和扩展 |
软件架构过程的一般活动
对应往年题:
Briefly describe the general activities in a software architecture process, and the major inputs and outputs at each activity.
| 活动 | 图中英文 | 输入 | 图中输出 |
|---|---|---|---|
| 识别 ASRs | Specifying ASRs | / | Prioritized Quality Attribute Scenarios(按优先级排序的质量属性场景) |
| 架构设计 | Architecture design | Prioritized Quality Attribute Scenarios(按优先级排序的质量属性场景);Requirements, constraints(需求、约束);Patterns and tactics(模式和战术) | “Sketches” of candidate views, Determined by patterns(由模式决定的候选视图草图) |
| 文档化 | Documenting | “Sketches” of candidate views, Determined by patterns(由模式决定的候选视图草图) | Chosen, combined views ,documentations beyond views |
| 架构评估 | Architecture Evaluation | Prioritized Quality Attribute Scenarios(按优先级排序的质量属性场景),Chosen, combined views ,documentations beyond views | Chosen, combined views ,documentations beyond views |
Stakeholders 参与
- Specifying ASRs
- Documenting
- Architecture Evaluation
Fault、Error、Failure
Fault -> Error -> Failure
故障根因 -> 内部错误状态 -> 对外服务失效
例子:代码缺陷是 fault;运行时变量算错是 error;用户看到错误结果是 failure。
对应往年题
这一节既可能作为基础概念简答题出现,也常作为下面几类题的开头定义、判断依据或支撑句出现。
- 课程重点 / 幕布重点:What Does a Software Architect Do?
- 对应考点:liaison、software engineering、technical knowledge、risk management。
- 课程重点 / 幕布重点:Where Do Architectures Come From?
- 对应考点:NFRs、ASRs、QRs;stakeholders、organizations、technical environments。
- 2015:Why should a software architecture be documented using different views? Give the name and purposes of four example views.
- 对应考点:软件架构是多个结构的集合;单一结构无法表达所有 stakeholder 关心的问题,所以需要多视图。
- 2017 / 2019:What should be included in a typical software architecture documentation package?
- 对应考点:架构不仅是结构图,还包括外部可见属性、关系、约束、设计原则和演化依据。
- 2015 / 2017:Briefly describe the general activities in a software architecture process, and the major inputs and outputs at each activity.
- 对应考点:软件架构过程的一般活动,以及每个活动的主要输入和输出。
- 2017 / 2019 / 2022:What are generic design strategies applied in designing software? Give a concise working example with software architecture for each strategy.
- 对应考点:architecture 是高层设计,是一组重要、系统级、难以改变的 design decisions。
- 2017 / 2019:What are ASRs? List sources and methods for extracting and identifying ASRs.
- 对应考点:Architecture Analysis 通过分析 concern、context、stakeholder 和 quality attributes 得到 ASR。
- 2015 / 2017 / 2018:Graphically model quality attribute scenarios in stimulus-response format.
- 对应考点:fault、error、failure 常用于 Availability 场景;MTBF、MTTR、failure detection/recovery 需要建立在这个区分上。
Views and Beyond
为什么要多视图
- 不同视图支持不同目标和用途,服务不同利益相关者
- 不同视图突出不同系统元素和关系
- 不同视图也会以不同维度暴露质量属性问题
常见 Views 比较
复习时可以把 Module Views、C&C Views、Allocation Views、Quality Views 放在一起比较。前三个主要回答“系统结构是什么”,Quality Views 主要回答“为了分析某个质量属性,需要把哪些相关结构集中起来看”。
| 类别 | 回答问题 | Elements | Relations | 典型 views |
|---|---|---|---|---|
| Module Views | 代码和实现单元如何组织 | modules | is part of、depends on、is a | decomposition、uses、generalization、layered、domain、data model |
| C&C Views | 系统运行时组件如何交互 | components、connectors | attachments、interface delegation | pipe-and-filter、client-server、peer-to-peer、SOA、publish-subscribe、shared-data |
| Allocation Views | 软件元素如何映射到环境 | software elements、environmental elements | allocated to | deployment、installation、work assignment |
| Quality Views | 为分析某个质量属性,应集中查看哪些相关结构 | 来自 module、C&C、allocation views 中与某个质量属性相关的元素 | 取决于被抽取的基础视图 | security view、performance view、reliability view、communications view |
Quality view 不是从零创造新元素,而是从 module、C&C、allocation views 中抽取与某个质量属性相关的元素,重新组织成面向质量属性分析的视图。
例子:
- Security view:认证、授权、敏感数据、信任边界。
- Performance view:请求路径、队列、缓存、瓶颈、延迟。
- Reliability view:冗余、故障检测、切换、恢复。
- Communications view:通信链路、协议、QoS。
连线题速记:
implementation units -> Module
runtime behavior and interactions -> C&C
non-software environment -> Allocation
中文速记:
实现单元怎么组织 -> Module Views
运行时组件怎么交互 -> C&C Views
软件元素如何映射到非软件环境 -> Allocation Views
分析某个质量属性需要集中看哪些结构 -> Quality Views
Architecture Documentation Package
架构文档包 = views + information beyond views。
Information beyond views 包括: 口诀:路法概映理目
| 英文 | 中文 | 作用 |
|---|---|---|
| Documentation Roadmap | 文档路线图 | 告诉读者文档有什么、在哪里找 |
| How a View Is Documented | 视图文档化说明 | 说明视图写法标准和符号约定 |
| System Overview | 系统概览 | 简要说明系统功能、用户、上下文、关键约束 |
| Mapping Between Views | 视图之间的映射 | 说明不同视图中的元素如何对应 |
| Rationale | 设计理由 / 决策依据 | 记录适用于多个 view 的架构决策,以及导致这些决策的背景、组织约束、重大需求和基础架构模式选择 |
| Directory | 参考材料目录 | 帮助读者快速找到更多信息,包括术语索引、术语表和缩略语表 |
单个 View 的 5 个部分
主录境变理
| 英文 | 中文 | 作用 |
|---|---|---|
| Primary Presentation | 主要表示 / 主图 | 主图或主表,展示主要元素和关系,必须有图例 |
| Element Catalog | 元素目录 | 解释元素、关系、接口、行为和属性 |
| Context Diagram | 上下文图 | 说明该 view 的边界和外部环境 |
| Variability Guide | 可变性指南 | 说明哪些地方允许变化以及如何变化 |
| Rationale | 设计理由 / 决策理由 | 说明为什么这样设计 |
Documenting Behavior
- 结构文档:说明系统有哪些元素、元素之间如何连接。
- 行为文档:说明运行时元素如何交互。
两类行为记法:
- Trace-oriented languages:描述某一次具体路径,如 sequence diagram、activity diagram、use case。
- Comprehensive languages:描述元素完整行为,如 state machine。
对应往年题
- 2015:Why should a software architecture be documented using different views? Give 4 example views.
- 2015/2017/2018/2019:Map each question with the architectural style/view and list four views.
- 2017/2019:What should be included in a typical software architecture documentation package?
4+1 View Model
Kruchten 的 4+1 视图模型包括四个结构视图和一个场景视图。
| View | 中文 | 关注点 |
|---|---|---|
| Logical View | 逻辑视图 | 功能需求如何由主要抽象、类、对象、子系统实现 |
| Process View | 进程视图 | 并发、进程、线程、通信、同步、运行时行为 |
| Physical View | 物理视图 | 软件如何部署到硬件节点、网络和物理环境 |
| Development View | 开发视图 | 软件在开发环境中的组织,如模块、库、包、团队分工 |
| Architecture use cases/Scenarios | 场景 / 架构用例 | 捕获架构需求,并验证和串联其他四个视图 |

逻辑视图:系统“做什么” 开发视图:代码“怎么组织” 进程视图:运行时“怎么动” 物理视图:部署时“放哪里” 场景视图:用例“怎么串起来验证”
逻辑视图决定代码怎么组织,也决定运行时怎么执行; 开发视图和进程视图最终都要落到物理部署; 场景视图在中间,用具体用例验证四个视图是否一致
对应往年题:
- 2017:Describe 4+1 view.
- 2019:介绍 4+1 视图并画图。
ATAM(已被删,往年ppt有)
ATAM 是什么
ATAM = Architecture Tradeoff Analysis Method,架构权衡分析方法。它通过质量属性场景来分析架构决策,识别 risks、non-risks、sensitivity points、trade-off points。
答题模板:
ATAM 是一种基于场景的架构评价方法。它关注架构决策如何影响多个质量属性,尤其关注质量属性之间的权衡。
ATAM 的主要输出包括优先级质量属性场景、utility tree、风险、非风险、敏感点、权衡点、风险主题和最终评价报告。
ATAM 输出
| 输出 | 含义 |
|---|---|
| Concise architecture presentation | 架构的简洁陈述 |
| Business goals | 业务目标 |
| Prioritized QA scenarios | 优先级排序后的质量属性场景 |
| Utility tree | 质量属性树,按重要性和风险排序 |
| Risks | 可能导致不良后果的架构决策 |
| Non-risks | 经分析确认不是风险的决策 |
| Sensitivity points | 某质量属性对某设计参数特别敏感 |
| Trade-off points | 一个设计决策同时影响多个质量属性且方向不同 |
| Risk themes | 多个风险背后的共同主题 |
| Final evaluation report | 最终评价报告 |
如果题目问 “outputs generated from each phase”,可以按阶段写:
| 阶段 | 典型输出 |
|---|---|
| Phase 0 Preparation | 评估范围、评估计划、参与者、已有架构材料 |
| Phase 1 Evaluation | 业务目标、架构陈述、已识别架构方法、utility tree、初步 risks / non-risks / sensitivity points / trade-off points |
| Phase 2 Evaluation | 利益相关者新增场景、优先级场景、对新增场景的架构分析结果、更新后的 risks 和 risk themes |
| Phase 3 Follow-up | 最终评估报告、风险主题、改进建议、后续跟踪项 |
Stakeholders 与阶段
| 阶段 | 主要参与者 | 工作 |
|---|---|---|
| Phase 0 Preparation | 评估团队、项目决策者 | 确定评估范围、准备材料、安排人员 |
| Phase 1 Evaluation | 评估团队、架构师 | 陈述业务目标和架构,识别架构方法,构建 utility tree,分析架构方法 |
| Phase 2 Evaluation | 评估团队、架构师、利益相关者 | 利益相关者头脑风暴场景,分析场景与架构决策 |
| Phase 3 Follow-up | 评估团队、项目团队 | 汇总风险、形成报告、跟踪改进 |
Risk、Sensitivity Point、Trade-off Point
| 概念 | 定义 | 例子 |
|---|---|---|
| Risk | 某架构决策可能导致不希望的结果 | 单数据库节点导致单点故障,影响可用性 |
| Non-risk | 经分析确认不会造成问题的决策 | 已验证负载均衡可支持 10 倍流量 |
| Sensitivity Point | 某质量属性对某设计参数敏感 | 响应时间对线程池大小敏感 |
| Trade-off Point | 一个决策同时正面影响一个质量属性、负面影响另一个质量属性 | 加密提高安全性但降低性能 |
对应往年题
- 2015/2017/2021:Describe outputs generated from each phase of ATAM process.
- 2018:risks、sensitivity points、trade-off points 是什么?各举例。
- 2019:描述 ATAM 每个阶段有哪些 stakeholders 和职责。
ADD 3.0
ADD 是什么
ADD = Attribute-Driven Design。它是一种以架构驱动因素为输入、通过迭代做架构决策的方法
ADD 3.0 七步
- Step1 Review Inputs
- 确保本轮设计输入可用且正确,包括 Design Purpose、Primary functionality、Quality attribute scenarios、Architectural constraints、Concerns、Existing architecture design,并确认 drivers 及其优先级
- Step2 Establish the Iteration Goal by Selecting Drivers
- 选择本轮要处理的 drivers,建立大小合适的迭代目标,可以解决一个重要 driver,也可以满足一组相关 drivers
- Step3 Choose One or More Elements of the System to Refine
- 选择要细化的系统元素,refinement 可以是分解为更细粒度元素、组合为更粗粒度元素,或改进之前已识别的元素
- Step4 Choose One or more Design Concepts that Satisfy the Selected Drivers
- 先识别候选 design concepts,再选择能满足本轮 drivers 的概念,例如 reference architectures、deployment patterns、architectural/design patterns、tactics、frameworks
- Step5 Instantiate Architectural Elements,Allocate Responsibilities,and Define Interfaces
- 将选定的 design concepts 实例化为具体架构元素,为元素分配职责,并定义元素之间的接口
- Step 6 Sketch Views and Record Design Decisions
- 草拟相关 views 并记录设计决策、理由、元素职责和接口,这些草图是架构的初始文档
- Step7 Perform Analysis of Current Design and Review Iteration Goal and Achievement of Design Purpose
- 分析当前设计,审查迭代目标和设计目的是否达成,并决定是否需要更多迭代(回到step2)
Design Process Termination Criteria
- 设计过程会跨越多次迭代持续进行,直到至少满足下面三种其中之一
- 已经为所有驱动性的架构需求做出设计决策,即达到设计目标
- 最重要的技术风险已经得到缓解
- 分配给架构设计的时间或预算被耗尽
记忆:先看输入,定目标;选对象,挑方案;再落地,写文档;最后评估 终止:做完了、风险稳了、钱/时间没了
不同系统类型下的 ADD
- Design of a greenfield system for a mature domain
- 适用于 well-known domains,例如 desktop、mobile、web enterprise apps、microservices
- Initial iteration goal:establish overall system structure,选择 reference architectures、patterns、frameworks,并优先考虑 non-functional constraints 和 quality attributes
- Next iteration goal:identify structures for primary functionality,把 use cases 分配给 elements,分解 reference architecture elements,并规划 team assignments
- Subsequent iterations:refine structures for remaining drivers,使用 tactics、patterns、components 和 best practices,例如 modularity、low coupling
- Roadmap benefits:指导初始设计,帮助早期估算,用已知组件降低风险,并从一开始支持 quality goals
- Design of a greenfield system for a novel domain
- 适用于 less established infrastructure and knowledge base 的新领域
- Start without reference architecture:没有现成模型或可复用组件,设计需要从 first principles 开始
- Use prototyping and general concepts:用 patterns、tactics 和 quality attribute-focused prototypes 指导设计
- Address emerging challenges:重点关注 performance、scalability、security,并保持 flexible iteration goals
- Design for making changes to an existing system (Brownfield)
- Brownfield architecture design 常由 maintenance、refactoring 或 resolving quality issues 驱动
- Understand existing architecture first:先识别系统元素及其 interactions,再进行 decomposition 或 iteration planning
- Design iterations post-assessment:理解现有架构后,ADD 步骤类似 greenfield design,但以增量方式处理新的 drivers
- Design to replace a legacy application
- Legacy tech and technical debt:旧系统可能依赖 obsolete technology,或存在难以管理的 technical debt
- Use the Strangler Fig Pattern:引入 proxy,把调用路由到 legacy systems,同时逐步替换 components
- Iterative replacement:每轮 ADD 的设计目标针对要迁移的 specific services or components
Design Concepts
| 类别 | 说明 |
|---|---|
| Reference Architectures | 领域化蓝图,比 architecture style 更具体 |
| Deployment Patterns | 物理部署组织方式,如 3-tier、cluster、failover |
| Patterns | 反复出现设计问题的可复用方案 |
| Tactics | 影响质量属性响应的细粒度设计决策 |
| Externally Developed Components | 外部组件和框架,如 Spring、Hibernate |
对应往年题:
- 2018/2025:描述 ADD / ADD 3.0 过程。
- 2021:架构一般设计策略是什么?以 ADD 为例说明。
- 2025:ADD 3.0 过程。
C&C Style 与架构模式
C&C Style 的本质
C&C = Component and Connector。它描述系统运行时结构,即运行时组件如何通过连接器交互。
| 概念 | 含义 |
|---|---|
| Component | 运行时处理单元或数据存储单元,通过 ports 与外部交互 |
| Connector | 交互路径,定义通信、协调、转换等机制 |
| Port | 组件对外交互点 |
| Role | 连接器中的参与角色 |
| Attachment | component port 与 connector role 之间的连接 |
| Interface delegation | 外部 port 委托给内部 port |
关键约束:
- Component 不直接连 Component,必须通过 Connector。
- Connector 连接 Component。
- 只有兼容的 port 和 role 才能 attachment。
常见 C&C Styles
| Style | 结构 | 适用 |
|---|---|---|
| Pipe-and-Filter | Filter 处理数据,Pipe 传递数据 | 编译器、文本处理、数据流水线 |
| Client-Server | Client 请求,Server 提供服务 | Web 系统、数据库系统 |
| Peer-to-Peer | 节点既是客户端也是服务端 | 分布式共享、协作系统 |
| SOA | 服务提供者、消费者、契约、注册/总线 | 企业系统集成 |
| Publish-Subscribe | 发布者发布事件,订阅者异步接收 | 事件通知、缓存更新、消息系统 |
| Shared-Data | 多组件共享数据仓库 | 数据中心、黑板系统 |
用 MVC 说明 C&C
如果题目要求用 MVC 说明 C&C style,可以这样映射:
| C&C 概念 | MVC 中的对应 |
|---|---|
| Component | Model、View、Controller |
| Connector | 方法调用、事件通知、观察者通知 |
| Port | Model 的数据访问接口、View 的更新接口、Controller 的输入处理接口 |
| Attachment | Controller 调用 Model,Model 通知 View,View 将用户事件交给 Controller |
说明句:
MVC 可以从 C&C 角度理解为运行时组件之间的交互结构。Controller 处理用户输入并更新 Model;Model 状态变化后通过通知机制更新 View;View 展示结果并接收新的用户操作。
Architecture Pattern vs Tactic
| 对比 | Tactic | Architecture Pattern |
|---|---|---|
| 粒度 | 小 | 大 |
| 关注 | 单个质量属性响应控制 | 某类上下文中的整体结构 |
| 内容 | 设计决策 | context、problem、solution、consequences |
| 关系 | 可组合成策略 | 通常包含多个 tactics |
答题句:
Tactics are simpler than patterns. A pattern is a more complex, reusable architectural solution that often uses several tactics internally.
Broker Pattern
- Context:分布式系统中多个客户端和服务需要通信,直接耦合会降低可修改性、互操作性和可扩展性。
- Solution:引入 Broker 作为中介,客户端通过 Broker 查找、调用和访问服务。
- Benefits:客户端和服务端解耦;位置透明;支持动态发现;提高互操作性和可修改性。
- Limitations:Broker 可能成为单点故障和性能瓶颈;增加通信延迟;增加系统复杂度。
Pipe-and-Filter
- Filter:独立处理输入数据并产生输出。
- Pipe:连接 filter,传递数据流。
- 优点:Filter 可复用、可替换、可重组;支持并行处理。
- 缺点:不适合需要复杂共享状态或强交互的系统。
综合题写法:
输入文件 -> TokenizeFilter -> NormalizeFilter -> SortFilter -> UniqueFilter -> OutputFilter
Pipe 负责在 Filter 之间传递数据。每个 Filter 独立完成一步处理,符合高内聚、低耦合。
对应往年题
- 2015:architecture patterns and tactics 的关系;Broker Pattern 的 context、benefits、limitations。
- 2018:C&C style 的本质,以 MVC 举例。
- 2021:C&C style 的本质,以 SOA 举例。
- 2022:分布式缓存更新,用 Observer / Publish-Subscribe 映射组件,画 sequence diagram,并讨论 connector/web services。
- 2025:C&C 风格的性质,以 SOA 举例。
SOA
SOA 基本概念
SOA = Service-Oriented Architecture,面向服务架构。它把系统能力封装成服务,通过标准契约和通信机制供服务消费者使用。
典型 C&C 元素:
- Components:service provider、service consumer、service registry、ESB。
- Connectors:SOAP/HTTP、REST call、message queue、service invocation。
- Constraints:服务通过契约交互,消费者不依赖服务内部实现。
SOA 基本原则
| 原则 | 中文解释 |
|---|---|
| Service Contract | 服务通过契约描述接口、消息格式和行为 |
| Service Encapsulation | 服务隐藏内部实现 |
| Service Reuse | 服务应被设计成可复用能力 |
| Service Composition | 服务可以组合成更复杂业务流程 |
| Service Autonomy | 服务对自身逻辑和资源有自治权 |
| Service Statelessness | 服务尽量不保存跨调用状态 |
| Service Discoverability | 服务可被发现和定位 |
| Service Interoperability | 服务使用标准协议和数据格式交互 |
SOA 对质量属性影响
| 质量属性 | 正面影响 | 负面影响 |
|---|---|---|
| Interoperability | 标准契约和协议提高异构系统集成能力 | 契约治理和版本兼容复杂 |
| Scalability | 服务可分开扩展 | ESB 或中心治理可能成为瓶颈 |
| Security | 可集中认证、授权、审计 | 分布式服务增加攻击面 |
| Modifiability | 服务封装实现,降低消费者对实现依赖 | 共享契约修改需要协调多个系统 |
对应往年题
- 2015:Briefly describe fundamental principles of SOA and discuss impact on interoperability、scalability、security.
- 2021/2025:C&C style 以 SOA 举例说明。
Microservices
微服务定义
微服务架构把系统拆成一组围绕业务能力组织的小服务。每个服务可以独立开发、部署、扩展和演进,通常拥有自己的数据,并通过轻量级通信机制协作。
微服务主要特征
| 特征 | 解释 |
|---|---|
| Componentization via Services | 以服务作为组件单元,而不是以库或类作为部署单元 |
| Organized around Business Capabilities | 围绕业务能力和限界上下文拆分,而不是按技术层次拆分 |
| Cohesion and Decoupling | 服务内部高内聚,服务之间低耦合 |
| Decentralization | 去中心化治理、去中心化数据管理、技术栈可不同 |
| Infrastructure Automation | 自动化构建、测试、部署、监控,依赖 DevOps / CI/CD |
| Design for Service Evolution | 服务可独立演进,智能端点和哑管道 |
Smart Endpoints and Dumb Pipes
微服务主张业务逻辑在服务端点中,通信管道只负责简单消息传递。与 SOA 中重量级 ESB 相比,微服务避免把大量路由、转换和编排逻辑放在管道中。
答题句:
Smart endpoints mean services contain business logic. Dumb pipes mean communication mechanisms are lightweight and do not contain heavy business orchestration.
SOA vs Microservices
| 维度 | SOA | Microservices |
|---|---|---|
| 目标 | 企业级集成和复用 | 快速迭代、独立部署、弹性扩展 |
| 服务粒度 | 通常较粗 | 通常较细 |
| 通信 | ESB、SOAP、企业级中介较常见 | REST、消息队列、轻量协议 |
| 管道 | 智能管道,ESB 负责转换和编排 | 哑管道,服务端点负责业务逻辑 |
| 数据 | 可能共享数据模型 | 每个服务拥有自己的数据库 |
| 治理 | 集中治理 | 去中心化治理 |
| 部署 | 服务可能仍共享发布周期 | 服务独立部署 |
相同点:
- 都以服务作为抽象。
- 都强调服务契约、服务封装、服务复用。
- 都用于降低系统间直接耦合,提高互操作性。
微服务挑战
- 服务拆分粒度难把握。
- 分布式系统复杂性增加:网络延迟、超时、部分失败。
- 数据一致性困难,跨服务事务复杂。
- 运维和监控要求高。
- 调试、日志追踪和故障定位复杂。
- 服务间 API 版本和依赖管理复杂。
微服务拆分方法
考试案例题可以按这个流程写:
1. 从用户故事中提取关键名词,建立领域对象。
2. 从动词中识别系统操作。
3. 按业务能力 / 子域 / bounded context 划分服务。
4. 为每个服务分配数据所有权。
5. 定义服务之间 API 或事件协作关系。
6. 说明质量属性影响和风险。
外卖平台示例:
| 系统操作 | 可能服务 | 说明 |
|---|---|---|
| 用户注册/登录 | User Service | 用户资料、认证 |
| 浏览商家和菜单 | Restaurant Service / Menu Service | 商家、菜品、价格 |
| 创建订单 | Order Service | 订单生命周期 |
| 支付 | Payment Service | 支付渠道、支付状态 |
| 商家接单 | Merchant Service | 商家端操作 |
| 骑手配送 | Delivery Service | 派单、路线、配送状态 |
| 通知用户 | Notification Service | 短信、邮件、App 推送 |
| 优惠券 | Promotion Service | 优惠规则、活动 |
服务关系可以写:
Order Service 调用 User / Restaurant / Menu 校验信息;
Order Service 创建订单后发布 OrderCreated 事件;
Payment Service 处理支付并发布 PaymentSucceeded;
Delivery Service 订阅支付成功事件并创建配送任务;
Notification Service 订阅订单、支付和配送事件通知用户。
部署模式
- 多服务单主机多实例。
- 单主机单服务实例。
- 每服务虚拟机。
- 每服务容器。
- 服务部署平台,如 Kubernetes。
- Serverless。
对应往年题
- 2019:微服务和 SOA 的区别、相同点。
- 2025:微服务架构的主要特征。
- 2025:外卖平台为什么适合微服务;识别操作、服务和关系。
架构模式演化
核心句:
架构风格的演化,本质是在不同历史约束下对质量属性做优先级排序。
每种架构都会优先保障某些质量属性,同时牺牲另一些质量属性。
| 阶段 | 主要矛盾 | 结构抓手 | 优先保障 | 相对牺牲 |
|---|---|---|---|---|
| 批处理 | 计算资源稀缺 | 作业统一输入系统 | 吞吐量、稳定性 | 交互性 |
| 主机/终端 | 多用户共享核心事务 | 强中心、弱终端 | 一致性、安全、可靠 | 易用性、局部灵活性 |
| C/S | 桌面交互需求增强 | 胖客户端 + 数据服务器 | 交互体验、响应性 | 部署和维护 |
| 三层/分层 | 职责混乱、部署复杂 | 表示层、业务层、数据层 | 可维护、可修改、安全 | 极致性能 |
| SOA | 企业系统集成 | 契约、服务、ESB、治理 | 互操作、复用、组合 | 简单性、响应性能 |
| 微服务 | 快速迭代与独立部署 | 服务边界 = 业务边界 | 可部署、可扩展、演进 | 一致性、运维简单性 |
| 事件驱动/云原生 | 大规模与流量波动 | 事件、弹性基础设施 | 弹性、可用、韧性 | 可理解性、调试性 |
| AI 增强 | 自然语言与语义能力 | 传统系统 + AI 能力层 | 易用性、知识获取 | 可预测性、测试性 |
| AI 原生 | 长链路非确定任务 | 模型 + 工具 + 记忆 + 状态 | 适应性、任务完成 | 确定性、安全边界 |
Generic Design Strategy
| 策略 | 含义 | 架构例子 |
|---|---|---|
| Decomposition | 拆分复杂系统 | 电商拆成用户、订单、库存、支付服务 |
| Abstraction | 忽略细节,保留关键接口 | 用 Repository 接口隐藏数据库 |
| Stepwise: Divide and Conquer | 分而治之 | 编译器拆成词法、语法、语义、代码生成 |
| Generate and Test | 生成候选方案并分析 | 比较 active redundancy 和 passive redundancy |
| Iteration :Incremental Refinement | 多轮迭代细化 | ADD 每轮处理一组 drivers |
| Reusable Elements | 复用已有模式、框架、组件 | 使用 MVC、Spring、消息队列 |
记忆:用一个电商系统串起来记
- Decomposition 先把电商系统拆成:用户、商品、订单、库存、支付、物流
- Abstraction 不让订单模块直接知道数据库细节,而是通过:OrderRepository 接口访问数据
- **Stepwise / Divide and Conquer **下单流程太复杂,就分步处理:创建订单 → 锁库存 → 支付 → 发货 → 通知
- Generate and Test 为了提高可用性,提出多个方案,再分析比较
- Iteration / Incremental Refinement 第一轮先设计订单主流程,第二轮补异常处理,第三轮优化性能:
- **Reusable Elements **不要自己从零写所有东西,复用:MVC、Spring Boot、Redis、Kafka、OAuth、设计模式
Design Strategies 在 ADD 中的体现
| 策略 | 在 ADD 中如何体现 |
|---|---|
| Decomposition | Step 3 选择元素并逐步分解 |
| Abstraction | 用模块、组件、接口抽象隐藏细节 |
| Divide and Conquer | Step 2 每次选择一组 drivers,拆成可处理的子问题 |
| Generate and Test | 设计决策是 hypothesis,Step 7 分析并修正 |
| Iteration | ADD 通过多轮迭代逐步完善架构 |
| Reuse | Step 4 使用参考架构、模式、战术、框架 |
对应往年题:
- 2017/2019/2022:What are generic design strategies applied in designing software? Give a concise working example with software architecture for each strategy.
综合设计题专项
质量属性图题
答题结构:
先写六要素表,再画 stimulus-response 图,最后写 response measure 为什么可测试。
示例框架:
Source: user
Stimulus: sends query request
Artifact: query service
Environment: normal load
Response: processes request and returns result
Response Measure: 95% requests return within 2 seconds
C&C / SOA 图题
答题结构:
Components: service consumer, service provider, service registry, ESB
Connectors: service invocation, message queue, HTTP/SOAP/REST
Attachments: consumer port attaches to invocation connector role; connector attaches to provider port
Constraints: services communicate through contracts; consumers do not depend on implementations
分布式缓存更新题
适合映射为 Observer / Publish-Subscribe。
Database / Data Service = Subject / Publisher
Cache Nodes = Observers / Subscribers
Message Broker = Connector
Update Event = Notification
可写 sequence:
DataService updates data
DataService publishes DataChanged event to MessageBroker
MessageBroker forwards event to CacheNodeA/B/C
Each CacheNode invalidates or refreshes cached data
CacheNode sends ack or logs failure
设计理由:
- 发布者不需要知道具体缓存节点,降低耦合。
- 新增缓存节点只需订阅事件,符合可修改性。
- 异步消息提高可扩展性,但带来最终一致性和故障重试问题。
Pipe-and-Filter 程序题
题型:输入文本文件,输出排序去重单词列表。
组件图:
InputFile
-> ReadFilter
-> SplitWordsFilter
-> NormalizeFilter
-> SortFilter
-> UniqueFilter
-> OutputFilter
说明:
- Filter 是独立处理单元。
- Pipe 是数据传输通道。
- 每个 Filter 只做一步转换,便于替换、复用和测试。
外卖平台微服务拆分题
答题结构:
为什么适合微服务:
外卖平台业务边界清晰,订单、支付、配送、商家、用户等能力可以独立演进;
系统需要高并发、弹性扩展和独立部署,因此适合微服务。
微服务划分:
User、Restaurant/Menu、Order、Payment、Delivery、Notification、Promotion。
关系:
Order 编排下单流程;Payment 处理支付;Delivery 处理配送;Notification 订阅事件通知用户。
权衡:
提高可扩展性和可部署性,但增加分布式一致性、运维、监控和故障定位复杂性。
架构文档化补充
三种 Notation
| 类型 | 特点 | 优缺点 |
|---|---|---|
| Informal | 普通图和文字 | 易创建、易沟通,但歧义大 |
| Semiformal | UML 等标准符号 | 有统一规则,但语义不完全严格 |
| Formal | ADL、数学语义 | 精确、可分析,但成本高 |
趋势:
越正式,精确性和可分析性越高,但创建和理解成本也越高。
敏捷架构文档
原则:just enough documentation。
- 只有某个 view 有明确 stakeholder 需求时才写。
- 信息什么时候可用什么时候补。
- 白板图可以拍照作为 primary presentation。
- 不必先写完整架构文档再开发。
架构变化快于文档怎么办
- 记录 invariants:所有版本都必须满足的不变量。
- 记录 allowed variability:允许怎样变化、在哪里变化、通过什么机制变化。
考前速背清单
2 分钟默写
- 质量属性场景六要素:source、stimulus、artifact、environment、response、response measure。
- 三类 views:Module = implementation units;C&C = runtime interaction;Allocation = non-software environment。
- ASR 定义:会显著影响架构的需求。
5 分钟默写
- 4+1:Logical、Process、Physical、Development、Scenarios。
- ATAM 输出:business goals、prioritized scenarios、utility tree、risks、non-risks、sensitivity points、trade-off points、risk themes、final report。
- ADD 七步:review inputs、select drivers、choose elements、choose concepts、instantiate/allocate/define interfaces、sketch views/record decisions、analyze/review。
- SOA 原则:contract、encapsulation、reuse、composition、autonomy、statelessness。
- 微服务特征:services、business capabilities、cohesion/decoupling、decentralization、automation、evolution。
10 分钟默写
- Availability / Performance / Modifiability / Interoperability 的质量属性场景模板。
- ATAM 中 risk、sensitivity point、trade-off point 的定义和例子。
- SOA vs Microservices 表格。
- ADD 如何体现六种通用设计策略。
- 外卖平台微服务拆分:User、Restaurant/Menu、Order、Payment、Delivery、Notification、Promotion。
必练往年题
- How to model quality attribute scenarios? Graphically model availability and modifiability in stimulus-response format.
- What are ASRs? List sources and methods for extracting and identifying ASRs.
- Why should a software architecture be documented using different views? Give four example views.
- Describe 4+1 view model and draw the diagram.
- Describe outputs generated from each phase of ATAM process.
- What are risks, sensitivity points, and trade-off points? Give examples.
- Describe ADD 3.0 process.
- What are generic design strategies applied in designing software? Give examples.
- What is the nature of component-connector style? Explain with SOA.
- Briefly describe SOA principles and impact on interoperability, scalability and security.
- Compare SOA and microservices.
- Design microservices for a food delivery platform.