Knowledge

帮助团队更快决策的架构笔记

良好的设计笔记记录权衡、所选方向以及哪些证据会在未来改变决策。

为什么架构决策会卡住

团队花费数周时间争论架构,是因为他们试图预测未来。但好的架构不在于永远正确——而在于用清晰的标准做出可逆的决策。

ADR 模式(架构决策记录)

使用此模板记录每个重要决策:

# ADR-001: 选择 PostgreSQL 而非 MongoDB

## 背景
我们需要一个支持复杂查询和事务的用户数据库。

## 决策
使用 PostgreSQL 15,支持 JSONB。

## 影响

### 积极影响
- ACID 事务确保数据完整性
- 原生支持复杂连接
- 强大的生态系统和工具链
- 团队已有 PostgreSQL 经验

### 消极影响
- Schema 变更灵活性不如 NoSQL
- 水平扩展更复杂
- 初期运维开销更高

## 可逆性
中等。可以迁移但需要投入。

## 评审标准
以下情况需重新评估:
- 数据量超过100万条时查询性能下降
- 每周或更频繁地需要 Schema 变更
- 团队报告关系模型存在显著摩擦

好的架构笔记是什么样子

1. 记录权衡

每个决策都有成本。诚实地记录下来:

不好: “我们选择 React 因为它流行”
好: “尽管 Vue 的学习曲线更简单,但我们选择 React,因为团队已经熟悉 JSX 模式,而且我们需要更大的组件生态”

2. 明确陈述假设

假设:
  - 第一年日活用户量保持在1万以下
  - 团队规模保持在3-5名开发人员
  - 预算允许每月500美元的infra支出
  - 初期不需要实时协作功能

当假设改变时,重新评估决策。

3. 定义成功指标

如何判断决策是否正确?

需跟踪的指标:
- API 响应时间 P95 < 200ms
- 数据库查询平均时间 < 50ms
- 部署频率:每周至少2次
- 新开发人员上手时间:< 2天

4. 记录什么情况会改变你的决定

最好的架构决策包含退出标准:

以下情况我们将重新考虑此决策:
☐ 性能基准显示下降30%以上
☐ 团队速度连续3个冲刺低于15个故事点/冲刺
☐ 客户需求要求根本性架构变更
☐ 出现能2倍更好地解决我们核心问题的新技术

常见架构决策类别

数据存储

通信模式

部署策略

开发方法

何时编写 ADR

编写 ADR 的情况:

跳过 ADR 的情况:

保持 ADR 活力

月度评审

浏览最近的 ADR。假设是否仍然有效?

基于触发条件的评审

当指标触及评审标准时,自动重新审视决策。

淘汰旧 ADR

在被替换时标记决策为已废弃。保留历史以供学习。

示例:真实 ADR 实操

# ADR-003: 使用 Redis 管理会话

日期: 2026-03-15
状态: 已接受

## 背景
当前应用内存中的会话存储无法跨多个实例扩展。

## 考虑的选项
1. **Redis** - 快速、成熟、原生支持 TTL
2. **数据库会话** - 运维更简单但速度较慢
3. **JWT tokens** - 无状态但难以轻易失效

## 决策
使用 Redis,用户会话 TTL 设为30分钟。

## 理由
- 亚毫秒级读写性能
- 自动过期防止陈旧会话
- 可在负载均衡实例之间共享会话
- 团队有 Redis 运维经验

## 实现说明
- 使用 Redis 集群模式实现高可用
- 仅存储会话 ID 和最小用户上下文
- 实现 Redis 不可用时的优雅降级

## 评审日期: 2026-06-15
检查:规模化时的会话存储性能、运维复杂度

结论

架构决策不需要完美——它们需要被记录、可逆和可衡量。好的笔记将争论转化为实验,将观点转化为可验证的假设。

少写、更好地记录、更快地决策。

📖 Read in English

← Back to all articles