架构案例模板
要点
- 架构案例记录模块划分、依赖关系、扩展性决策
- 重点写清楚:为什么这样拆分模块、依赖怎么管理、未来怎么扩展
- 架构图比文字描述更有效——先给图,再解释关键决策
- 架构决策通常有长期影响——写清楚回退成本和演进路径
1. 适用场景
架构案例用于记录系统的模块划分、服务边界、数据流、依赖管理等结构性决策。
典型场景:
- 从单体拆分为微服务
- 引入新的中间件(消息队列、缓存、搜索引擎)
- 设计多租户隔离方案
- 选择前后端分离或全栈框架
2. 模板结构
# [架构决策标题]
## 背景
什么系统、什么业务场景、为什么要做这个架构决策。
## 约束
- 团队规模和技能
- 时间窗口
- 兼容性要求
- 性能/容量需求
## 架构图
用图展示模块划分、服务边界、数据流。
## 关键决策
### 决策 1:[标题]
选择了什么、放弃了什么、取舍理由。
### 决策 2:[标题]
...
## 依赖管理
外部依赖、内部依赖、版本策略。
## 扩展性
未来可能怎么演进、当前的扩展点在哪。
## 结果
上线后的实际效果、指标变化。
## 复盘
- 哪些决策是对的
- 哪些决策需要调整
- 后续行动项3. 写作要点
架构图先行
架构案例必须有图。文字描述模块关系很抽象,图一目了然。
图可以是:
- 模块依赖图
- 服务调用时序图
- 数据流图
- 部署架构图
重点写拆分决策
架构案例的核心是「为什么这样拆分」。写清楚:
- 拆分的边界在哪里
- 为什么这个边界而不是那个边界
- 拆分后的通信方式(同步/异步、HTTP/消息队列)
- 数据怎么流转
承认技术债
架构决策通常有取舍。写清楚:
- 当前方案的局限
- 引入的技术债
- 未来还债的成本
4. 示例
# 订单系统从单体拆分为订单服务和支付服务
## 背景
订单系统日均 50 万单,单体应用代码量超过 20 万行。订单和支付耦合在一起,
修改支付逻辑需要回归测试整个订单流程,迭代速度慢。
## 约束
- 3 个后端工程师,不能停其他需求
- 订单 API 不能变,上游系统不配合改造
- 订单和支付的数据一致性必须保证
## 架构图
[图:订单服务 → 消息队列 → 支付服务]
## 关键决策
### 决策 1:按业务领域拆分,不按数据表拆分
选择了按业务领域(订单、支付)拆分,而不是按数据表拆分(订单表、支付表)。
理由:按数据表拆分只是物理拆分,业务逻辑还是耦合。按领域拆分后,
订单服务和支付服务可以独立迭代。
### 决策 2:异步通信,最终一致性
订单创建后,发消息到队列,支付服务异步处理。放弃分布式事务。
理由:分布式事务性能差,团队没有经验。最终一致性可以接受,因为支付结果
本来就是异步通知的。
## 依赖管理
- 订单服务依赖支付服务的回调接口(同步)
- 支付服务依赖订单服务的订单查询接口(同步)
- 双方通过消息队列解耦核心流程
## 扩展性
- 支付服务可以独立扩容
- 未来可以引入风控服务,作为独立的消费者
## 结果
- 订单和支付可以独立发布,迭代速度提升 50%
- 支付相关的 bug 减少 30%(影响范围缩小)
## 复盘
- 拆分是正确的,但低估了数据一致性校验的工作量
- 消息队列的监控和告警需要加强
- 后续行动:引入对账系统,每天校验订单和支付的一致性总结
架构案例的核心是模块划分和依赖管理。必须有架构图,重点写拆分决策和取舍,承认技术债和局限。