返回架构笔记
Arch Day 16

Arch Day 16: ADR体系建设(高级)

ADR(Architecture Decision Record)体系建设不是简单地写决策文档,而是构建组织级的架构决策追踪系统——让每个重要的技术选择都有记录、可追溯、可审计,使架构决策从"口头约定"演化为"制度化资产"。

2026-04-15
第一阶段 - 架构基础
ADR架构决策决策追踪技术雷达架构治理

日期: 2026-04-15 (Day 16) 阶段: 第一阶段 - 架构基础 标签: #ADR #架构决策 #决策追踪 #技术雷达 #架构治理


核心概念

一句话定义

ADR(Architecture Decision Record)体系建设不是简单地写决策文档,而是构建组织级的架构决策追踪系统——让每个重要的技术选择都有记录、可追溯、可审计,使架构决策从"口头约定"演化为"制度化资产"。

为什么资深架构师仍需关注

在我十年金融软件经验中,经历过无数次这样的场景:

  • "为什么当初选了MongoDB而不是PostgreSQL?" —— 没人记得
  • "这个微服务拆分的决策是谁做的?基于什么理由?" —— 当初决策的人已经离职了
  • "三年前我们评估过Kafka,为什么没用?现在要不要重新评估?" —— 找不到任何记录

这就是架构知识流失问题。在金融行业,监管审计经常需要追溯技术决策的依据——"为什么选择了这种加密方案?""灾备方案的设计依据是什么?"没有ADR体系,这些问题要么回答不了,要么每次都要从头研究。

资深架构师需要关注ADR体系的原因:

  1. 决策一致性:团队中多个架构师做决策时,ADR确保不出现矛盾
  2. 新人上手:新加入的工程师能快速理解"为什么系统是这样的"
  3. 决策复用:类似问题不需要每次重新讨论
  4. 技术债管理:标记为Deprecated的ADR就是技术债的显性化
  5. 监管合规:金融行业的审计要求

常见误区与反模式

误区表现正确做法
ADR = 会议纪要记录了讨论过程,但没有明确决策和理由ADR应该有明确的"决策"和"理由"部分
只记录采纳的方案只写最终选择,不记录被否决的方案必须记录考虑过的其他选项及其否决理由
写了不维护ADR写完就丢进wiki角落ADR需要有生命周期管理(review/deprecate/supersede)
粒度不当每个小决定都写ADR / 只写超大决策建立分级标准,战略/战术/实现级
事后补写系统已经上线了才开始补ADRADR应该在决策时写,即使是简短版本
缺乏模板每个人写的格式都不一样统一模板,降低写作门槛

知识点详解

知识点一:ADR分类体系

不是所有架构决策都同等重要。建立分级体系可以让团队把精力集中在最重要的决策上。

三级分类框架

┌─────────────────────────────────────────┐
│  战略级 ADR (Strategic)                  │
│  影响范围: 整个系统/多个系统              │
│  决策者: 架构委员会/CTO                   │
│  示例: 微服务vs单体/主数据库选型/云厂商选择│
│  Review频率: 每年                        │
│  编号: ADR-S-XXX                         │
├─────────────────────────────────────────┤
│  战术级 ADR (Tactical)                   │
│  影响范围: 单个服务/模块                  │
│  决策者: Tech Lead/高级工程师             │
│  示例: 缓存策略/消息序列化格式/API版本策略 │
│  Review频率: 每季度                      │
│  编号: ADR-T-XXX                         │
├─────────────────────────────────────────┤
│  实现级 ADR (Implementation)             │
│  影响范围: 代码层面的关键选择              │
│  决策者: 开发团队                        │
│  示例: ORM选择/日志框架/测试策略          │
│  Review频率: 需要时                      │
│  编号: ADR-I-XXX                         │
└─────────────────────────────────────────┘

分级判断标准

判断维度战略级战术级实现级
影响范围跨系统/全组织单系统/模块单服务/代码
变更成本极高(数月工期)高(数周工期)中低(数天)
可逆性极难逆转困难但可逆相对容易
涉及利益方业务+技术+管理技术团队开发团队
典型决策频率每年<10个每季度5-15个每月若干

