当前位置: 首页 > news >正文

Agent开发系列(十二)-知识库建设(ADR)

一、什么是ADR?

ADR(Architecture Decision Record,即架构决策记录)。研发团队里特指"记录一次重要架构决策的短文档"。

它是什么它不是什么
重要架构决策的"决策书"(过去时)架构总览(那是"现在是什么")
记录"为什么选 A 不选 B"会议纪要(那是过程)
防止"重复讨论 + 推翻重做"产品决策(那是 PRD/Roadmap)
写一次、状态变更、几乎不改内容实施细节(那是 PR/Commit)
# ADR-0001: 选 PostgreSQL 不用 MySQL ## 状态 Accepted ## 背景 - MySQL 5.7 已运行 5 年,数据量 3TB - 性能瓶颈 + EOL 合规压力 - 需要 JSONB、窗口函数、并行查询 ## 考虑的选项 1. MySQL 8.0(升级) 2. PostgreSQL 16(迁移) 3. TiDB(HTAP) ## 决策 选 PostgreSQL 16。 - 否决 MySQL 8:JSON 弱,无法解决 3TB JOIN - 否决 TiDB:运维成本高,收益不明确 ## 后果 - 正面:JSON 性能 +5x - 负面:迁移需 6 周 - 后续:6 个月后 review

二、ADR的知识模板如何定义?

2.1 知识模板

分类字段类型必填备注
基础编号string全局唯一,如 0001
基础标题string动词开头,一句话
基础状态enumProposed/Accepted/Rejected/Deprecated/Superseded
基础创建日期date
基础决策日期date×状态变 Accepted 时填
基础作者@user草稿作者
基础决策参与者list[@user]参与讨论的人
基础关联服务/系统list[link]×
核心背景markdown【核心】面临什么问题,为什么现在要决策,有什么约束
核心选项list(≥2)【核心】至少 2 个,通常 3-4 个,每个有名称
核心决策markdown【核心】选了什么,理由是什么
核心后果markdown【核心】正面 / 负面影响,后续工作
关联superseded byADR 编号×状态为 Superseded 时填
关联关联代码路径list[link]×实施该 ADR 的代码
关联关联 Runbooklist[link]×涉及运维的填
关联关联事故档案list[link]×事故触发的 ADR 填

案例如下:

# ADR-0001: 选 PostgreSQL 不用 MySQL ## 状态 Accepted ## 背景 - 当前订单数据存储在 MySQL 5.7,已运行 5 年 - 数据量增长到 3TB,MySQL 大表 JOIN 性能瓶颈 - 团队对 MySQL 5.7 EOL(2023-10)有合规压力 - 业务需要 JSONB、窗口函数、并行查询 ## 考虑的选项 1. **MySQL 8.0**:升级现有 MySQL,无数据迁移 2. **PostgreSQL 16**:迁移到 PG,功能强,生态成熟 3. **TiDB**:HTAP 方案,水平扩展 ## 决策 **选 PostgreSQL 16**。 理由:JSONB/窗口函数原生支持、并行查询、社区活跃度高于 MySQL 8、 团队已有 PG 经验(3 人)。 **否决 MySQL 8**:JSON 函数能力弱、并行查询有限、升级无法解决 3TB JOIN 瓶颈。 **否决 TiDB**:运维成本高、HTAP 收益对当前业务不明确。 ## 后果 - **正面**:JSON 字段查询性能 +5x,大表 JOIN +3x - **正面**:为后续架构演进(多租户、地理分布)提供更好基础 - **负面**:数据迁移需 6 周,需 0.5 FTE 专注 - **负面**:MySQL 时代的运维经验部分失效 - **后续**:运行 6 个月后 review,看是否需要回退 - **关联**: [迁移项目 #PRJ-2031]

三、ADR的更新机制如何设计?

触发器触发条件动作责任方
PR-ingestPR 实施 ADR 决策自动关联 ADR 编号到 PRLLM
Lint 反查代码偏离 ADR告警 + 提醒更新状态自动
手动状态变更重大事件(事故/技术演进)触发走 PR 改状态决策参与者
定期 review每年/每季度复查检查"过期的 ADR"架构师

3.1 关键设计点

设计点具体要求
状态变更走 PR决策变更要可追溯,不是直接改
Superseded 必须有链接superseded by: ADR-0015,可追溯链条
被 Superseded 的 ADR 不删除历史背景常被翻账
Lint 强制:Accepted 状态 ADR 跟代码一致不一致就告警,推动状态变更
状态变更要 review至少 2 个决策参与者 approve
Accepted 后,正文几乎不修改决策的"过去时"是稳定的

