⭐⭐⭐⭐ 中高级 | 设计系统架构、做出技术选型决策
架构决策需要考虑:
- 功能需求 - 系统需要做什么
- 非功能需求 - 性能、可靠性、安全性等
- 技术选项 - 不同的技术方案
- 权衡分析 - 各方案的利弊
- 决策记录 - 记录why,而不仅是what
好的架构决策应该:
- 清晰表述问题
- 列举所有候选方案
- 分析每个方案的优缺点
- 明确选择标准
- 记录最终决策和理由
- 说明风险和缓解方案
🎯 原则1: 问题驱动
- 不要为了用新技术而用
- 应该解决实际的问题
- 说明这个决策解决什么问题
🎯 原则2: 权衡分析
- 列出关键属性(性能、成本、学习曲线等)
- 对比每个方案
- 明确优先级
🎯 原则3: 团队共识
- 多个视角的意见
- 与相关团队讨论
- 获得关键stakeholder的同意
🎯 原则4: 定期审视
- 决策是否有效
- 环境是否改变
- 是否需要调整
Prompt:
请帮我设计[应用名]的系统架构。
需求:
- 功能:[功能描述]
- 用户规模:[预期用户数]
- 并发:[并发数]
- 地理分布:[单地区/多地区]
约束:
- 技术栈:[偏好的技术]
- 成本预算:[预算约束]
- 时间:[开发周期]
- 团队:[团队大小和技能]
请设计:
1. 整体分层(表现层、业务层、数据层等)
2. 主要组件和职责
3. 数据流向
4. 扩展性考虑
提供架构图说明。
Prompt:
请帮我评估这些技术栈方案。
需求:开发高性能的Web API
候选方案:
1. Spring Boot (Java)
- 成熟度:高
- 性能:中等
- 学习曲线:中等
2. FastAPI (Python)
- 成熟度:中等
- 性能:高
- 学习曲线:低
3. Go with Echo
- 成熟度:中等
- 性能:很高
- 学习曲线:高
评估维度:
- 开发速度
- 运行性能
- 部署复杂度
- 团队熟悉度
- 生态支持
- 长期维护
我们的优先级:[优先级排序]
请给出对比分析和推荐。
Prompt:
我的应用需要选择数据库。
应用特点:
- 数据:用户、订单、商品
- 查询模式:[查询模式说明]
- 写入模式:[写入模式说明]
- 数据规模:[预期数据量]
- 实时性要求:[延迟容忍度]
候选数据库:
1. MySQL
2. PostgreSQL
3. MongoDB
请对比这些数据库在我们场景下的适用性。
标准ADR格式:
# ADR 001: [简短标题]
## 状态: [Proposed/Accepted/Deprecated/Superseded]
## 背景
[为什么需要这个决策,当前面临的问题或机会]
## 决策
[我们决定采纳...]
## 理由
[为什么选择这个方案而不是其他]
- 优点1
- 优点2
- 优点3
相比其他方案:
- 方案A:[为什么不选]
- 方案B:[为什么不选]
## 后果
[这个决策带来的结果,包括好的和坏的]
### 积极后果:
- [好处1]
- [好处2]
### 消极后果:
- [风险1]
- [风险2]
## 相关决策
- ADR 002: [相关决策]
## 验证方式
[怎样验证这个决策的有效性]
## 审视时间
[何时应该重新审视这个决策]
- 架构设计好后 → T09: API Design
- 开始实现 → T02: Feature Implementation
- 性能问题 → T12: Performance Optimization