下面以一个网上书店系统性能优化 为背景,完整演示 CBAM(成本效益分析法) 的评估过程。CBAM 在 ATAM 识别出多个候选架构方案后,进一步引入成本和收益的量化分析,辅助决策者选择投资回报率最高的方案。
📘 CBAM 评估案例:网上书店系统性能提升
🧭 背景介绍
- 系统:网上书店(与 ATAM 案例相同)
- 现状问题 :大促期间下单接口 TPS 仅为 2000,但业务目标要求 5000 TPS,响应时间 ≤ 500ms
- 已有 ATAM 分析:识别出三个候选架构方案(A、B、C),均能满足性能目标,但成本、风险不同
- 评估目标 :通过 CBAM 量化每个方案的成本 与收益,选择最优方案
- 评估团队:架构师、产品经理、运维负责人、财务代表(共 5 人)
阶段 1:确定候选架构方案
| 方案 | 描述 | 预期性能提升(TPS) | 风险等级 |
|---|---|---|---|
| A | 增加本地缓存 + 数据库读写分离 | 3000 → 5000(提升 2000) | 低 |
| B | 引入消息队列,将下单与支付异步化 | 2000 → 5500(提升 3500) | 中 |
| C | 全量引入内存数据网格(如 Hazelcast) | 2000 → 8000(提升 6000) | 高 |
阶段 2:量化收益(业务价值)
核心假设 :
每提升 100 TPS,每年可增加营收 10 万元(来自产品经理估算,基于大促额外订单量)。
收益计算公式 :
年收益(万元) = (提升的 TPS / 100) × 10
| 方案 | 提升 TPS | 年收益(万元) |
|---|---|---|
| A | 2000 | (2000/100)×10 = 200 |
| B | 3500 | (3500/100)×10 = 350 |
| C | 6000 | (6000/100)×10 = 600 |
阶段 3:估算成本
3.1 开发成本(人月)
- 方案 A:2 人月(增加缓存、改造数据库读写分离)
- 方案 B:3 人月(引入 RocketMQ、修改订单流程、处理事务一致性)
- 方案 C:8 人月(集成 Hazelcast、改造所有数据访问层)
3.2 运维成本(年增量)
- 方案 A:新增缓存服务器(2 台 4C8G) + 读写分离(1 台从库),年运维成本约 5 万元
- 方案 B:新增消息队列集群(3 台),年运维成本约 8 万元
- 方案 C:新增内存数据网格集群(5 台,大内存),年运维成本约 25 万元
3.3 总成本(首年)
计算公式:总成本 = 开发成本 × 人均单价 + 年运维成本
假设人均单价 = 3 万元/人月(公司内部核算价)
| 方案 | 开发成本(万元) | 运维成本(万元/年) | 首年总成本(万元) |
|---|---|---|---|
| A | 2 × 3 = 6 | 5 | 11 |
| B | 3 × 3 = 9 | 8 | 17 |
| C | 8 × 3 = 24 | 25 | 49 |
阶段 4:计算回报率与净收益
4.1 投资回报率(ROI)
ROI = (年收益 - 年总成本) / 年总成本 × 100%
| 方案 | 年收益(万元) | 首年总成本(万元) | 年净收益(万元) | ROI(首年) |
|---|---|---|---|---|
| A | 200 | 11 | 189 | 1718% |
| B | 350 | 17 | 333 | 1959% |
| C | 600 | 49 | 551 | 1124% |
注:ROI 非常高是因为性能提升带来的业务价值巨大,且开发成本相对较低。现实中可能还包括其他隐形费用。
4.2 回收期
- 方案 A:11 / (200/12) ≈ 0.66 个月(不到 3 周)
- 方案 B:17 / (350/12) ≈ 0.58 个月
- 方案 C:49 / (600/12) ≈ 0.98 个月
阶段 5:加入风险调整
CBAM 通常还会考虑风险对预期收益的折减。
定义风险因子(0~1,越高越不安全):
- 方案 A:风险低 → 风险因子 0.9
- 方案 B:风险中(异步消息可能引入数据不一致)→ 风险因子 0.7
- 方案 C:风险高(技术复杂、团队不熟悉)→ 风险因子 0.5
风险调整后年收益 = 年收益 × 风险因子
| 方案 | 原年收益 | 风险因子 | 调整后年收益 | 首年总成本 | 调整后净收益 |
|---|---|---|---|---|---|
| A | 200 | 0.9 | 180 | 11 | 169 |
| B | 350 | 0.7 | 245 | 17 | 228 |
| C | 600 | 0.5 | 300 | 49 | 251 |
调整后 ROI:
- A: (180-11)/11 = 1536%
- B: (245-17)/17 = 1341%
- C: (300-49)/49 = 512%
阶段 6:敏感性分析(可选)
测试变量(如每 100 TPS 年收益从 10 万降到 5 万)时:
| 方案 | 原净收益 | 收益减半后净收益 | 是否仍为正? |
|---|---|---|---|
| A | 189 | 89 | ✅ |
| B | 333 | 158 | ✅ |
| C | 551 | 276 | ✅ |
结论:即使收益减半,所有方案仍盈利,但方案 C 的 ROI 显著下降。
阶段 7:决策建议
基于风险调整后 ROI 和净收益:
- 方案 B 调整后净收益 228 万,介于 A 和 C 之间,但性能提升显著(3500 TPS),且技术成熟(消息队列)
- 方案 A 风险最低,但性能提升较小(2000 TPS),适合保守策略
- 方案 C 净收益最高(251 万),但风险大、成本高、团队学习曲线陡峭
最终推荐 :方案 B(异步消息队列)
理由:ROI 可观(1341%),性能超额满足目标,风险可控,且为未来进一步扩展(如引入事件溯源)打下基础。
✅ CBAM 总结(与 ATAM 区别)
| 维度 | ATAM | CBAM |
|---|---|---|
| 核心问题 | 架构能否满足质量属性?如何权衡? | 哪个架构方案最划算? |
| 输入 | 业务目标、效用树、架构方法 | ATAM 识别出的候选方案 + 成本/收益数据 |
| 输出 | 风险、敏感点、权衡点 | ROI、净收益、推荐方案 |
| 量化程度 | 部分量化(响应时间、并发数) | 强量化(货币化收益、成本) |
| 参与者 | 架构师、开发、运维、产品 | 增加财务代表 |
| 决策依据 | 技术权衡 + 优先级 | 经济指标(ROI、回收期) |