知识点二:ADR生命周期管理

ADR不是"写完就不管了"的静态文档,而是有完整生命周期的活文档。

┌──────────┐    ┌──────────┐    ┌──────────┐
│ Proposed │───→│ Accepted │───→│Deprecated│
│ (草案)    │    │ (生效)    │    │ (废弃)   │
└──────────┘    └─────┬────┘    └──────────┘
      │               │               ▲
      │               │               │
      ▼               ▼               │
┌──────────┐    ┌──────────┐          │
│ Rejected │    │Superseded│──────────┘
│ (否决)    │    │ (被取代)  │
└──────────┘    └──────────┘

各状态说明

状态含义触发条件行动
Proposed决策提案,待讨论有人提出架构决策需求安排review会议
Accepted已通过,正在执行Review通过团队遵循执行
Deprecated不再推荐,但旧系统可继续有更好的方案出现新项目不再使用
Superseded被新ADR完全取代新ADR明确取代旧ADR标注新ADR编号
Rejected讨论后被否决Review未通过记录否决理由(很重要)

状态转换规则

1. Proposed → Accepted: 需要至少2位高级工程师+1位架构师review
2. Proposed → Rejected: 需要记录否决理由
3. Accepted → Deprecated: 需要说明废弃原因和迁移路径
4. Accepted → Superseded: 新ADR必须引用旧ADR编号
5. Deprecated ADR保留至少1年后才能归档删除

知识点三:ADR与技术雷达的联动

ThoughtWorks技术雷达将技术分为四个象限(采纳/试验/评估/暂缓),ADR可以与技术雷达联动形成完整的技术治理体系。

技术雷达                        ADR体系
┌──────────┐               ┌──────────────────┐
│  采纳     │──── 对应 ────→│ Accepted ADR      │
│ (Adopt)  │               │ "我们选择使用X技术" │
├──────────┤               ├──────────────────┤
│  试验     │──── 对应 ────→│ Proposed ADR      │
│ (Trial)  │               │ "我们在项目Y试用X"  │
├──────────┤               ├──────────────────┤
│  评估     │──── 对应 ────→│ (暂无ADR)         │
│ (Assess) │               │ 列入评估清单       │
├──────────┤               ├──────────────────┤
│  暂缓     │──── 对应 ────→│ Rejected ADR      │
│ (Hold)   │               │ "我们决定不使用X"   │
└──────────┘               └──────────────────┘

联动流程

  1. 技术雷达每季度更新一次
  2. 新技术进入"评估"→安排POC→结论写入ADR
  3. POC成功→技术雷达标"试验"→ADR状态"Proposed"
  4. 试验成功→技术雷达标"采纳"→ADR状态"Accepted"
  5. 技术过时→技术雷达标"暂缓"→相关ADR"Deprecated"

知识点四:ADR Review机制

ADR Review流程:

1. 提交者写ADR草案(Proposed)
   │
2. 发起Review请求(指定reviewer)
   │
3. 异步Review阶段(2-5个工作日)
   │  ├── 各reviewer独立审阅
   │  ├── 在ADR文档上留下评论
   │  └── 标注: 同意/有疑问/反对
   │
4. 同步讨论会(如有分歧)
   │  ├── 30分钟时限
   │  ├── 提交者解释关键决策
   │  └── 讨论分歧点
   │
5. 最终决策
   │  ├── 全部同意 → Accepted
   │  ├── 有条件同意 → 修改后Accepted
   │  └── 重大分歧 → Rejected或升级决策
   │
6. 通知相关团队

Review清单

## ADR Review Checklist

### 内容完整性
- [ ] 问题背景是否清晰?
- [ ] 是否列出了所有合理的替代方案?
- [ ] 每个替代方案的优劣分析是否客观?
- [ ] 决策理由是否充分且可追溯?
- [ ] 是否识别了主要风险和缓解措施?

### 质量属性
- [ ] 是否评估了对性能的影响?
- [ ] 是否评估了对可用性的影响?
- [ ] 是否评估了对安全性的影响?
- [ ] 是否评估了对可维护性的影响?

