候选架构有了,怎么检验它的取舍站得住?答案不是"再看一遍",而是用质量属性场景系统性地轰炸它。
凭感觉评审的典型场面:评审人各自发散提问("为什么不用 XX?""考虑过高并发吗?"),方案人见招拆招,一小时后大家凭氛围通过。问题在于:发散提问检验的是方案人的口才,不是架构的取舍。SEI 的 ATAM 给出了系统化替代——原版重达数天,本课取其内核压缩成一小时内可跑完的精简版。
ATAM 的核心洞察:评审的产出不是"通过/不通过",而是把架构里三类关键位置找出来(SEI ATAM 论文):
| 概念 | 定义 | 拍卖系统例子 |
|---|---|---|
| 敏感点 Sensitivity Point | 某个决策显著影响单个质量属性 | 裁定服务的单写入点:直接决定一致性上限 |
| 权衡点 Tradeoff Point | 某个决策同时拉扯多个质量属性,一升一降 | 单写入点:一致性↑,但写入吞吐与伸缩性↓ |
| 风险 Risk | 可能危及驱动属性、且尚无应对的决策(或未决策) | 消息总线故障时围观推送全断——总线成了新单点 |
权衡点是评审的黄金矿脉:方案人自己往往只看到了升的那一边。InfoQ 汇总 15 年 ATAM 数据显示,最高频的冲突对是性能 vs 可修改性、可用性 vs 成本、安全 vs 性能(Toward Agile Architecture)——评审时优先往这些方向挖。
听到以下信号,说明方案还没到可评审状态(完整版见评审清单):
把第 2 课参考答案里的方案(服务化主体 + 事件驱动推送通道)当作被评审对象,你当评审人。
你的任务(10 分钟):
场景式提问示例:
权衡点:单写入点串行裁定——一致性↑(唯一成交有保证),但写入吞吐↓、且故障转移窗口内不可写(可用性↓)。升的一面第 2 课讲了,降的两面就是评审要补上的。
风险示例(任一即可):① 消息总线成为推送链路的新单点,总线故障 = 数万围观者集体失明,方案未给应对;② 推送通道最终一致,围观者可能基于已过期的价格出价,被拒后体验受损,未定义"可接受的延迟上界";③ 故障转移 5s 与"截止前 5s 内"重叠时的裁定规则未定义。
注意:这三条风险全部出自"参考答案"——任何方案被场景轰炸后都会掉出风险,这是评审有效的证明,不是方案不行的证明。
主推资料源:InfoQ:Toward Agile Architecture(15 年 ATAM 数据洞察)——比原论文好读得多,高频冲突对的实证数据都在这篇。想追根溯源再读 SEI ATAM 原文。日常评审直接用评审清单(参考文档)。
💬 想拿自己团队的真实方案走一遍精简评审——回到对话里贴上来,我陪你跑流程。