Skip to content

技术决策与 ADR ​

定位:金融级稳定性方法论(5/6)。稳定性问题的一半根源不在代码在决策:谁拍板、怎么拍、拍完记不记。本篇写:技术决策的四种模式(含反例)、ADR 记录模板、双向门/单向门(Reversibility)判断、架构委员会评审要点。关联:方案文档里的对比章节是 ADR 的素材(见 如何出一个技术方案)。决策失误积累下来的架构债见 复杂度治理。

一、决策的四种模式 ​

模式做法适用场景风险
一人拍板(Dictator)架构师直接定紧急故障决策、小范围技术选型巴士因子、个人盲区
顾问(Consult)一人拍板前广泛听取意见,决策权与责任收敛在 DRI大多数技术决策(默认模式)听谁的意见决定盲区大小
共识(Consensus)所有相关方同意才通过跨多团队的核心契约(错误码规范、接口标准)慢;容易妥协出"没人反对"的方案
民主投票(Vote)多数决技术问题上不适用责任被摊薄成零;选出的是分歧最小解而非最优解
  • 民主投票是反例重灾区:技术的对错不因票数改变。投票选出的方案往往是"没人强烈反对"的方案,而没人反对常常意味着没人真正理解它。
  • 真实教训型反例:投票选注册中心,A 与 B 各有已知硬伤,最后选了没人反对但也没人深入的 C。三个月后 A、B 的硬伤在 C 上同时出现,此时已无人负责。投票时人人都出了票,追责时人人都没决策权。
  • 正确姿势:即使共识/顾问模式,最终也要收敛到一个 DRI(直接责任人)签字。"集体决策"在故障复盘里是找不到主语的,找不到主语的决策没有质量约束。

二、双向门与单向门:Reversibility 判断 ​

决策最重要的分类不是大小,是可逆性(Amazon 的 Type 1 / Type 2 框架):

   双向门(可逆,Type 2)                    单向门(不可逆/难逆,Type 1)
   ─────────────────────────               ─────────────────────────
   内部实现、开关、参数、中间件升级          金额精度(用分还是元)、核心表主键设计
   灰度可试、试错可回退                      对外 API 契约、消息 topic 语义
   动作:快试、快学、快回                    机房/单元化架构、合规与数据模型
   流程:轻——评审可免,监控回滚必须有        动作:慢议、慢定,因为"回退"≈重做一遍
   反例:当单向门处理 → 议而不决,           流程:重——ADR + 架构委员会(见下两节)
        三周的会开完市场没了                 反例:当双向门处理 → 上线即定终身,
                                              第二年全公司在给这个决定打工

判断标准一句话:回退成本是否可控。问三个问题——数据能迁回吗(存量数据已按新模型写入)?外部使用方有多少(契约一旦发布收不回)?监管合规可逆吗?三个有一个"不能",就是单向门。

信贷场景的单向门清单(示例):

  • 金额字段精度与舍入规则
  • 账户/借据表模型
  • 对外还款渠道的 API 语义
  • 计息规则的口径定义
  • 单元化路由的分区键

这些决策改一次,动的是几年的数据和上下游。

决策流程的触发器——出现以下情况,必须走决策而不是"顺手做":

  1. 要新建一个系统/中间件/公共库(复杂度入账,见 复杂度治理);
  2. 要引入新的外部依赖或第三方组件(故障半径 +1)。对照 SLO 与稳定性工程 的服务分级;
  3. 要改任何对外契约或核心表模型(单向门);
  4. 两个团队对方案有实质分歧且各有量化依据。分歧是决策的信号,不是麻烦。

三、ADR:把决策写成可追溯的一页纸 ​

ADR(Architecture Decision Record)模板:

# ADR-014:账单日扣款链路异步化改造

状态:已接受(2026-08)          取代:无(如推翻 ADR-009 则在此标注)

背景:
  账单日扣款峰值达日常 12 倍,同步链路 DB 连接池成为瓶颈,
  近两次账单日均触发限流(错误预算消耗记录见 SLO 篇)。

决策:
  扣款改为"扣款单落库 + 异步队列 + 失败重入"模型;
  不引入新的调度中间件,复用现有 MQ。

后果:
  正面:峰值吞吐与 DB 连接解耦,账单日不再限流。
  负面/代价:扣款结果可见性延迟(秒级);需维护重入幂等
  (新增对账维度);必须写,不写代价的 ADR 是宣传稿。

放弃的选项:
  - 方案 A(同步链路优化 + 扩容):压测证明拐点提升不足 1 倍,
    达不到 3 年容量目标(压测数据见容量篇)。
  - 方案 C(保持现状 + 提前扩容):成本 2.4 倍且不解决连接池瓶颈。