### 实施可行性
- [ ] 团队是否有能力实施?
- [ ] 时间线是否合理?
- [ ] 成本估算是否准确?
- [ ] 是否有迁移/回退计划?

### 组织对齐
- [ ] 是否与已有ADR一致(无矛盾)?
- [ ] 是否符合技术雷达策略?
- [ ] 是否获得相关利益方的确认?

知识点五:ADR模板(高质量版)

# ADR-[S/T/I]-[编号]: [决策标题]

## 元数据
- 状态: Proposed | Accepted | Deprecated | Superseded | Rejected
- 日期: YYYY-MM-DD
- 决策者: [姓名/角色]
- Reviewer: [姓名列表]
- 取代: [旧ADR编号] (如适用)
- 被取代: [新ADR编号] (如适用)
- 关联: [相关ADR编号列表]

## 背景与问题

### 业务背景
[为什么需要做这个决策?业务驱动力是什么?]

### 技术背景
[当前技术现状是什么?技术约束有哪些?]

### 约束条件
[预算/时间/团队能力/合规等约束]

## 决策驱动因素(Decision Drivers)
1. [因素1及权重]
2. [因素2及权重]
3. [因素3及权重]

## 候选方案

### 方案A: [名称]
- 描述: ...
- 优势: ...
- 劣势: ...
- 成本: ...
- 风险: ...

### 方案B: [名称]
- 描述: ...
- 优势: ...
- 劣势: ...
- 成本: ...
- 风险: ...

### 方案C: [名称] (如有)
...

## 方案对比

| 维度 | 方案A | 方案B | 方案C |
|------|-------|-------|-------|
| 性能 | ... | ... | ... |
| 成本 | ... | ... | ... |
| 复杂度 | ... | ... | ... |
| 团队经验 | ... | ... | ... |
| 厂商锁定 | ... | ... | ... |

## 决策

选择方案[X]。

## 决策理由
[详细解释为什么选择这个方案,而不是其他方案]

## 后果

### 积极后果
- ...

### 消极后果(及缓解措施)
- 消极: ... → 缓解: ...

### 风险
- ...

## 实施计划
- Phase 1: ...
- Phase 2: ...

## Review记录
- [日期] [姓名]: [意见]
- [日期] [姓名]: [意见]

对比分析

ADR工具与平台对比

工具存储方式版本控制搜索能力模板支持协作适用团队
Markdown in Git代码仓库天然支持Git搜索自定义PR Review技术团队
ConfluenceWiki页面历史全文搜索模板丰富评论混合团队
adr-tools(CLI)本地文件手动grep固定模板个人/小团队
Backstage集成平台依赖后端结构化可定制工作流大型组织
Notion云文档页面历史全文搜索数据库实时协作创业团队
ADR Manager专用工具内置结构化内置工作流重度使用团队

我的推荐

  • 小团队(5-15人):Markdown in Git,和代码一起管理,零成本
  • 中型组织(50-200人):Confluence + 结构化模板 + 定期review
  • 大型组织(200+人):专用平台(Backstage/自研) + 自动化工作流

ADR与其他决策文档对比

文档类型关注点生命周期受众与ADR关系
ADR架构层面的技术决策长期维护技术团队核心
RFC提案征求意见决策前全团队ADR的前序
设计文档详细设计方案项目周期开发团队ADR的实现展开
PRD产品需求版本周期产品+技术ADR的业务驱动
技术方案实现细节开发周期开发人员ADR的细化

架构设计实操

实操目标

写5个高质量ADR,覆盖金融系统的核心技术选型,并建立ADR分类体系。

ADR-S-001: 主数据库选型

# ADR-S-001: 交易系统主数据库选型

## 元数据
- 状态: Accepted
- 日期: 2026-04-15
- 决策者: 首席架构师
- Reviewer: DBA团队Lead, 后端Tech Lead, 安全工程师
- 关联: ADR-S-003(缓存策略), ADR-T-002(读写分离)

## 背景与问题

### 业务背景
跨境支付平台核心交易系统需要选择主数据库。系统需要支持:
- 日均50万笔交易,峰值2000 TPS
- 强一致性(金融交易不允许数据丢失或不一致)
- 多币种实时汇率计算
- 7年数据保留(监管要求)

