软考系统架构设计师 · 质量属性策略与技术选型权衡 总文档
单一合并总文档 | 思维导图→理论基石→六大质量属性详解→扩展属性→设计策略库→场景映射→选型比较→易混陷阱→避坑实践→关联图→双轨口诀→速记总表+背诵路线
1. 思维导图(全章概览)
质量属性 (Quality Attributes)
│
├── 六大核心属性(必考)
│ ├── 性能 Performance → 响应时间/吞吐量/并发/资源利用率
│ ├── 可用性 Availability → MTBF/MTTR/A=MTTF/(MTTF+MTTR)
│ ├── 可靠性 Reliability → 无故障运行时间/故障率
│ ├── 安全性 Security → CIA三性(机密/完整/可用)
│ ├── 可修改性 Modifiability → 修改成本/影响范围/绑定时间
│ └── 可测试性 Testability → 测试覆盖/可观察性/可控制性
│
├── 扩展属性
│ ├── 易用性 Usability
│ ├── 功能性 Functionality
│ └── 互操作性 Interoperability
│
├── 属性刺激源(6要素)
│ └── 刺激源 → 刺激 → 环境 → 制品 → 响应 → 响应度量
│
├── ATAM核心概念
│ ├── 敏感点 Sensitivity → 影响单一质量属性的参数
│ ├── 权衡点 Tradeoff → 影响多个质量属性的参数(权衡点⊂敏感点)
│ ├── 风险点 Risk → 可能引起问题的决策
│ └── 非风险点 NonRisk → 不会引起问题的决策
│
├── 策略分类(三大类)
│ ├── 资源管理类 → 增加资源/引入并发/维持一致性
│ ├── 资源调度类 → FIFO/优先级/动态优先级
│ └── 资源需求类 → 减少开销/限制频率/优先处理
│
└── 权衡关系(关键对立面)
├── 性能 ↔ 可修改性 (优化降低可修改性)
├── 性能 ↔ 安全性 (加密消耗性能)
├── 可用性 ↔ 成本 (冗余增加成本)
├── 安全性 ↔ 易用性 (认证降低易用性)
├── 可靠性 ↔ 性能 (校验/重试消耗性能)
└── 可测试性 ↔ 性能 (监控埋点消耗性能)
2. 理论基石
2.1 质量属性定义
质量属性(Quality Attribute):描述软件系统在特定环境下,面对特定刺激时,系统表现出的可度量特征。是衡量软件架构好坏的非功能性指标。
关键区分:质量属性 ≠ 功能需求。功能需求描述"系统能做什么",质量属性描述"系统做得怎么样"。功能正确性由测试保证,质量属性由架构设计保证。
2.2 质量属性刺激-响应模型(6要素)
| 要素 |
含义 |
示例(性能) |
| 刺激源 Source |
产生刺激的实体 |
用户/外部系统 |
| 刺激 Stimulus |
到达系统的事件 |
请求 |
| 环境 Environment |
刺激发生时的条件 |
正常/过载/故障 |
| 制品 Artifact |
被刺激的部分 |
系统/模块 |
| 响应 Response |
系统的反应 |
处理请求 |
| 响应度量 Measure |
可测量的指标 |
响应时间<200ms |
2.3 ATAM 四类发现点(高频考点)
| 概念 |
定义 |
记忆要点 |
| 敏感点 |
影响单一质量属性的架构决策参数 |
“一对一” |
| 权衡点 |
影响多个质量属性的参数(权衡点一定是敏感点) |
“一对多,权衡⊂敏感” |
| 风险点 |
可能引起问题的架构决策 |
“有隐患” |
| 非风险点 |
不会引起问题的架构决策 |
“无隐患” |
必背关系:权衡点 ⊂ 敏感点。所有权衡点都是敏感点,但敏感点不一定是权衡点。
2.4 质量属性场景描述模板
<刺激源> 在 <环境> 下,对 <制品> 施加 <刺激>,
系统应产生 <响应>,且 <响应度量> 满足 <阈值>。
示例(性能):
用户在正常负载下,向订单系统发起查询请求,系统返回订单列表,响应时间 ≤ 200ms,吞吐量 ≥ 1000 TPS。
示例(可用性):
外部系统在主节点故障环境下,向支付系统发起支付请求,系统切换到备节点继续处理,年可用率 ≥ 99.99%(4个9)。
2.5 质量属性与架构评估的关系
| 评估方法 |
关注质量属性 |
特点 |
| SAAM |
可修改性(单一) |
5步,最简单 |
| ATAM |
多属性 |
9步,敏感点/权衡点/风险点 |
| CBAM |
成本-收益 |
ATAM扩展,经济决策 |
| ARID |
实时性 |
关注实时属性 |
3. 六大核心质量属性详解
3.1 性能(Performance)
3.1.1 定义与度量
| 指标 |
定义 |
公式/说明 |
| 响应时间 |
从发起请求到收到响应的时间 |
RT = 服务时间 + 排队时间 + 传输时间 |
| 吞吐量 |
单位时间处理的请求数 |
TPS/QPS |
| 并发数 |
同时处理的请求数 |
并发数 = 吞吐量 × 响应时间(Little定律) |
| 资源利用率 |
资源使用占比 |
CPU/内存/IO/网络 |
| 平均响应时间 |
所有请求响应时间的算术平均 |
RTˉ=n1∑RTi |
| P99响应时间 |
99%请求的响应时间上限 |
长尾延迟指标 |
Little定律:L=λ×W
- L:系统中平均请求数
- λ:到达率(请求/秒)
- W:平均等待时间
3.1.2 性能策略(三大类)
性能策略
├── 资源需求类(减少需求)
│ ├── 减少计算开销 → 算法优化/索引/缓存计算结果
│ ├── 限制事件到达频率 → 限流/漏桶/令牌桶
│ └── 优先处理事件 → 优先级队列/关键路径优先
│
├── 资源管理类(增加供给)
│ ├── 增加资源 → 横向扩容/纵向升级
│ ├── 引入并发 → 多线程/协程/异步IO
│ └── 维持数据计算一致性 → 数据分片/分区
│
└── 资源调度类(优化调度)
├── FIFO调度 → 先进先出
├── 优先级调度 → 静态优先级
└── 动态优先级调度 → 运行时调整
3.1.3 性能技术选型表
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 缓存 |
Redis/Memcached/本地缓存(Caffeine) |
读多写少、热点数据 |
牺牲一致性(缓存与DB同步) |
| CDN |
Cloudflare/阿里云CDN |
静态资源、全球加速 |
牺牲实时性(缓存过期) |
| 负载均衡 |
Nginx/LVS/HAProxy |
多实例分流 |
增加复杂度(会话同步) |
| 异步处理 |
MQ(Kafka/RabbitMQ)/事件循环 |
削峰填谷、解耦 |
牺牲实时性、增加最终一致性 |
| 连接池 |
HikariCP/Druid |
数据库连接复用 |
占用内存 |
| 读写分离 |
MySQL主从/ShardingSphere |
读多写少 |
牺牲主从延迟一致性 |
| 分库分表 |
ShardingSphere/Vitess |
数据量大 |
牺牲跨库事务/JOIN |
| 列式存储 |
ClickHouse/Doris |
分析型查询 |
写入性能下降 |
| 压缩 |
Gzip/Snappy/LZ4 |
网络传输/存储 |
CPU开销 |
| 限流 |
Sentinel/Resilience4j |
保护系统 |
牺牲部分请求 |
| 协程/异步IO |
Go goroutine/Netty/asyncio |
高并发IO密集 |
编程复杂度↑ |
3.1.4 性能权衡矩阵
| 优化手段 |
↑性能 |
↓可用性 |
↓一致性 |
↓可修改性 |
↓安全性 |
| 缓存 |
↑↑ |
— |
↓ |
— |
— |
| 异步 |
↑↑ |
↓(消息丢失风险) |
↓(最终一致) |
↓ |
— |
| 分库分表 |
↑↑ |
— |
↓(分布式事务) |
↓ |
— |
| 压缩 |
↑(网络) |
— |
— |
— |
— |
| 限流 |
↑(保护) |
↑(防雪崩) |
— |
— |
— |
3.2 可用性(Availability)
3.2.1 定义与度量
| 指标 |
定义 |
公式 |
| MTTF |
平均无故障时间 |
Mean Time To Failure |
| MTTR |
平均修复时间 |
Mean Time To Repair |
| MTBF |
平均故障间隔时间 |
MTBF=MTTF+MTTR |
| 可用率 A |
系统可用时间占比 |
A=MTTF+MTTRMTTF=MTBFMTTF |
| 停机时间 |
年停机分钟 |
(1−A)×365×24×60 |
可用性等级表(必背):
| 等级 |
可用率 |
年停机时间 |
适用场景 |
| 2个9 |
99% |
3.65天 |
普通业务 |
| 3个9 |
99.9% |
8.76小时 |
一般企业 |
| 4个9 |
99.99% |
52.6分钟 |
金融/电商 |
| 5个9 |
99.999% |
5.26分钟 |
电信/核心金融 |
| 6个9 |
99.9999% |
31.5秒 |
极高可靠 |
3.2.2 可用性策略(三大类)
可用性策略
├── 错误检测
│ ├── Ping/Echo → 主动探测
│ ├── 心跳 Heartbeat → 周期性存活检测
│ ├── 异常检测 → 监控异常指标
│ └── 时间戳 → 检测超时/乱序
│
├── 错误恢复
│ ├── 主动冗余(Active-Active) → 主主同时服务
│ ├── 被动冗余(Active-Standby)→ 主备切换
│ ├── 备件 Spare → 冷备
│ ├── 回滚 Rollback → 事务回滚/版本回退
│ ├── 降级 Degrade → 返回兜底/简化服务
│ ├── 重试 Retry → 失败重试(指数退避)
│ └── 补偿 Compensation → 事务补偿(TCC/Saga)
│
└── 错误预防
├── 服务从服务中移除 → 熔断摘除故障节点
├── 事务 Transactions → 原子操作
├── 进程监视器 → 守护进程/重启
└── 容量规划 → 预留冗余容量
3.2.3 可用性技术选型表
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 主备切换 |
Keepalived/MHA |
数据库高可用 |
切换有RTO |
| 主主双活 |
双活数据中心 |
同城/异地容灾 |
数据同步复杂 |
| 集群 |
MySQL Group Replication/Patroni |
多节点共识 |
强一致需Paxos/Raft |
| 故障转移 |
VIP漂移/DNS切换 |
服务级切换 |
切换延迟 |
| 限流熔断 |
Sentinel/Hystrix/Resilience4j |
防雪崩 |
牺牲部分请求 |
| 超时控制 |
熔断器+超时 |
防级联故障 |
超时需调优 |
| 重试退避 |
指数退避+抖动 |
临时故障恢复 |
可能放大流量 |
| 降级 |
兜底数据/简化逻辑 |
保核心弃边缘 |
功能不完整 |
| 舱壁隔离 |
线程池/信号量隔离 |
故障隔离 |
资源利用率↓ |
| 多机房 |
同城双活/异地多活 |
灾备 |
成本↑↑ |
| 备份恢复 |
全量+增量+日志 |
数据恢复 |
RPO/RTO权衡 |
3.2.4 可用性权衡矩阵
| 手段 |
↑可用性 |
↓性能 |
↓一致性 |
↑成本 |
↓可修改性 |
| 主备冗余 |
↑↑ |
↓(同步开销) |
— |
↑↑ |
— |
| 主主双活 |
↑↑↑ |
↓(同步开销) |
↓(冲突) |
↑↑↑ |
↓ |
| 熔断降级 |
↑↑ |
↑(保护) |
— |
— |
— |
| 多机房 |
↑↑↑ |
↓(跨机房延迟) |
↓ |
↑↑↑ |
↓ |
| 重试 |
↑ |
↓(放大流量) |
— |
— |
— |
3.3 可靠性(Reliability)
3.3.1 定义与度量
| 指标 |
定义 |
公式 |
| 可靠度 R(t) |
t时刻仍正常工作的概率 |
R(t)=e−λt(指数分布) |
| 故障率 λ |
单位时间故障次数 |
λ=1/MTTF |
| 系统可靠度(串联) |
全部正常才正常 |
Rsys=∏Ri |
| 系统可靠度(并联) |
至少一个正常 |
Rsys=1−∏(1−Ri) |
可用性 vs 可靠性(高频易混):
| 维度 |
可用性 Availability |
可靠性 Reliability |
| 关注 |
系统可用时间比例 |
系统无故障运行时间 |
| 度量 |
A = MTTF/(MTTF+MTTR) |
R(t) = e^(-λt) |
| 含义 |
“随时能用” |
“用着不出错” |
| 修复 |
允许修复后继续 |
关注首次故障前时间 |
| 举例 |
99.99%在线 |
运行10000小时不出错 |
3.3.2 可靠性策略
可靠性策略(与可用性策略框架类似,但侧重"不出错")
├── 错误检测
│ ├── 校验和/CRC → 数据完整性校验
│ ├── 心跳/超时 → 故障检测
│ └── 异常监控 → 运行时异常捕获
│
├── 错误恢复
│ ├── 冗余(主备/主主/三副本) → 副本切换
│ ├── 回滚 → 事务回滚
│ ├── 重试 → 失败重试
│ └── 补偿 → 事务补偿
│
├── 错误预防
│ ├── 事务 → 原子操作保证
│ ├── 幂等设计 → 重复执行结果一致
│ ├── 约束校验 → 入参/状态校验
│ └── 代码审查/测试 → 开发期预防
│
└── 冗余计算
├── N版本编程 → 多版本独立实现取多数表决
├── 恢复块 → 主版本+备用版本
└── 三模冗余TMR → 三副本表决(2/3通过)
3.3.3 可靠性技术选型
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 数据冗余 |
三副本/纠删码 |
存储可靠 |
存储成本↑ |
| 校验 |
CRC32/MD5/SHA |
数据传输完整 |
计算开销 |
| 事务 |
ACID事务/2PC/TCC |
数据一致 |
性能↓ |
| 幂等 |
唯一ID/状态机/去重表 |
重试安全 |
存储↑ |
| 监控告警 |
Prometheus+Grafana |
故障发现 |
运维成本 |
| N版本编程 |
多独立实现+表决 |
安全关键系统 |
成本↑↑↑ |
| TMR |
三副本+多数表决 |
航空/航天 |
成本×3 |
3.3.4 串联/并联可靠度计算(必考计算题)
串联系统:R串=R1×R2×...×Rn
并联系统:R并=1−(1−R1)(1−R2)...(1−Rn)
例题:系统由两个子系统串联组成,每个子系统由两个并联组件构成,组件可靠度均为0.9,求系统可靠度。
解:
- 单个子系统并联可靠度:Rsub=1−(1−0.9)2=1−0.01=0.99
- 系统串联可靠度:Rsys=0.99×0.99=0.9801
3.4 安全性(Security)
3.4.1 定义与度量(CIA三性)
| 属性 |
定义 |
威胁 |
策略 |
| 机密性 Confidentiality |
信息不被未授权访问 |
窃听/泄露 |
加密/访问控制 |
| 完整性 Integrity |
信息不被篡改 |
篡改/伪造 |
数字签名/哈希/MAC |
| 可用性 Availability |
信息可被授权访问 |
DoS/DDoS |
限流/冗余/清洗 |
扩展安全属性:
- 认证性 Authentication:验证身份真伪
- 授权性 Authorization:控制访问权限
- 不可否认性 Non-repudiation:行为不可抵赖(数字签名/审计)
3.4.2 安全性策略(三大类)
安全性策略
├── 抵抗攻击
│ ├── 身份认证 → 用户/系统身份验证
│ ├── 用户授权 → 权限控制(RBAC/ABAC)
│ ├── 数据加密 → 传输加密(TLS)/存储加密
│ ├── 限制暴露 → 最小暴露面/防火墙
│ └── 维护数据完整性 → 数字签名/MAC/哈希
│
├── 检测攻击
│ ├── 入侵检测 IDS → 异常行为识别
│ ├── 异常行为检测 → UEBA/规则引擎
│ └── 流量分析 → DDoS检测
│
└── 从攻击中恢复
├── 审计追踪 Audit → 操作日志可追溯
├── 恢复 Restore → 数据恢复/回滚
└── 事后分析 → 取证/根因
3.4.3 安全性技术选型
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 认证 |
OAuth2/OIDC/SAML/JWT/SSO |
统一身份 |
复杂度↑ |
| 授权 |
RBAC/ABAC/ACL/策略引擎 |
权限控制 |
维护成本 |
| 传输加密 |
TLS/mTLS/HTTPS |
通信安全 |
性能↓(加解密) |
| 存储加密 |
AES-256/国密SM4/TDE |
数据静态加密 |
密钥管理复杂 |
| 哈希 |
SHA-256/SM3/Argon2 |
完整性/密码存储 |
— |
| 数字签名 |
RSA-PSS/ECDSA/SM2 |
不可否认/完整 |
计算开销 |
| WAF |
ModSecurity/云WAF |
Web攻击防护 |
误杀风险 |
| IDS/IPS |
Snort/Suricata |
入侵检测/阻断 |
规则维护 |
| 零信任 |
SDP/微隔离/mTLS |
内网安全 |
部署复杂 |
| DDoS防护 |
流量清洗/Anycast |
抗DDoS |
成本↑ |
| 密钥管理 |
KMS/HSM/Vault |
密钥生命周期 |
运维成本 |
| 审计 |
SIEM/ELK |
合规追溯 |
存储成本 |
3.4.4 安全性权衡矩阵
| 手段 |
↑安全 |
↓性能 |
↓易用性 |
↑成本 |
↓可修改性 |
| 加密 |
↑↑ |
↓↓(加解密) |
— |
— |
— |
| 多因素认证 |
↑↑ |
— |
↓↓(繁琐) |
— |
— |
| 零信任 |
↑↑↑ |
↓(每次验证) |
↓ |
↑↑ |
↓ |
| 审计日志 |
↑↑ |
↓(IO开销) |
— |
↑(存储) |
— |
| WAF/IDS |
↑↑ |
↓(检测开销) |
— |
↑ |
— |
3.5 可修改性(Modifiability)
3.5.1 定义与度量
| 指标 |
定义 |
说明 |
| 修改成本 |
完成修改所需工作量 |
人天/代码行 |
| 影响范围 |
修改波及的模块数 |
圈复杂度/耦合度 |
| 绑定时间 |
决策固定的时机 |
编译时/部署时/运行时 |
绑定时间(从早到晚,灵活性递增,性能递减):
- 编译时绑定(代码写死)
- 链接时绑定
- 部署时绑定(配置文件)
- 运行时绑定(动态加载/注册)
3.5.2 可修改性策略(三大类)
可修改性策略
├── 局部化修改(限制变更范围)
│ ├── 维持语义一致性 → 统一命名/约定
│ ├── 预测期望变更 → 预留扩展点
│ ├── 泛化模块 → 泛型/模板
│ ├── 限制可能选项 → 配置枚举
│ ├── 抽象通用服务 → 通用接口
│ ├── 虚拟机 → 解释器/规则引擎
│ └── 配置文件 → 外部化配置
│
├── 防止连锁反应(限制扩散)
│ ├── 信息隐藏 → 封装实现细节
│ ├── 中介者/中介 → 间接调用
│ ├── 限制通信 → 限制模块交互
│ └── 使用中介 → DI/IoC
│
└── 推迟绑定时间(运行时灵活)
├── 运行时注册 → 插件机制/SPI
├── 配置文件 → 配置中心
├── 多态 → 接口+实现
├── 组件替换 → 热插拔
└── 遵循协议 → 标准接口
3.5.3 可修改性技术选型
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 模块化 |
OSGi/Java9模块 |
隔离变更 |
复杂度↑ |
| 分层架构 |
MVC/六边形/整洁架构 |
层间解耦 |
性能↓(层层转发) |
| 接口隔离 |
ISP/接口抽象 |
降低耦合 |
类数量↑ |
| 依赖注入 |
Spring DI/Guice |
解耦依赖 |
运行时开销 |
| 配置中心 |
Apollo/Nacos/Consul |
动态配置 |
一致性挑战 |
| 插件化 |
SPI/Plugin机制 |
可扩展 |
安全风险 |
| 开闭原则 |
OCP/策略模式 |
扩展不修改 |
类膨胀 |
| 微服务 |
服务拆分 |
独立部署 |
分布式复杂度↑↑ |
| 事件驱动 |
EDA/CQRS |
解耦 |
最终一致/调试难 |
| 领域驱动 |
DDD/限界上下文 |
业务可维护 |
学习成本高 |
3.5.4 可修改性权衡矩阵
| 手段 |
↑可修改性 |
↓性能 |
↓安全性 |
↑复杂度 |
↓可测试性 |
| 分层 |
↑↑ |
↓(转发) |
— |
↑ |
↑ |
| 微服务 |
↑↑↑ |
↓(网络) |
↓(攻击面↑) |
↑↑↑ |
↓(集成测试难) |
| 配置中心 |
↑↑ |
— |
↓(配置篡改) |
↑ |
— |
| 插件化 |
↑↑↑ |
↓(加载) |
↓(恶意插件) |
↑↑ |
↓ |
| 事件驱动 |
↑↑ |
↓(异步延迟) |
— |
↑↑ |
↓↓ |
3.6 可测试性(Testability)
3.6.1 定义与度量
| 指标 |
定义 |
公式 |
| 测试覆盖率 |
被测代码占比 |
行/分支/条件覆盖 |
| 可控制性 |
控制输入的难易 |
1-控制成本 |
| 可观察性 |
观察输出的难易 |
1-观察成本 |
| 缺陷密度 |
单位代码缺陷数 |
缺陷数/KLOC |
3.6.2 可测试性策略(两大类)
可测试性策略
├── 输入输出管理
│ ├── 记录/回放 Record/Replay → 录制请求重放
│ ├── 隔离接口 Isolation → 依赖隔离/Mock
│ └── 特化访问接口 → 测试专用接口/Hook
│
└── 内部监控
├── 内置监视器 → 断言/不变式检查
├── 事件日志 → 结构化日志
└── 状态显示 → 健康检查/调试端点
3.6.3 可测试性技术选型
| 策略 |
技术选型 |
适用场景 |
权衡代价 |
| 依赖注入 |
Spring DI/Mockito |
Mock隔离 |
类数量↑ |
| Mock框架 |
Mockito/JMock/PowerMock |
单元测试 |
维护成本 |
| 测试金字塔 |
单元>集成>E2E |
全面覆盖 |
维护成本 |
| 覆盖率 |
JaCoCo/Istanbul |
度量覆盖 |
不等于质量 |
| 可观察性 |
OpenTelemetry/SkyWalking |
链路追踪 |
性能↓(埋点) |
| 日志 |
SLF4J+结构化日志 |
问题定位 |
IO开销 |
| 契约测试 |
Pact/Spring Cloud Contract |
服务间一致 |
维护成本 |
| 混沌工程 |
Chaos Monkey/Litmus |
验证韧性 |
风险 |
| 录制回放 |
GoReplay/TcpDump |
真实流量回放 |
数据脱敏 |
3.6.4 可测试性权衡矩阵
| 手段 |
↑可测试性 |
↓性能 |
↑成本 |
↓可修改性 |
| 依赖注入 |
↑↑ |
↓(反射) |
— |
↑ |
| 监控埋点 |
↑↑ |
↓↓(开销) |
↑ |
— |
| 测试专用接口 |
↑ |
— |
— |
↓(接口膨胀) |
| 混沌工程 |
↑↑ |
— |
↑↑ |
— |
4. 扩展质量属性
4.1 易用性(Usability)
4.1.1 定义
用户使用系统完成任务的容易程度、学习成本、满意度。
4.1.2 易用性策略(两大类)
易用性策略
├── 用户主动(用户发起)
│ ├── 取消 Cancel → 可中断操作
│ ├── 撤销 Undo → 可回退操作
│ ├── 聚合 Aggregate → 批量操作
│ └── 显示多个视图 → 多视角展示
│
└── 系统主动(系统发起)
├── 任务模型 → 引导用户
├── 用户模型 → 个性化
└── 系统模型 → 系统状态可见
4.1.3 技术选型
| 策略 |
技术 |
权衡 |
| 响应式设计 |
CSS Grid/Flex/Tailwind |
兼容性 |
| 无障碍 |
ARIA/WCAG |
开发成本 |
| 引导提示 |
Tour.js/Intro.js |
侵入性 |
| 进度反馈 |
Skeleton/Loading |
— |
| 错误提示 |
表单校验/Toast |
— |
| 个性化 |
推荐算法/用户画像 |
隐私风险 |
4.2 功能性(Functionality)
4.2.1 定义
系统完成预定功能的能力,与需求契合度。
注意:功能性常被视为"功能需求"而非质量属性,但在某些分类中作为质量属性出现,关注功能的完备性、正确性、适用性。
4.3 互操作性(Interoperability)
4.3.1 定义
系统与其他系统交互、共享数据的能力。
4.3.2 互操作性策略
互操作性策略
├── 位置无关
│ ├── 标准协议 → HTTP/HTTPS/gRPC
│ ├── 数据格式标准化 → JSON/XML/Protobuf
│ └── 接口标准化 → OpenAPI/GraphQL Schema
│
└── 机制支持
├── 发现服务 → UDDI/服务注册中心
├── 转换层 → API网关/适配器
└── 标准中间件 → ESB/消息总线
4.3.3 技术选型
| 策略 |
技术 |
权衡 |
| REST |
HTTP+JSON |
简单/文本/性能一般 |
| gRPC |
HTTP/2+Protobuf |
高性能/强类型/浏览器支持差 |
| GraphQL |
Schema+查询语言 |
灵活/复杂 |
| 消息总线 |
Kafka/RabbitMQ |
解耦/异步 |
| ESB |
MuleES/Apache Camel |
集成/重 |
| EDI |
EDIFACT/X12 |
B2B标准/老旧 |
| 数据标准 |
JSON Schema/XSD |
校验/约束 |
5. 设计策略库(按策略分类汇总)
5.1 策略-属性对应总表
| 策略大类 |
具体策略 |
主要服务于 |
次要影响 |
| 资源管理 |
增加资源/引入并发/维持一致性 |
性能 |
可用性↑ |
| 资源调度 |
FIFO/优先级/动态优先级 |
性能 |
可修改性↓ |
| 资源需求 |
减少开销/限频/优先处理 |
性能 |
可用性↑ |
| 错误检测 |
Ping/Echo/心跳/异常/时间戳 |
可用性/可靠性 |
性能↓ |
| 错误恢复 |
冗余/回滚/降级/重试/补偿 |
可用性/可靠性 |
性能↓/成本↑ |
| 错误预防 |
移除故障/事务/监视器/容量规划 |
可用性/可靠性 |
— |
| 抵抗攻击 |
认证/授权/加密/限制暴露/完整性 |
安全性 |
性能↓/易用性↓ |
| 检测攻击 |
IDS/异常检测/流量分析 |
安全性 |
性能↓ |
| 攻击恢复 |
审计/恢复/事后分析 |
安全性 |
成本↑ |
| 局部化修改 |
语义一致/预测变更/泛化/抽象/配置 |
可修改性 |
— |
| 防止连锁 |
信息隐藏/中介/限制通信 |
可修改性 |
性能↓ |
| 推迟绑定 |
运行时注册/配置/多态/替换/协议 |
可修改性 |
性能↓ |
| IO管理 |
记录回放/隔离接口/特化接口 |
可测试性 |
— |
| 内部监控 |
监视器/日志/状态显示 |
可测试性 |
性能↓ |
5.2 策略树(完整版)
├── 性能
│ ├── 资源需求: 减少计算开销 | 限制事件频率 | 优先处理
│ ├── 资源管理: 增加资源 | 引入并发 | 维持一致性
│ └── 资源调度: FIFO | 优先级 | 动态优先级
│
├── 可用性
│ ├── 错误检测: Ping/Echo | 心跳 | 异常检测 | 时间戳
│ ├── 错误恢复: 主动冗余 | 被动冗余 | 备件 | 回滚 | 降级 | 重试 | 补偿
│ └── 错误预防: 移除服务 | 事务 | 进程监视器 | 容量规划
│
├── 可靠性(与可用性策略框架共享,侧重"不出错")
│ ├── 错误检测: 校验和/CRC | 心跳 | 异常监控
│ ├── 错误恢复: 冗余 | 回滚 | 重试 | 补偿
│ ├── 错误预防: 事务 | 幂等 | 约束校验 | 代码审查
│ └── 冗余计算: N版本 | 恢复块 | TMR
│
├── 安全性
│ ├── 抵抗攻击: 认证 | 授权 | 加密 | 限制暴露 | 完整性
│ ├── 检测攻击: IDS | 异常检测 | 流量分析
│ └── 攻击恢复: 审计 | 恢复 | 事后分析
│
├── 可修改性
│ ├── 局部化修改: 语义一致 | 预测变更 | 泛化 | 限制选项 | 抽象服务 | 虚拟机 | 配置
│ ├── 防止连锁: 信息隐藏 | 中介者 | 限制通信 | 使用中介
│ └── 推迟绑定: 运行时注册 | 配置 | 多态 | 组件替换 | 遵循协议
│
├── 可测试性
│ ├── IO管理: 记录回放 | 隔离接口 | 特化接口
│ └── 内部监控: 监视器 | 事件日志 | 状态显示
│
├── 易用性
│ ├── 用户主动: 取消 | 撤销 | 聚合 | 多视图
│ └── 系统主动: 任务模型 | 用户模型 | 系统模型
│
└── 互操作性
├── 位置无关: 标准协议 | 数据格式 | 接口标准
└── 机制支持: 服务发现 | 转换层 | 标准中间件
6. 场景映射(业务场景→质量属性→策略→技术)
6.1 典型业务场景映射表
| 业务场景 |
首要属性 |
次要属性 |
推荐策略 |
推荐技术 |
| 电商大促 |
性能 |
可用性 |
缓存+限流+异步+扩容 |
Redis+Sentinel+Kafka+K8s HPA |
| 金融支付 |
可靠性 |
安全性 |
事务+幂等+加密+审计 |
ACID+唯一ID+国密+SIEM |
| 社交IM |
性能 |
可用性 |
长连接+消息队列+分片 |
Netty+Kafka+分库分表 |
| 在线教育 |
易用性 |
性能 |
CDN+互动直播 |
CDN+WebRTC |
| 医疗系统 |
可靠性 |
安全性 |
冗余+加密+审计+合规 |
三副本+国密+审计+等保 |
| 物联网平台 |
互操作性 |
性能 |
标准协议+消息总线 |
MQTT+Kafka+时序库 |
| 政务系统 |
安全性 |
可用性 |
认证+加密+审计+等保 |
国密+等保+堡垒机 |
| 搜索引擎 |
性能 |
可修改性 |
倒排索引+缓存+分片 |
ES+Redis+分片 |
| 推荐系统 |
性能 |
可修改性 |
缓存+异步+特征工程 |
Redis+MQ+特征平台 |
| 航空订票 |
可靠性 |
性能 |
冗余+事务+幂等 |
TMR+TCC+幂等 |
| 配置中心 |
可修改性 |
可用性 |
推迟绑定+冗余 |
Nacos+集群 |
| 日志分析 |
性能 |
可用性 |
列式存储+批处理 |
ClickHouse+Spark |
| 微服务网关 |
互操作性 |
安全性 |
标准协议+认证+限流 |
Spring Cloud Gateway+OAuth2 |
| DevOps平台 |
可测试性 |
可修改性 |
自动化+监控+流水线 |
Jenkins+Prometheus+OTel |
| 区块链 |
安全性 |
可靠性 |
共识+加密+冗余 |
PBFT+ECDSA+多副本 |
6.2 质量属性优先级场景
| 场景类型 |
优先级排序 |
| 生命攸关(航空/医疗/核电) |
可靠性 > 安全性 > 可用性 > 性能 |
| 金融核心(支付/清算) |
可靠性 > 安全性 > 可用性 > 性能 |
| 互联网C端(电商/社交) |
性能 > 可用性 > 可修改性 > 安全性 |
| 政务/军工 |
安全性 > 可靠性 > 可用性 > 性能 |
| 企业内部系统 |
可修改性 > 可测试性 > 易用性 > 性能 |
| 物联网/工业互联网 |
互操作性 > 可靠性 > 性能 > 安全性 |
| 研发工具/平台 |
可修改性 > 可测试性 > 易用性 > 性能 |
7. 选型比较(横向对比表)
7.1 缓存技术选型对比
| 技术 |
性能 |
一致性 |
可用性 |
适用场景 |
| 本地缓存(Caffeine) |
极高 |
弱(单机) |
低 |
单机热点 |
| Redis |
高 |
强(单线程) |
高(集群) |
通用分布式 |
| Memcached |
高 |
弱 |
高 |
纯KV |
| Hazelcast |
高 |
中 |
高 |
内存网格 |
7.2 消息队列选型对比
| MQ |
吞吐量 |
延迟 |
可靠性 |
顺序性 |
适用 |
| Kafka |
极高(百万/s) |
ms级 |
高(副本) |
分区有序 |
日志/流处理 |
| RabbitMQ |
中(万/s) |
μs级 |
高(ACK) |
严格顺序 |
业务消息 |
| RocketMQ |
高(十万/s) |
ms级 |
高(同步刷盘) |
严格顺序 |
电商事务 |
| Pulsar |
高 |
ms级 |
高(分层存储) |
分区有序 |
多租户 |
7.3 数据库选型对比
| DB |
性能 |
可用性 |
一致性 |
可扩展性 |
适用 |
| MySQL |
中 |
高(主从) |
强(ACID) |
中(分库) |
OLTP通用 |
| PostgreSQL |
中 |
高 |
强 |
中 |
复杂查询 |
| MongoDB |
高 |
高(副本集) |
最终 |
高(分片) |
文档/灵活 |
| Redis |
极高 |
高(集群) |
弱 |
高 |
缓存/KV |
| Cassandra |
高 |
极高 |
最终 |
极高 |
写多读少/全球 |
| ClickHouse |
极高(OLAP) |
高 |
弱 |
高 |
分析查询 |
| TiDB |
中 |
高 |
强(NewSQL) |
高 |
HTAP |
7.4 一致性模型选型
| 模型 |
性能 |
一致性 |
可用性 |
适用 |
| 强一致 |
低 |
强 |
低 |
金融/库存 |
| 最终一致 |
高 |
弱 |
高 |
社交/推荐 |
| 因果一致 |
中 |
中 |
中 |
协同编辑 |
| 读己写 |
中 |
中 |
高 |
用户中心 |
7.5 冗余模式选型
| 模式 |
可用性 |
成本 |
切换时间 |
适用 |
| 冷备 |
低 |
低 |
长(分钟级) |
非核心 |
| 热备(主备) |
中 |
中 |
中(秒级) |
一般核心 |
| 双活(主主) |
高 |
高 |
无(无缝) |
核心 |
| 多活 |
极高 |
极高 |
无 |
全球容灾 |
7.6 认证授权选型
| 方案 |
安全性 |
易用性 |
适用 |
| Session+Cookie |
中 |
高 |
单体Web |
| JWT |
中 |
高 |
无状态/微服务 |
| OAuth2 |
高 |
中 |
第三方授权 |
| OIDC |
高 |
中 |
现代身份 |
| SAML |
高 |
低 |
企业SSO |
| 国密 |
高 |
低 |
政务/合规 |
8. 易混陷阱(高频易错点辨析)
| # |
易混点 |
正确辨析 |
| 1 |
可用性 vs 可靠性 |
可用性=可用时间比例(A=MTTF/MTBF);可靠性=无故障运行时间(R(t)=e^(-λt))。可用性允许修复,可靠性关注首次故障前 |
| 2 |
敏感点 vs 权衡点 |
敏感点影响单一属性;权衡点影响多个属性。权衡点⊂敏感点 |
| 3 |
风险点 vs 非风险点 |
风险点=可能引起问题;非风险点=不会引起问题 |
| 4 |
MTBF vs MTTF |
MTBF=MTTF+MTTR(故障间隔);MTTF=无故障时间(不含修复) |
| 5 |
主动冗余 vs 被动冗余 |
主动=主主同时服务;被动=主备切换 |
| 6 |
强一致 vs 最终一致 |
强一致=写后立即可读;最终一致=写后最终可读 |
| 7 |
降级 vs 熔断 |
降级=主动返回兜底;熔断=故障达阈值后切断调用 |
| 8 |
限流 vs 熔断 |
限流=预防性控制流量;熔断=反应性切断故障 |
| 9 |
性能策略三大类 |
资源需求(减少)/资源管理(增加)/资源调度(优化) |
| 10 |
可修改性三大类 |
局部化修改/防止连锁反应/推迟绑定时间 |
| 11 |
安全性三大类 |
抵抗攻击/检测攻击/从攻击中恢复 |
| 12 |
可用性三大类 |
错误检测/错误恢复/错误预防 |
| 13 |
可测试性两大类 |
输入输出管理/内部监控 |
| 14 |
串联 vs 并联可靠度 |
串联=相乘(R1×R2);并联=1-(1-R1)(1-R2) |
| 15 |
绑定时间顺序 |
编译时<链接时<部署时<运行时(灵活性递增,性能递减) |
| 16 |
CIA三性 |
机密性(不泄露)/完整性(不篡改)/可用性(可用) |
| 17 |
缓存 vs CDN |
缓存=数据级缓存;CDN=内容分发网络(边缘缓存) |
| 18 |
读写分离 vs 分库分表 |
读写分离=主从分工;分库分表=数据分片 |
| 19 |
ATAM vs SAAM |
ATAM=多属性/9步;SAAM=单属性(可修改性)/5步 |
| 20 |
N版本编程 vs 恢复块 |
N版本=多版本并行表决;恢复块=主版本+备用顺序执行 |
9. 避坑实践(生产实践注意事项)
9.1 性能避坑
| 陷阱 |
后果 |
对策 |
| 缓存击穿 |
大量请求穿透到DB |
互斥锁/永不过期+异步刷新 |
| 缓存雪崩 |
大量key同时失效 |
过期时间加随机抖动 |
| 缓存穿透 |
查询不存在数据 |
布隆过滤器/空值缓存 |
| 数据库慢查询 |
响应变慢 |
索引优化+慢SQL监控+SQL防火墙 |
| N+1查询 |
ORM导致多次查询 |
JOIN FETCH/批量查询 |
| 连接泄漏 |
连接池耗尽 |
try-with-resources/连接池监控 |
| 同步阻塞 |
线程池打满 |
异步化/响应式编程 |
| 大事务 |
锁竞争/延迟 |
拆分小事务/最终一致 |
9.2 可用性避坑
| 陷阱 |
后果 |
对策 |
| 重试风暴 |
放大流量雪崩 |
退避+抖动+限制重试次数 |
| 级联故障 |
故障扩散 |
熔断+舱壁隔离+超时 |
| 脑裂 |
双主数据冲突 |
Fencing token/仲裁节点 |
| 主从延迟 |
读到旧数据 |
强制读主/半同步复制 |
| 过度降级 |
功能不可用 |
降级分级/核心保底 |
| 切换抖动 |
频繁主备切换 |
切换冷却期/阈值滞后 |
| 假可用 |
假死不响应 |
健康检查探活+超时 |
9.3 安全性避坑
| 陷阱 |
后果 |
对策 |
| 密钥硬编码 |
泄露风险 |
KMS/Vault/环境变量 |
| 弱加密算法 |
被破解 |
AES-256/SM4/禁用MD5/DES |
| SQL注入 |
数据泄露 |
参数化查询/ORM/预编译 |
| XSS/CSRF |
越权操作 |
输出编码/CSP/Token |
| 越权访问 |
数据泄露 |
RBAC/ABAC/数据权限 |
| 日志泄露敏感信息 |
合规风险 |
脱敏/分级日志 |
| 证书过期 |
服务中断 |
证书监控/自动续期 |
| 依赖漏洞 |
供应链攻击 |
SCA/依赖扫描/锁定版本 |
9.4 可修改性避坑
| 陷阱 |
后果 |
对策 |
| 过度设计 |
复杂度爆炸 |
YAGNI/简单设计先行 |
| 上帝类 |
修改影响大 |
SRP/拆分 |
| 循环依赖 |
无法独立修改 |
依赖反转/分层 |
| 配置散乱 |
难以维护 |
配置中心/统一管理 |
| 接口膨胀 |
维护成本高 |
ISP/接口隔离 |
| 微服务过细 |
分布式复杂度 |
合理拆分/限界上下文 |
9.5 可测试性避坑
| 陷阱 |
后果 |
对策 |
| 强耦合难Mock |
无法单元测试 |
DI/接口抽象 |
| 覆盖率≠质量 |
盲目追求覆盖率 |
变异测试/边界覆盖 |
| 集成测试慢 |
反馈延迟 |
测试金字塔/契约测试 |
| 监控过度 |
性能下降 |
采样/异步上报 |
10. 关联图(知识点关系图)
10.1 质量属性关系图
┌─────────────┐
│ 性能 │
└──────┬──────┘
┌────────────┼────────────┐
↓ ↓ ↓
┌─────┴──┐ ┌────┴───┐ ┌────┴───┐
│ 可用性 │ │ 可靠性 │ │可修改性│
└─────┬──┘ └────┬───┘ └────┬───┘
│ │ │
↓ ↓ ↓
┌─────┴──┐ ┌────┴───┐ ┌────┴───┐
│ 安全性 │←─→│ 可测试性│←→│ 易用性 │
└────────┘ └────────┘ └────────┘
↕ ↕
┌─────┴──┐
│互操作性 │
└────────┘
10.2 质量属性-策略-技术三层图
质量属性 ──→ 策略大类 ──→ 具体策略 ──→ 技术选型
│ │ │ │
├─性能 ├─资源管理 ├─缓存 ├─Redis
│ ├─资源调度 ├─异步 ├─Kafka
│ └─资源需求 └─限流 └─Sentinel
│
├─可用性 ├─错误检测 ├─心跳 ├─Consul
│ ├─错误恢复 ├─冗余 ├─Keepalived
│ └─错误预防 └─熔断 └─Hystrix
│
├─可靠性 ├─错误检测 ├─校验 ├─CRC/SHA
│ ├─错误恢复 ├─重试 ├─Resilience4j
│ └─错误预防 └─幂等 └─唯一ID
│
├─安全性 ├─抵抗攻击 ├─加密 ├─TLS/AES
│ ├─检测攻击 ├─IDS ├─Snort
│ └─攻击恢复 └─审计 └─SIEM
│
├─可修改性 ├─局部化修改 ├─配置 ├─Nacos
│ ├─防止连锁 ├─信息隐藏 ├─封装
│ └─推迟绑定 └─插件 └─SPI
│
└─可测试性 ├─IO管理 ├─Mock ├─Mockito
└─内部监控 └─日志 └─SLF4J
10.3 ATAM评估流程与质量属性关系
ATAM 9步
├── 1. ATAM方法介绍
├── 2. 商业动机描述
├── 3. 架构描述
├── 4. 识别架构方法
├── 5. 生成质量属性效用树 ←── 质量属性+场景+优先级(I/D, H/M/L)
├── 6. 分析架构方法 ←── 敏感点/权衡点/风险点/非风险点
├── 7. 讨论和分级场景
├── 8. 再次分析架构方法
└── 9. 呈现结果
10.4 权衡关系图(关键对立面)
性能 ←──→ 可修改性 (优化降低可修改性)
性能 ←──→ 安全性 (加密消耗性能)
性能 ←──→ 可靠性 (校验/重试消耗性能)
性能 ←──→ 可测试性 (监控埋点消耗性能)
可用性 ←──→ 成本 (冗余增加成本)
可用性 ←──→ 一致性 (CAP权衡)
安全性 ←──→ 易用性 (认证降低易用性)
可修改性 ←──→ 复杂度 (抽象增加复杂度)
可靠性 ←──→ 成本 (冗余增加成本)
11. 双轨口诀(顺口溜+谐音两种记忆口诀)
11.1 顺口溜口诀
六大质量属性顺口溜
性能可用可靠性,安全可改可测试,
六大属性记心间,架构评估是关键。
性能策略顺口溜
性能策略三大类,资源需求管理调度,
减少开销限频率,增加资源引并发,
FIFO优先动态优,缓存异步负载均。
可用性策略顺口溜
可用策略三步走,检测恢复加预防,
心跳Echo查异常,冗余回滚降级重,
熔断摘除故障点,事务监视保平安。
安全性策略顺口溜
安全策略三道关,抵抗检测加恢复,
认证授权加密锁,IDS查异常行,
审计追踪留证据,CIA保三性全。
可修改性策略顺口溜
可改策略三方向,局部修改防连锁,
推迟绑定增灵活,信息隐藏用中介,
配置插件多态化,运行时注册最灵活。
ATAM四点顺口溜
敏感一点一对一,权衡一对多对多,
风险有患非无患,权衡必是敏感点。
权衡关系顺口溜
性能可改两相悖,性能安全也相违,
可用成本正比涨,安全易用反比降,
可靠性能难两全,CAP三者择其二。
11.2 谐音口诀
六大属性谐音
"性可安可改可" → 性(星)可(渴)安(按)可(渴)改(盖)可(渴)
联想:星渴按渴盖渴 → "星星口渴,按下口渴,盖上口渴"
简化:性·可·安·可·改·可 → "星可安,可改可"
性能三大策略谐音
"需管调" → 需(虚)管(馆)调(掉)
联想:虚馆掉 → "虚幻的馆子掉下来了"
= 资源需求 + 资源管理 + 资源调度
可用性三大策略谐音
"测复防" → 测(侧)复(腹)防(房)
联想:侧腹房 → "侧腹的房间"
= 错误检测 + 错误恢复 + 错误预防
安全性三大策略谐音
"抵检恢" → 抵(底)检(剑)恢(灰)
联想:底剑灰 → "底下的剑灰"
= 抵抗攻击 + 检测攻击 + 从攻击中恢复
可修改性三大策略谐音
"局防推" → 局(锯)防(房)推(腿)
联想:锯房腿 → "锯房子的腿"
= 局部化修改 + 防止连锁反应 + 推迟绑定时间
ATAM四点谐音
"敏权风非" → 敏(民)权(全)风(疯)非(飞)
联想:民全疯飞 → "民众全部疯飞"
= 敏感点 + 权衡点 + 风险点 + 非风险点
CIA三性谐音
"机完可" → 机(鸡)完(碗)可(渴)
联想:鸡碗渴 → "鸡碗渴了"
= 机密性 + 完整性 + 可用性
可靠度公式谐音
串联乘并联补:
"串乘并补" → 串(穿)乘(绳)并(病)补(布)
联想:穿绳病布 → "穿绳子的病布"
= 串联相乘,并联用补(1-(1-R))
12. 速记总表 + 背诵路线
12.1 质量属性-策略-度量速记总表
| 属性 |
度量公式 |
策略大类 |
核心策略 |
关键技术 |
| 性能 |
L=λ×W |
需求/管理/调度 |
缓存/异步/限流/扩容 |
Redis/Kafka/Sentinel |
| 可用性 |
A=MTTF/(MTTF+MTTR) |
检测/恢复/预防 |
心跳/冗余/熔断/降级 |
Consul/Keepalived/Hystrix |
| 可靠性 |
R(t)=e^(-λt) |
检测/恢复/预防 |
校验/重试/幂等/TMR |
CRC/Resilience4j/唯一ID |
| 安全性 |
CIA |
抵抗/检测/恢复 |
认证/加密/IDS/审计 |
OAuth2/TLS/Snort/SIEM |
| 可修改性 |
修改成本 |
局部/防连锁/推迟 |
配置/DI/插件/分层 |
Nacos/Spring/SPI/MVC |
| 可测试性 |
覆盖率 |
IO管理/监控 |
Mock/日志/追踪 |
Mockito/SLF4J/OTel |
| 易用性 |
任务完成率 |
用户主动/系统主动 |
取消/撤销/引导 |
Tour.js/ARIA |
| 互操作性 |
集成度 |
位置无关/机制 |
标准协议/网关 |
REST/gRPC/ESB |
12.2 ATAM核心概念速记表
| 概念 |
定义 |
一句话 |
| 敏感点 |
影响单一质量属性的参数 |
一对一 |
| 权衡点 |
影响多个质量属性的参数 |
一对多(⊂敏感) |
| 风险点 |
可能引起问题的决策 |
有隐患 |
| 非风险点 |
不会引起问题的决策 |
无隐患 |
12.3 可靠度公式速记表
| 模型 |
公式 |
说明 |
| 单组件 |
R(t)=e^(-λt) |
λ=故障率 |
| 串联 |
R=R1×R2×…×Rn |
全部正常 |
| 并联 |
R=1-(1-R1)(1-R2)…(1-Rn) |
至少一个正常 |
| n中取k |
R=ΣC(n,i)R^i(1-R)^(n-i), i≥k |
k/n表决 |
| 可用率 |
A=MTTF/(MTTF+MTTR) |
可用时间占比 |
| MTBF |
MTBF=MTTF+MTTR |
故障间隔 |
12.4 可用性等级速记表
| 等级 |
可用率 |
年停机 |
| 2个9 |
99% |
3.65天 |
| 3个9 |
99.9% |
8.76h |
| 4个9 |
99.99% |
52.6min |
| 5个9 |
99.999% |
5.26min |
12.5 权衡关系速记表
| 对立面 |
关系 |
典型 |
| 性能↔可修改 |
反比 |
优化降低可修改性 |
| 性能↔安全 |
反比 |
加密消耗性能 |
| 性能↔可靠 |
反比 |
校验消耗性能 |
| 可用↔成本 |
正比 |
冗余增加成本 |
| 可用↔一致 |
CAP |
三选二 |
| 安全↔易用 |
反比 |
认证降低易用性 |
| 可改↔复杂 |
正比 |
抽象增加复杂度 |
12.6 策略分类速记表
| 属性 |
策略大类 |
子策略数 |
| 性能 |
需求/管理/调度 |
3类9项 |
| 可用性 |
检测/恢复/预防 |
3类13项 |
| 可靠性 |
检测/恢复/预防+冗余计算 |
4类 |
| 安全性 |
抵抗/检测/恢复 |
3类11项 |
| 可修改性 |
局部/防连锁/推迟 |
3类17项 |
| 可测试性 |
IO管理/内部监控 |
2类6项 |
| 易用性 |
用户主动/系统主动 |
2类7项 |
| 互操作性 |
位置无关/机制支持 |
2类6项 |
12.7 终极双轨口诀速记
顺口溜总诀:
六属性,性可安,可改可测易用互;
性能需管调,可用测复防,安全抵检恢,
可改局防推,可测IO监,易用主被两,互操位机双。
ATAM四点:敏权风非,权衡必敏感。
CAP三选二,CIA保安全,串联乘并联补。
谐音总诀:
六大属性:"星可安,可改可"(星渴按,渴盖渴)
性能策略:"需管调"(虚馆掉)
可用策略:"测复防"(侧腹房)
安全策略:"抵检恢"(底剑灰)
可改策略:"局防推"(锯房腿)
可测策略:"IO监"(爱欧监)
ATAM四点:"敏权风非"(民全疯飞)
CIA三性:"机完可"(鸡碗渴)
可靠公式:"串乘并补"(穿绳病布)
13. 背诵路线建议
第一轮:基础概念(1-2天)
- 背诵六大质量属性名称及一句话定义
- 背诵ATAM四类发现点(敏感/权衡/风险/非风险)及关系
- 背诵可用性公式 A=MTTF/(MTTF+MTTR) 和可用性等级表
- 背诵可靠度公式(串联相乘、并联补集)
- 背诵CIA三性
第二轮:策略分类(2-3天)
- 每个属性画出策略树(三大类)
- 性能:需管调(资源需求/管理/调度)
- 可用性:测复防(错误检测/恢复/预防)
- 安全性:抵检恢(抵抗/检测/恢复)
- 可修改性:局防推(局部化/防连锁/推迟绑定)
- 可测试性:IO监(IO管理/内部监控)
- 配合顺口溜和谐音口诀记忆
第三轮:技术选型与权衡(2-3天)
- 每个策略对应2-3个典型技术
- 背诵权衡关系(性能↔可修改、性能↔安全等)
- 背诵场景映射表(电商/金融/医疗等)
- 练习可靠度计算题(串联/并联/混联)
第四轮:综合应用(1-2天)
- 结合ATAM流程理解质量属性效用树
- 练习给定场景选择策略和技术
- 练习权衡分析(为什么选A不选B)
- 复习易混陷阱20条
考试策略
选择题:
- 考策略分类:记住每个属性的策略大类
- 考ATAM概念:敏感点/权衡点/风险点定义
- 考公式:可用率、可靠度、MTBF
- 考权衡:性能vs安全、可用vs成本
案例分析题:
- 给场景→识别质量属性→选策略→选技术
- 给架构→分析敏感点/权衡点/风险点
- 给需求→权衡选择并说明理由
论文题:
- 可结合"质量属性驱动的架构设计"主题
- 论述ATAM评估方法的应用
- 论述特定属性(如高可用/高性能)的架构设计
- 举例说明权衡决策过程
10个高频失分点
- 混淆可用性与可靠性:可用性关注"可用时间比例",可靠性关注"无故障运行时间"
- 权衡点与敏感点关系记反:权衡点⊂敏感点(权衡点一定是敏感点)
- MTBF与MTTF混淆:MTBF=MTTF+MTTR
- 串联并联公式用反:串联相乘,并联用补
- 性能策略三大类记混:资源需求(减少)/资源管理(增加)/资源调度(优化)
- 可用性策略三大类记混:错误检测/错误恢复/错误预防
- 安全性策略三大类记混:抵抗攻击/检测攻击/从攻击中恢复
- 可修改性策略三大类记混:局部化修改/防止连锁反应/推迟绑定时间
- CIA三性记混:机密性(不泄露)/完整性(不篡改)/可用性(可用)
- 绑定时间顺序记反:编译时<链接时<部署时<运行时(灵活性递增,性能递减)
附录A:术语速查表
| 术语 |
全称 |
含义 |
| QA |
Quality Attribute |
质量属性 |
| ATAM |
Architecture Tradeoff Analysis Method |
架构权衡分析法 |
| SAAM |
Software Architecture Analysis Method |
软件架构分析法 |
| CBAM |
Cost Benefit Analysis Method |
成本收益分析法 |
| MTTF |
Mean Time To Failure |
平均无故障时间 |
| MTTR |
Mean Time To Repair |
平均修复时间 |
| MTBF |
Mean Time Between Failures |
平均故障间隔时间 |
| CIA |
Confidentiality/Integrity/Availability |
机密/完整/可用 |
| RBAC |
Role-Based Access Control |
基于角色的访问控制 |
| ABAC |
Attribute-Based Access Control |
基于属性的访问控制 |
| TMR |
Triple Modular Redundancy |
三模冗余 |
| IDS |
Intrusion Detection System |
入侵检测系统 |
| IPS |
Intrusion Prevention System |
入侵防御系统 |
| WAF |
Web Application Firewall |
Web应用防火墙 |
| SIEM |
Security Information and Event Management |
安全信息事件管理 |
| KMS |
Key Management Service |
密钥管理服务 |
| HSM |
Hardware Security Module |
硬件安全模块 |
| OTP |
One-Time Password |
一次性密码 |
| OIDC |
OpenID Connect |
开放身份连接 |
| SSO |
Single Sign-On |
单点登录 |
| DI |
Dependency Injection |
依赖注入 |
| IoC |
Inversion of Control |
控制反转 |
| ISP |
Interface Segregation Principle |
接口隔离原则 |
| OCP |
Open-Closed Principle |
开闭原则 |
| SRP |
Single Responsibility Principle |
单一职责原则 |
| EDA |
Event-Driven Architecture |
事件驱动架构 |
| CQRS |
Command Query Responsibility Segregation |
命令查询职责分离 |
| DDD |
Domain-Driven Design |
领域驱动设计 |
附录B:参考技术栈速查
| 领域 |
技术栈 |
| 缓存 |
Redis/Memcached/Caffeine/Hazelcast |
| 消息队列 |
Kafka/RabbitMQ/RocketMQ/Pulsar |
| 数据库 |
MySQL/PostgreSQL/MongoDB/TiDB/Cassandra/ClickHouse |
| 服务治理 |
Spring Cloud/Dubbo/istio/Linkerd |
| 配置中心 |
Nacos/Apollo/Consul/etcd |
| 监控 |
Prometheus/Grafana/OpenTelemetry/SkyWalking |
| 安全 |
OAuth2/JWT/TLS/国密/WAF/IDS |
| 限流熔断 |
Sentinel/Hystrix/Resilience4j |
| 分布式事务 |
Seata/2PC/3PC/TCC/Saga |
| 容器编排 |
Kubernetes/Docker Swarm/Nomad |
| API网关 |
Spring Cloud Gateway/Kong/APISIX |
| 服务网格 |
Istio/Linkerd/Consul Connect |
文档说明:本文档为软考系统架构设计师「质量属性策略与技术选型权衡」专题总文档,按12章节结构组织,覆盖六大核心质量属性+三大扩展属性的完整策略库、技术选型、权衡分析与备考速记。与架构评估文档(软考架构师_架构评估_总文档.md)互补:评估文档侧重ATAM方法流程,本文档侧重质量属性本身的策略与选型。
生成时间:2026-10-18
评论(0)