3.2 反模式

反模式后果
直接修改 ADR 正文(改"决策")历史丢失,无法知道"当时怎么想的"
状态不写,默认都是 Accepted看不到哪些在讨论、哪些被否决
Superseded 写"已被新方案替代"不写编号追溯链断裂
删除 Rejected 的 ADR未来重新讨论时,前人踩过的坑看不见
状态变更不通知关联方实施 ADR 的人不知道决策已变

四、ADR的质量标准如何定义?

核心判断:ADR 的"质量"= 决策可追溯 + 跟代码一致 + 状态正确。不是"文档漂不漂亮"。

指标定义健康值测量方式
覆盖率重大决策有 ADR 的比例100%抽查
一致性代码与 ADR 描述一致≥ 95%Lint
可追溯决策变更链条完整无断裂100%自动
被引用率ADR 被代码/Runbook/wiki 引用的比例≥ 80%链接统计
状态正确性ADR 状态与现实一致≥ 95%季度 review

4.1 3个反向指标(出现就告警)

反向指标告警触发修复动作
裸奔决策重大代码变更(选型/架构)无对应 ADR立即告警,要求补 ADR
失信 ADR代码严重偏离 ADR 决策立即告警,要求更新状态或同步代码
僵尸 ADR状态长期不更新,引用链断裂季度 review 列出,要求清理

4.2 3个质量门槛

门槛触发动作
准入门槛(发布前)必填字段完整 + 至少 2 个选项 + 决策明确 + 至少 2 个决策参与者缺一不准合并
持续门槛(运行中)ADR 跟代码一致 + 状态正确 + 至少被 1 处引用否则季度 review 标 stale
淘汰门槛永不删除,只 Superseded归档到superseded/目录
http://www.gsyq.cn/news/1481786.html

相关文章:

  • BurpSuite中文汉化终极指南:3步让英文安全工具变中文界面
  • 专业级免费相机应用:OpenCamera 完全指南 - 解锁Android手机摄影潜能
  • GeoServer CQL_Filter避坑大全:从属性模糊查到空间关系判断的10个常见错误
  • NanaZip深度解析:现代Windows压缩工具的全面进化秘籍
  • 5G网络切片不止是概念:从SUPI加密到DNN签约,一个真实用户的开户数据流全解析
  • Vivado开箱即用的单周期RISC CPU工程:SystemVerilog源码+仿真脚本+结构图
  • 3步完成A站视频本地化:AcFunDown免费工具终极指南
  • 团队第四次作业—beta冲刺
  • Pong是什么
  • 3分钟搞定Windows直读Btrfs分区:跨平台文件互通终极方案
  • 2026树洞陪聊深度测评|5个真实温柔情绪平台,治好成年人深夜孤独 - 时时资讯
  • AI 辅助算法训练平台设计:智能题解生成与自适应学习路径规划
  • 2026年绵阳装修消费调研:透明装修模式对业主决策的影响分析 - 优家闲谈
  • 不止是联机!用《龙之崛起》自带地图编辑器,打造属于你们的专属联机战役
  • Rollout
  • 终极指南:3步安全卸载Microsoft Edge浏览器,彻底释放Windows系统资源
  • 三步轻松下载B站4K视频:bilibili-downloader完全指南
  • 智能家居组网避坑指南:为什么你的Mesh路由器有时‘失联’?聊聊IEEE 1905.1拓扑发现那些事
  • 3分钟解锁音乐自由!ncmdump工具快速解密网易云NCM格式全攻略
  • GRPO算法
  • 2026年6月7日科技速递:高考AI监考、芯片股暴跌、谷歌Gemini漏洞、OpenAI人才流失
  • 当 AI Agent 成为你的用户——Agent-Native 网站是什么?为什么现在就该关注?
  • 嵌入式汉字编码与输入法实战:从GB2312原理到MCU实现
  • 一个 VS Code 插件,干翻了 GitHub 3800 个内部仓库
  • 从0到1搭建CSDN AI内容获客体系:3步建模、7天冷启动、22天实现线索成本低于行业均值58%
  • 告别依赖地狱:手把手教你用AppImage在Ubuntu 22.04上安装最新版Neovim(附FUSE问题解决)
  • 软件过程与管理知识回顾1 -
  • 华强北元器件分销商资源整合:从策略联盟到资本联姻的破局之路
  • 2026 无锡锡山区漏水维修攻略|苏易修缮推荐:卫生间/阳台/外墙/屋顶/地下室漏水|靠谱防水门店推荐 - 苏易修缮
  • BetterNCM安装工具:三分钟为网易云音乐打造个性化插件平台