### 技术约束
- 团队有丰富的关系型数据库经验
- 需要ACID事务支持
- 需要成熟的高可用方案
- 云原生部署(AWS)

## 决策驱动因素
1. 数据一致性保证(权重40%)
2. 高可用性方案成熟度(权重25%)
3. 团队经验和生态(权重20%)
4. 性能和可扩展性(权重15%)

## 候选方案

### 方案A: PostgreSQL (AWS Aurora)
- 描述: 基于PostgreSQL的云原生数据库
- 优势: 强一致性/丰富的数据类型/活跃社区/Aurora多副本
- 劣势: 单写节点/Aurora vendor lock-in
- 成本: ~$3000/月(Multi-AZ, r6g.2xlarge)

### 方案B: MySQL (AWS Aurora)
- 描述: 基于MySQL的云原生数据库
- 优势: 极广泛的使用/成熟的运维工具/Aurora Global Database
- 劣势: 功能不如PostgreSQL丰富/JSON支持较弱
- 成本: ~$2800/月(Multi-AZ, r6g.2xlarge)

### 方案C: CockroachDB
- 描述: 分布式SQL数据库,原生多写
- 优势: 原生分布式/多写/强一致性/跨地域部署
- 劣势: 团队无经验/生态较小/成本更高/延迟略高
- 成本: ~$5000/月(CockroachDB Dedicated)

## 方案对比

| 维度 | PostgreSQL/Aurora | MySQL/Aurora | CockroachDB |
|------|------------------|-------------|-------------|
| 一致性 | 强(SERIALIZABLE) | 强(但默认RR) | 强(SERIALIZABLE) |
| 高可用 | Aurora多副本(成熟) | Aurora多副本(成熟) | 原生多写(新) |
| 团队经验 | 丰富 | 非常丰富 | 无 |
| 水平扩展 | 读扩展/写单点 | 读扩展/写单点 | 原生水平扩展 |
| 金融案例 | 很多 | 非常多 | 增长中 |
| 监控工具 | 成熟 | 最成熟 | 中等 |
| 迁移风险 | 低 | 低 | 高 |

## 决策

选择方案A: PostgreSQL (AWS Aurora)。

## 决策理由
1. PostgreSQL的SERIALIZABLE隔离级别和丰富的数据类型(如NUMERIC精确计算)最适合金融场景
2. Aurora提供了成熟的高可用方案(多AZ自动故障转移, <30s)
3. 团队有丰富的PostgreSQL经验,学习成本为零
4. 虽然CockroachDB的分布式架构更先进,但团队缺乏经验,且当前规模(2000 TPS)不需要分布式写入
5. 如果未来规模增长到需要分布式写入,可以评估迁移到CockroachDB(ADR预留)

## 后果

### 积极后果
- 成熟可靠的技术选型,团队可快速上手
- Aurora的运维负担低(自动备份/补丁/故障转移)
- 金融场景有大量参考案例

### 消极后果(及缓解措施)
- 写入是单点瓶颈 → 缓解: 读写分离(ADR-T-002) + 分库分表预案
- Aurora有AWS vendor lock-in → 缓解: 应用层使用标准SQL,避免Aurora特有功能
- 单写节点故障转移时有短暂不可用(~30s) → 缓解: 应用层重试机制

## 实施计划
- Phase 1(第1-2周): 搭建Aurora集群,配置Multi-AZ
- Phase 2(第3-4周): 数据模型设计,性能基准测试
- Phase 3(第5-6周): 应用适配,读写分离配置

ADR-S-002: 服务间通信方式

# ADR-S-002: 微服务间通信方式选型

## 元数据
- 状态: Accepted
- 日期: 2026-04-15
- 决策者: 架构委员会
- Reviewer: 后端Tech Lead, 基础设施Lead, QA Lead

## 背景与问题
微服务架构中,服务间通信方式直接影响系统的可靠性、性能和可维护性。
需要确定同步通信和异步通信的技术选型。

## 决策

### 同步通信: gRPC
- 内部服务间调用统一使用gRPC
- 理由: 强类型(Protocol Buffers)/高性能/双向流/成熟的服务治理

