架构评审的 checklist
一句话速记
架构评审不是”证明方案好”,而是在方案被代码实现之前,用 checklist 扫一遍最可能出问题的 10 个维度。评审围绕四个核心问题:① 这方案在正常流量下工作吗?(正确性);② 在异常情况下怎么表现?(韧性);③ 6 个月后这个方案会被骂吗?(演进性);④ 团队能安全地实现和运维它吗?(可落地性)。一次评审最多讨论 3 个重大问题——超过 3 个,方案退回重做,不开马拉松评审会。
通俗解释(5 分钟版)
架构评审就像一个飞前检查清单:
飞行员不是"感觉飞机能飞",而是按 checklist 一项一项过:
发动机?✓ 襟翼?✓ 燃油?✓ 通讯?✓
你的架构方案也需要一个 checklist,否则你只会按"感觉"来判断:
"感觉应该可以吧" → 上线 → "感觉错了" → 事故
关键细节
评审 checklist
□ 1. 需求对齐
方案解决了正确的需求吗?
有没有过度设计(设计了一个能承载 100 倍流量的系统,
但业务只需要 1 倍)?
有没有"设计了一个更优雅的方案,但它解决的是
未来可能有的需求而不是现在确实有的"?
□ 2. 核心数据流
数据从入口到出口,经过了哪些系统?
每个跳转点:
- 失败时怎么处理?(重试?降级?直接报错?)
- 有没有 timeout?timeout 设了多少?
- 同步还是异步?如果改成异步会怎样?
□ 3. 数据库设计
新表/新字段有没有索引?
有没有可能会全表扫描的查询?
有没有在循环里查 DB?能不能合并成一次查询?
数据量大到什么量级会需要分库分表?(现在多少?半年后多少?)
□ 4. 接口设计
是向后兼容的吗?(现有调用方不需要改)
如果不是,有多少个调用方需要改?谁负责通知和跟踪?
有没有限流?(不设限流 = 假设下游永远不会被打爆)
超时和重试策略是什么?
□ 5. 异步与消息
如果用了消息队列:
- 消息丢失了怎么办?(业务影响是什么)
- 消息重复了怎么办?(要不要幂等?怎么幂等?)
- 消息积压了怎么办?(消费速度 < 生产速度时)
□ 6. 失败模式
每个外部依赖(DB/Redis/下游服务/MQ)如果不可用,
系统会怎么样?
有没有降级方案?降级到什么程度?
"依赖挂了,服务就挂" → 这个依赖的可用性 ≤ 你的可用性
□ 7. 安全
有用户输入的地方有没有参数校验?
有没有 SQL 拼接(必须参数化查询)?
有没有可能让用户 A 看到用户 B 的数据?(越权)
有没有敏感数据(密码/手机号/身份证号)被打印到日志里?
□ 8. 可观测性
新功能有没有埋点(P99 耗时、错误率)?
有没有关键路径的日志(带 TraceID)?
如果这个方案上线后出了问题,你要看什么指标、查什么日志?
□ 9. 部署与迁移
上线有灰度吗?灰度多久放完?
上线需要和其他团队的改动配合吗?依赖顺序是什么?
有回滚方案吗?回滚后数据兼容吗?
□ 10. 运维
这个方案引入的新组件,团队 oncall 的人能处理吗?
有没有 runbook?("半夜 3 点这个组件挂了,怎么做")
评审结果分级
Approved(通过):
✓ 所有 checklist 项都合理回答
✓ 没有已知的"会导致事故"的漏洞
→ 可以开始写代码
Approved with Comments(有条件通过):
✓ 核心设计没问题
✓ 有 1-3 个非致命的待改进项
→ 改进项记录下来,用 TODO/JIRA 跟踪,但不阻塞开发
Revise & Resubmit(退回修改):
✗ 有 3 个以上的重大问题
✗ 或者有 1 个致命问题(比如"消息丢失会导致
用户付了钱但没收到订单")
→ 退回修改,下次再评。不要在原评审会上
临时 brainstorm 怎么修——那是浪费时间
评审会怎么开
前(至少 1 天):
方案文档发出来,参与人 async 读过再上会
中(45-60 分钟):
1. 作者用 10 分钟讲方案核心 + 最大的风险点
(不要从头念文档——大家都看过了)
2. 15 分钟澄清问题(只问"是什么"不讨论"好不好")
3. 30 分钟讨论——聚焦最可能出问题的地方
4. 5 分钟总结:通过 / 有条件通过 / 退回修改 +
记录决定和待办项
后(24 小时内):
发一个决定总结到群里:
- 结论:Approved / Approved with Comments / R&R
- 关键讨论点(3 行以内)
- 待办项(如果有)+ Owner + 截止日
延伸追问
- Q:架构评审和 RFC 有什么区别? → 高度重叠。RFC 偏向”方案本身的设计合理性”(为什么这么设计、备选有哪些),架构评审偏向”方案的系统性风险”(数据一致性、可用性、安全、运维)。实践中可以合二为一——一次会议做两件事。
- Q:小改动也需要架构评审吗? → 不需要。架构评审的门槛:新增一个服务、改核心数据模型、引入新中间件、跨服务接口变更。CRUD 功能、bug fix、UI 调整不需要。
- Q:评审时争论不下怎么办? → 设时间上限。如果在 15 分钟内无法达成共识,TL 做决定。不是谁的方案更好——是在有限信息下有人做决定然后往前走、以后再调整,比永远争论不下要好。
我的记法
- 10 项 checklist:需求、数据流、DB、接口、异步、失败、安全、可观测、部署、运维
- 最多 3 个问题:超过 3 个 = 退回重做,不开马拉松评审
- 评审结论:Approved / Approved with Comments / Revise & Resubmit
- 一句话:「架构评审不是证明好,是用 checklist 找漏洞——找到了是评审的成功,不是方案的失败」
状态
- 已背速记
- 能讲通俗版
- 能答追问