写法纪律:

  • 一页纸、编号、写日期。ADR 是索引不是论文,细节链接到方案文档与压测报告。
  • 不可修改:推翻旧决策 = 写一条新 ADR 并在状态栏标注"取代 ADR-0XX"。涂改历史等于销毁证据。
  • "放弃的选项"是全篇最有价值的段落:半年后有人重提方案 A 时,ADR-014 就是答案。这也是 如何出一个技术方案 里"被否掉的方案留着别删"的原因。评审文档的方案对比节就是 ADR 的素材来源。
  • 反例:决策记录散落在群聊、会议纪要和个人脑里——人走了决策就失传,继任者把三年前被量化否掉的方案当创新重做一遍,再踩一遍已经付过学费的坑。

ADR 的组织方式:

docs/adr/
  0001-金额精度采用分存储.md
  0009-账单日扣款走同步链路.md      ← 状态:被 0014 取代
  0014-账单日扣款链路异步化.md      ← 状态:已接受
  index.md                          ← 一页索引:编号、一句话摘要、状态、取代关系

两条纪律:跟代码仓库走(同 repo 同分支评审,决策与实现一起做版本管理)。编号递增不复用(被取代的 ADR 留着,翻案轨迹本身就是历史)。index.md 的价值:新人 10 分钟扫完"这个系统为什么长成这样"的全部重大决定。认知负荷的治理成本极低、收益极高(见 复杂度治理)。

四、架构委员会评审要点 ​

委员会只该看两类东西:单向门决策和跨域契约。双向门进委员会 = 委员会变成瓶颈,排队两周盖章, everyone 学会绕行。

评审 checklist(会上逐条过):

#评审问题不过的样子
1放弃的选项列了吗?放弃理由量化了吗"综合评估最优"——没有对比的结论无法审
2这扇门是单向的吗?判断依据(回退成本)成立吗单向门当双向门过,直接进发布流程
3最坏情况是什么:爆炸半径、失败模式、回滚路径"应该没问题"(对照稳定性三板斧篇的预案要求)
4有没有更简单的做法?新增系统/组件的长期维护者是谁只论证"能做成",不论证"养得起"(见复杂度治理)
5与既有 ADR 冲突吗默默推翻旧决策不留痕
  • 时限与异步:单向门评审限时(如会上 30 分钟定生死,材料提前 2 天发出)。双向门根本不进会,走线上异步评审。委员会成为瓶颈的反例:每周一次例会、议程排到两个月后。于是所有决策都"先干着,回头补评审",制度名存实亡。
  • 委员会的产出是 ADR,不是"同意"两个字:会上达成的条件、修改意见、放弃的理由,当场落进 ADR 修订记录。

五、决策反模式速查 ​

反模式长什么样纠正
会议决策决议 = 纪要里一句"大家同意"落 ADR,DRI 签字
拖延型共识"再调研一下"开了四轮会设决策截止日,按现有信息拍
委员会盖章单向门没进会,小改动排两周只审单向门,双向门异步过
皇帝新衣只有一人懂方案,其余人点头顾问模式必须留"反对意见"记录
复古决策半年后悄悄重做被否的方案ADR 索引 + 翻案必须写新 ADR
英雄决策深夜一人改了核心配置,次日无人知晓变更走评审留痕,口头批准不算数

追问链 ​

为什么技术决策默认用"顾问模式"而不是共识?

共识的隐性成本是时间和妥协。所有相关方都点头,通常意味着方案在每个人最在意的地方都让了一步,最后得到的是拼盘。顾问模式把"听取"与"拍板"分开:意见充分进入(避免盲区),责任明确收敛(DRI 签字),速度与质量都有约束。只有"契约类"决策(错误码、接口规范)值得付共识的成本,因为它的执行成本在所有团队。

DRI 拍板拍错了怎么办?

看门的方向:双向门拍错是学费(快速回退,学到了)。单向门拍错是事故——所以单向门的 DRI 资格、评审流程、假设条件都要更重。且 ADR 里写清"当时基于什么假设做的决定",假设失效时后人知道该翻案而不是骂人。错误的决策流程比错误的决策更危险,因为它是可复用的错误。

ADR 和 wiki 里的设计文档有什么区别?

设计文档回答"系统是什么样",ADR 回答"为什么不是别的样子"。设计文档会随实现更新,ADR 一经接受就冻结、只能被新 ADR 取代。它是决策的法律层,设计文档是执行层。一个团队可以没有漂亮的设计文档,但不能没有决策记录。文档丢了可以重写,决策依据丢了,下次还要再付一遍学费。

紧急故障现场的决策要不要走 ADR?

现场决策用一人拍板模式(见第一节,快是第一优先级)。但事后 48 小时内补一条简版 ADR:当时的判断依据、备选动作、为什么选了这个。故障时刻的决策质量是组织最宝贵的学习材料。不记录,下次故障还得重新发明一遍判断。而且事后补记的 ADR 经常暴露"当时还有第四个选项",这本身就是复盘的价值。

一句话总结 ​

决策按可逆性分流:双向门快试快回,单向门慢议慢定。模式默认"顾问 + DRI",投票用于选举不用于技术。每个单向门留一页冻结的 ADR——尤其是"放弃的选项",那是组织交过学费的记忆。

2026-10 新增(金融级稳定性方法论系列)。