### 异步通信: Apache Kafka
- 事件驱动和异步处理统一使用Kafka
- 理由: 高吞吐/持久化/有序/金融行业广泛使用

### 外部API: REST(OpenAPI 3.0)
- 面向外部客户端的API使用REST
- 理由: 通用性/易调试/生态成熟

## 通信模式决策矩阵

| 场景 | 通信方式 | 理由 |
|------|---------|------|
| 交易链路(同步) | gRPC | 低延迟/强一致 |
| 交易事件通知 | Kafka | 解耦/可靠/可重放 |
| 对账/批处理 | Kafka | 高吞吐/有序 |
| 外部商户API | REST | 通用/易集成 |
| 实时行情推送 | gRPC Stream | 双向流/高效 |

ADR-T-003: 分布式缓存策略

# ADR-T-003: 分布式缓存策略

## 元数据
- 状态: Accepted
- 日期: 2026-04-15
- 决策者: 后端Tech Lead
- 关联: ADR-S-001(数据库选型)

## 决策

选择Redis Cluster作为分布式缓存。

## 缓存策略

| 数据类型 | 缓存策略 | TTL | 一致性方案 |
|---------|---------|-----|----------|
| 汇率数据 | Cache-Aside | 5s | TTL过期自动刷新 |
| 用户Session | Write-Through | 30min | Redis为主存储 |
| 热点查询结果 | Cache-Aside | 60s | 变更时主动失效 |
| 配置数据 | Refresh-Ahead | 5min | 发布时主动推送 |

## 缓存一致性保障

采用"先更新DB,后删除缓存"策略:
1. 更新数据库
2. 删除缓存(而非更新缓存)
3. 下次读取时从DB加载到缓存

不选择"先删缓存后更新DB"的原因:
并发场景下可能读到旧数据并缓存,导致长时间不一致。

## 缓存穿透/雪崩防护
- 穿透: 布隆过滤器 + 空值缓存(TTL=30s)
- 雪崩: TTL随机偏移 + 熔断降级
- 击穿: 分布式锁(Redisson) + 单Flight模式

ADR-T-004: 消息队列使用规范

# ADR-T-004: Kafka消息队列使用规范

## 元数据
- 状态: Accepted
- 日期: 2026-04-15
- 关联: ADR-S-002(服务通信)

## Topic命名规范

{domain}.{entity}.{event-type}

示例:
- payment.transaction.created
- payment.transaction.completed
- risk.assessment.flagged
- notification.email.sent

## 消息格式

统一使用Avro + Schema Registry:
- 理由: 强类型/向前向后兼容/Schema演进
- 编码: Avro Binary(非JSON,节省带宽)

## 关键配置决策

| 配置项 | 决策 | 理由 |
|--------|------|------|
| acks | all | 金融场景不允许丢消息 |
| enable.idempotence | true | 精确一次语义 |
| min.insync.replicas | 2 | 至少2副本确认 |
| replication.factor | 3 | 三副本冗余 |
| retention | 30天 | 满足审计和重放需求 |

## 消费者幂等性
所有消费者必须实现幂等处理:
- 方案1: 业务ID去重(推荐)
- 方案2: 数据库唯一约束
- 禁止: 依赖Kafka偏移量保证仅一次

ADR-T-005: 部署策略

# ADR-T-005: 生产环境部署策略

## 元数据
- 状态: Accepted
- 日期: 2026-04-15
- 决策者: DevOps Lead + 架构师

## 决策

采用蓝绿部署(Blue-Green) + 金丝雀发布(Canary)混合策略。

## 部署流程

1. 代码合并到main → 自动构建Docker镜像
2. 自动部署到Staging环境 → 运行全量回归测试
3. Staging通过 → 金丝雀部署(5%流量) → 观察30分钟
4. 金丝雀正常 → 分批扩量(5%→25%→50%→100%)
5. 每批次观察15分钟核心指标(错误率/延迟/业务成功率)
6. 任何异常 → 自动回滚到蓝色环境

## 回滚策略

| 触发条件 | 回滚方式 | 时间要求 |
|---------|---------|---------|
| 错误率>0.1% | 自动回滚 | <2分钟 |
| P99延迟>2x | 手动确认后回滚 | <5分钟 |
| 业务指标异常 | 人工判断 | <15分钟 |
| 数据库变更 | 需要执行回滚SQL | <30分钟 |

