技术架构方法论 · 第 3 课

权衡分析与架构评审:ATAM 精简版

候选架构有了,怎么检验它的取舍站得住?答案不是"再看一遍",而是用质量属性场景系统性地轰炸它。

⏱ 约 18 分钟 📌 前置:第 1 课第 2 课 📎 评审清单

为什么需要正式的权衡分析

凭感觉评审的典型场面:评审人各自发散提问("为什么不用 XX?""考虑过高并发吗?"),方案人见招拆招,一小时后大家凭氛围通过。问题在于:发散提问检验的是方案人的口才,不是架构的取舍。SEI 的 ATAM 给出了系统化替代——原版重达数天,本课取其内核压缩成一小时内可跑完的精简版。

知识点一:评审要找的三样东西

ATAM 的核心洞察:评审的产出不是"通过/不通过",而是把架构里三类关键位置找出来(SEI ATAM 论文):

概念定义拍卖系统例子
敏感点
Sensitivity Point
某个决策显著影响单个质量属性裁定服务的单写入点:直接决定一致性上限
权衡点
Tradeoff Point
某个决策同时拉扯多个质量属性,一升一降单写入点:一致性↑,但写入吞吐与伸缩性↓
风险
Risk
可能危及驱动属性、且尚无应对的决策(或未决策)消息总线故障时围观推送全断——总线成了新单点

权衡点是评审的黄金矿脉:方案人自己往往只看到了升的那一边。InfoQ 汇总 15 年 ATAM 数据显示,最高频的冲突对是性能 vs 可修改性、可用性 vs 成本、安全 vs 性能(Toward Agile Architecture)——评审时优先往这些方向挖。

知识点二:精简版评审流程(五步,60 分钟内)

  1. 陈述(10 分钟):方案人讲三样——驱动属性排序、候选架构、已知的取舍。没有排序,评审直接中止退回第 1 课。
  2. 场景轰炸(25 分钟):评审人逐条抛质量属性场景,标准句式:"当【刺激】发生在【环境】时,系统如何做到【响应+度量】?"方案人指着架构图回答走通路径。
  3. 标记(10 分钟):每答完一条,共同判定涉及的决策是敏感点还是权衡点,白板记下。
  4. 风险登记(10 分钟):走不通、答不出、或"回头再想"的,全部进风险清单——评审最重要的产出就是这张清单
  5. 行动项(5 分钟):每条风险指定归属人与解决期限;重大取舍写入 ADR(第 5 课)。
关键认知 场景式提问与发散式质疑的区别:"考虑过高并发吗?"可以用一句"考虑过"糊弄过去;"截止前 1 秒 500 人同时出价,裁定路径怎么走、多久出结果?"必须指着图一步步走通。好评审不质疑人,只轰炸结构。

知识点三:评审红旗清单

听到以下信号,说明方案还没到可评审状态(完整版见评审清单):

随堂测验

1. ATAM 术语里,「权衡点」指的是?
2. 哪种提问方式是评审的标准句式?
3. 精简版评审最重要的产出是?

实战练习:评审你自己的方案

把第 2 课参考答案里的方案(服务化主体 + 事件驱动推送通道)当作被评审对象,你当评审人。

你的任务(10 分钟):

  1. 用标准句式写 2 条场景式提问(刺激 + 环境 + 要求的响应度量)。
  2. 找出这个方案里 1 个权衡点、1 个风险
写完再看:参考答案

场景式提问示例:

  1. "拍卖截止前 1 秒(环境),500 人同时提交出价(刺激),裁定路径怎么走?多久内所有人看到一致的成交结果(度量 ≤2s)?"
  2. "裁定服务所在节点宕机发生在截止前 3 秒(刺激+环境),5 秒故障转移的承诺还成立吗?转移期间已提交未确认的出价去哪了(响应)?"

权衡点:单写入点串行裁定——一致性↑(唯一成交有保证),但写入吞吐↓、且故障转移窗口内不可写(可用性↓)。升的一面第 2 课讲了,降的两面就是评审要补上的。

风险示例(任一即可):① 消息总线成为推送链路的新单点,总线故障 = 数万围观者集体失明,方案未给应对;② 推送通道最终一致,围观者可能基于已过期的价格出价,被拒后体验受损,未定义"可接受的延迟上界";③ 故障转移 5s 与"截止前 5s 内"重叠时的裁定规则未定义。

注意:这三条风险全部出自"参考答案"——任何方案被场景轰炸后都会掉出风险,这是评审有效的证明,不是方案不行的证明。

课后延伸

主推资料源InfoQ:Toward Agile Architecture(15 年 ATAM 数据洞察)——比原论文好读得多,高频冲突对的实证数据都在这篇。想追根溯源再读 SEI ATAM 原文。日常评审直接用评审清单(参考文档)

💬 想拿自己团队的真实方案走一遍精简评审——回到对话里贴上来,我陪你跑流程。

← 第 2 课:架构风格选型 下一课:架构可视化——C4 分层画图 →