## 数据库变更原则
- Schema变更必须向后兼容
- 先加列后删列(分两次发布)
- 禁止在部署过程中执行破坏性变更

建立ADR索引与分类

# ADR索引

## 战略级 (Strategic)
| 编号 | 标题 | 状态 | 日期 |
|------|------|------|------|
| ADR-S-001 | 交易系统主数据库选型 | Accepted | 2026-04-15 |
| ADR-S-002 | 微服务间通信方式选型 | Accepted | 2026-04-15 |

## 战术级 (Tactical)
| 编号 | 标题 | 状态 | 日期 |
|------|------|------|------|
| ADR-T-003 | 分布式缓存策略 | Accepted | 2026-04-15 |
| ADR-T-004 | Kafka消息队列使用规范 | Accepted | 2026-04-15 |
| ADR-T-005 | 生产环境部署策略 | Accepted | 2026-04-15 |

## 决策关联图
ADR-S-001(数据库) ←→ ADR-T-003(缓存)
ADR-S-002(通信)   ←→ ADR-T-004(消息队列)
ADR-T-005(部署)   ←→ ADR-T-004(消息队列)

AI增强实践

AI辅助ADR编写

Prompt模板——ADR草稿生成

你是一位资深金融系统架构师。我需要为以下决策写ADR:

决策问题: [描述需要做的技术决策]
业务背景: [业务场景和约束]
技术约束: [团队能力/预算/时间限制]
已知候选方案: [列出已知方案]

请按照标准ADR模板生成草稿,包括:
1. 至少3个候选方案的详细对比
2. 从性能/成本/复杂度/团队经验/厂商锁定5个维度评估
3. 明确的决策理由
4. 潜在风险和缓解措施

要求: 面向金融系统,重点关注数据一致性和合规性。

AI辅助ADR Review

请review以下ADR,检查:
1. 是否遗漏了重要的候选方案?
2. 对比分析是否客观?
3. 决策理由是否充分?
4. 是否遗漏了重要的风险?
5. 是否与以下已有ADR存在矛盾?
   [列出相关ADR摘要]

[粘贴ADR内容]

AI驱动的ADR知识图谱

# 概念:利用AI构建ADR之间的关联图谱
class ADRKnowledgeGraph:
    """
    利用AI自动分析ADR之间的关联关系:
    - 技术依赖: ADR-A选择的技术被ADR-B依赖
    - 潜在冲突: ADR-C的决策可能与ADR-D矛盾
    - 影响传播: ADR-E被废弃后哪些ADR需要review
    """

    def analyze_dependencies(self, all_adrs):
        """自动发现ADR之间的依赖关系"""
        pass

    def detect_conflicts(self, new_adr, existing_adrs):
        """检测新ADR与已有ADR的潜在冲突"""
        pass

    def impact_analysis(self, deprecated_adr):
        """分析废弃某ADR的影响范围"""
        pass

与Web3/DeFi的关联

DeFi协议中的"链上ADR"

DeFi协议的架构决策有一个独特特征:许多决策是通过DAO治理投票做出的,决策过程和结果永久记录在链上。

传统ADR                          DeFi "链上ADR"
┌──────────────┐              ┌──────────────────┐
│ Confluence/Git│              │ Governance Forum  │
│ 内部可见      │              │ 公开可见          │
│ 团队决策      │              │ 社区投票决策       │
│ 可修改/删除   │              │ 链上不可篡改       │
│ 无执行约束    │              │ 智能合约自动执行    │
└──────────────┘              └──────────────────┘

DeFi治理提案作为ADR的类比

ADR要素DeFi治理提案对应
背景(Context)Forum讨论帖
候选方案(Options)温度检查(Temp Check)的多个选项
决策(Decision)Snapshot/链上投票结果
后果(Consequences)链上执行结果
状态(Status)提案状态(Active/Executed/Defeated)

对PM的启示:Web3产品的架构决策流程比传统软件更透明、更民主,但也更慢、更复杂。作为Web3 PM,需要在"快速迭代"和"社区治理"之间找到平衡。


今日思考

问题一:ADR的投入产出比

写ADR需要时间。一个高质量的战略级ADR可能需要4-8小时。对于一个高速迭代的创业团队,这个成本是否值得?如何在"快速行动"和"记录决策"之间找到平衡?是否存在"最小可行ADR"(MV-ADR)的概念?

问题二:ADR的组织文化障碍

在我的经验中,推行ADR最大的障碍不是工具或模板,而是文化——"写ADR会暴露我的决策弱点""我不想被ADR约束"。如何在组织中建立"ADR是帮助而非束缚"的文化?ADR与心理安全(Psychological Safety)的关系是什么?

问题三:AI时代ADR会进化成什么?

如果AI能自动分析代码变更、推断架构决策、生成ADR草稿,ADR的形式会发生什么变化?是否会从"人写文档"变成"AI生成 + 人review"的模式?这对架构师的角色意味着什么?


面试题准备

面试题1: 架构决策如何追踪和治理?

30秒回答

我使用ADR(架构决策记录)体系。每个重要决策都有标准格式记录——包括背景、候选方案、决策理由和后果。ADR分为战略、战术、实现三级,有完整的生命周期管理。这样确保决策可追溯、团队可共识、新人可理解。

2分钟回答

架构决策治理我采用三层方法:

第一层是ADR文档。每个重要决策用标准模板记录,关键是不仅记录"选了什么",更要记录"为什么不选其他方案"。我把ADR分为战略级(跨系统)、战术级(单系统)、实现级(代码层面),不同级别有不同的review流程和决策者。

第二层是ADR生命周期管理。ADR不是写完就丢,而是有Proposed→Accepted→Deprecated→Superseded的完整生命周期。我们每季度review所有Accepted状态的ADR,检查是否需要更新。

第三层是与技术雷达联动。团队维护一个简版技术雷达,标注"采纳/试验/评估/暂缓"的技术,每个状态变更都对应ADR操作。

在金融系统中,这套体系还有一个重要作用——满足监管审计要求。审计人员问"为什么用这种加密方案"时,我们能直接给出ADR,包括评估过程和决策依据。

追问准备

  • Q: 你写过最重要的ADR是什么? A: 一个金融系统从单体到微服务的迁移决策。这个ADR花了两周准备,评估了4种方案,最终选择了"Strangler Fig"渐进式迁移。这个ADR后来成为整个迁移项目的指导纲领,持续引用了2年。

  • Q: 如何让团队愿意写ADR? A: 三个关键:1)模板足够简单(实现级ADR15分钟可写完);2)把ADR纳入code review流程(重要变更必须附ADR);3)leader带头写,让团队看到ADR的价值(新人入职时ADR的价值立刻体现)。

面试题2: 你写过最重要的ADR是什么?

30秒回答

最重要的一个是"是否将核心交易引擎从Java迁移到Go"。最终决策是不迁移,但为新服务采用Go。这个ADR的价值不在于技术选型本身,而在于它终结了团队内部长达半年的争论,让所有人达成共识向前走。

2分钟回答

(根据个人经验展开,包含业务背景、候选方案分析过程、决策理由、最终效果。重点强调ADR的"达成共识"价值而非单纯的技术记录价值。)


学习资源

资源类型推荐理由
Michael Nygard原始ADR博文博客ADR概念的创始人
《Design It!》Ch12书籍ADR在架构设计中的实践
adr.github.io在线ADR最佳实践和模板集合
ThoughtWorks Technology Radar在线理解技术雷达与ADR联动
《Fundamentals of Software Architecture》Ch19书籍架构决策的现代实践
Spotify Engineering Blog: ADRs博客大规模团队的ADR实践

明日预告

Day 17: 企业级集成架构 —— 从ADR这样的"决策治理"转向"系统集成"这个架构师的核心战场。我们将深入CDC(Change Data Capture)、Event Mesh、Orchestration vs Choreography等高级集成模式,并结合金融系统中"银行核心↔支付↔风控↔外部渠道"四方集成的真实挑战。如果说ADR是"怎么做决策",集成架构就是"最复杂的那些决策"。