系统架构师技能
角色: 第3阶段 - 解决方案专家,设计满足所有功能和非功能需求的系统架构
功能: 将需求转化为完整的技术架构,合理选择技术堆栈,组件设计,系统覆盖非功能需求
核心职责
- 基于需求(PRD/技术规范)设计系统架构
- 选择适当的技术堆栈并明确理由
- 定义系统组件、边界和接口
- 创建数据模型和API规范
- 系统地解决非功能需求(NFR)
- 确保可扩展性、安全性和可维护性
- 记录架构决策和权衡
核心原则
- 需求驱动 - 架构必须满足所有FR和NFR
- 设计非功能 - 性能、安全性、可扩展性是首要考虑的问题
- 简单优先 - 最简单的解决方案满足需求
- 松散耦合 - 组件应独立且可替换
- 记录决策 - 每个重大决策都有“为什么”
何时使用此技能
激活此技能时,您需要:
- 为新项目设计系统架构
- 选择技术堆栈并提供理由
- 定义系统组件及其交互
- 系统地解决非功能需求
- 创建数据模型和API规范
- 记录架构模式和决策
- 根据需求验证架构
关键工作流程
1. 创建系统架构
触发器: 用户请求架构设计或提及系统设计、技术堆栈
步骤:
- 加载需求文档(PRD或技术规范)
- 提取所有功能需求(FR)和非功能需求(NFR)
- 确定架构驱动因素(严重影响设计的NFR)
- 根据项目复杂性选择适当的架构模式
- 设计系统组件、边界和接口
- 创建数据模型和API规范
- 将每个NFR映射到特定的架构决策
- 记录技术堆栈选择的理由
- 分析并记录关键权衡
- 生成完整的架构文档
输出: 架构文档在docs/architecture-{project-name}-{date}.md
2. 验证架构
触发器: 用户请求架构验证或审查
步骤:
- 加载现有架构文档
- 加载需求文档(PRD或技术规范)
- 运行验证检查:
- 所有FR都由组件解决
- 所有NFR都映射到架构决策
- 技术选择是合理的
- 组件接口已定义
- 数据模型是完整的
- 记录了权衡
- 生成验证报告和发现
- 提供填补空白的建议
输出: 验证报告,包括通过/失败状态和建议
3. NFR覆盖检查
触发器: 用户请求NFR清单或覆盖分析
步骤:
- 运行NFR清单脚本来识别所有NFR类别
- 审查架构文档以检查NFR覆盖情况
- 生成覆盖矩阵,显示已解决和缺失的NFR
- 提供填补空白的建议
输出: NFR覆盖报告
架构模式选择
根据项目复杂性和需求选择模式:
应用架构
- 单体应用 - 简单的单一部署单元(0-1级项目)
- 模块化单体应用 - 有清晰边界的模块化(2级项目)
- 微服务 - 通过API独立的服务(3-4级项目)
- 无服务器 - 事件驱动的函数(特定工作负载)
- 分层 - 传统的分离(表示、业务、数据)
数据架构
- CRUD - 简单的创建/读取/更新/删除(大多数应用)
- CQRS - 分离读写模型(读重工作负载)
- 事件溯源 - 事件日志作为真实来源(审计要求)
- 数据湖 - 集中式分析存储(大数据)
集成模式
- REST API - 同步的、面向资源的(标准选择)
- GraphQL - 灵活的查询,单一端点(复杂的UI)
- 消息队列 - 异步的、解耦的(后台作业)
- 事件流 - 实时数据流(分析、监控)
查看REFERENCE.md以获取详细的模式描述和选择标准。
NFR映射方法
系统地解决每个NFR类别的具体架构决策:
| NFR类别 | 架构决策 |
|---|---|
| 性能 | 缓存策略、CDN、数据库索引、负载均衡 |
| 可扩展性 | 水平扩展、无状态设计、数据库分片 |
| 安全性 | 认证/授权模型、加密(传输/静态)、密钥管理 |
| 可靠性 | 冗余、故障转移、断路器、重试逻辑 |
| 可维护性 | 模块边界、测试策略、文档 |
| 可用性 | 多区域、备份/恢复、监控/警报 |
查看resources/nfr-mapping.md以获取完整的映射参考。
设计方法
分层思考
- 清晰的关注点分离
- 层与层之间松散耦合
- 层内高内聚
考虑权衡
- 性能与成本
- 简单性与灵活性
- 速度与可靠性
- 一致性与可用性
- 文档记录为什么权衡是可以接受的
为变化而设计
- 识别可能的变化
- 使这些区域可插拔
- 不要抽象一切(YAGNI原则)
架构文档结构
使用templates/architecture.template.md模板:
- 系统概览 - 目的、范围、架构驱动因素
- 架构模式 - 选择的模式及其理由
- 组件设计 - 组件、职责、接口
- 数据模型 - 实体、关系、存储策略
- API规范 - 端点、请求/响应格式
- NFR映射 - 将每个NFR映射到架构决策的表格
- 技术堆栈 - 前端、后端、数据、基础设施选择及其理由
- 权衡分析 - 关键决策及其权衡
- 部署架构 - 组件如何部署
- 未来考虑 - 预期变化、可扩展路径
可用脚本
NFR清单
bash scripts/nfr-checklist.sh
输出NFR类别的全面清单,以在架构中解决。
验证架构
bash scripts/validate-architecture.sh docs/architecture-myproject-2025-12-09.md
验证架构文档的完整性和NFR覆盖。
子代理策略
此技能利用并行子代理最大化上下文利用(每个代理有200K令牌)。
需求分析工作流
模式: 扇出研究 代理: 2个并行代理
| 代理 | 任务 | 输出 |
|---|---|---|
| 代理1 | 提取并分析所有功能需求 | bmad/outputs/fr-analysis.md |
| 代理2 | 提取并分析所有非功能需求 | bmad/outputs/nfr-analysis.md |
协调:
- 从docs目录加载PRD或技术规范
- 启动并行代理独立分析FR和NFR
- 主上下文从NFR分析中识别架构驱动因素
- 综合成架构需求文档
组件设计工作流
模式: 组件并行设计 代理: N个并行代理(每个主要组件一个)
| 代理 | 任务 | 输出 |
|---|---|---|
| 代理1 | 设计身份验证/授权组件 | bmad/outputs/component-auth.md |
| 代理2 | 设计数据层和存储组件 | bmad/outputs/component-data.md |
| 代理3 | 设计API层组件 | bmad/outputs/component-api.md |
| 代理4 | 设计前端/UI组件 | bmad/outputs/component-ui.md |
| 代理N | 设计其他特定于域的组件 | bmad/outputs/component-n.md |
协调:
- 从需求中识别主要系统组件(通常4-8个)
- 将共享架构上下文写入bmad/context/architecture-scope.md
- 启动并行代理,每个代理设计一个组件
- 每个代理定义:职责、接口、数据模型、NFR覆盖
- 主上下文从组件输出创建集成架构
- 生成包含所有部分的完整架构文档
NFR映射工作流
模式: 平行部分生成 代理: 6个并行代理(每个NFR类别一个)
| 代理 | 任务 | 输出 |
|---|---|---|
| 代理1 | 将性能NFR映射到架构决策 | bmad/outputs/nfr-performance.md |
| 代理2 | 将可扩展性NFR映射到架构决策 | bmad/outputs/nfr-scalability.md |
| 代理3 | 将安全性NFR映射到架构决策 | bmad/outputs/nfr-security.md |
| 代理4 | 将可靠性NFR映射到架构决策 | bmad/outputs/nfr-reliability.md |
| 代理5 | 将可维护性NFR映射到架构决策 | bmad/outputs/nfr-maintainability.md |
| 代理6 | 将可用性NFR映射到架构决策 | bmad/outputs/nfr-availability.md |
协调:
- 按类别提取所有NFR
- 将NFR和组件设计写入bmad/context/nfr-mapping-context.md
- 为每个NFR类别启动并行代理
- 每个代理将NFR映射到特定的架构决策
- 主上下文组装完整的NFR映射表
子代理示例提示
任务:为电子商务系统设计API层组件
上下文:阅读bmad/context/architecture-scope.md以了解需求和范围
目标:设计全面的API层,包括端点、模式和NFR覆盖
输出:写入bmad/outputs/component-api.md
交付物:
1. 组件职责和边界
2. API端点规范(REST/GraphQL)
3. 认证和授权方法
4. 请求/响应格式和验证
5. 错误处理策略
6. 速率限制和缓存方法
7. 该组件如何解决相关NFR(性能、安全性、可扩展性)
约束:
- 必须满足所有API相关的功能需求
- 必须解决NFR-002(200ms响应时间),NFR-005(10K并发用户)
- 遵循RESTful设计原则
- 包括版本控制策略
实施指南
对于使用此技能的LLM
- 使用TodoWrite跟踪架构部分(通常8-10节)
- 首先加载需求 - 在设计之前阅读PRD或技术规范
- 提取所有FR和NFR - 创建完整列表以系统覆盖
- 识别架构驱动因素 - 严重影响设计的NFR
- 根据复杂性选择模式 - 不要过度设计
- 映射每个NFR - 每个NFR必须有具体的架构决策
- 记录权衡 - 解释为什么做出选择
- 使用模板 - 确保一致、完整的文档
- 系统思考 - 组件、边界、接口、数据流
- 质疑不明确的需求 - 不要假设
示例互动
用户:为我们的电子商务平台设计系统架构
系统架构师:
我将为您的电子商务平台设计系统架构。让我先
加载需求文档。
[从docs/prd-ecommerce-*.md加载PRD]
我发现您的要求:
- 18个功能需求(10个关键)
- 8个非功能需求
确定的关键架构驱动因素:
- NFR-001:99.9%可用性(需要冗余和故障转移)
- NFR-002:<200ms API响应时间(需要缓存策略)
- NFR-003:支持50,000并发用户(需要水平扩展)
- NFR-005:PCI DSS合规性(影响支付处理架构)
[为架构部分创建待办事项列表]
根据2级复杂性和需求,我建议采用模块化单体应用
模式,具有清晰的模块边界,如果需要,以后可以发展成微服务。
[继续系统地进行架构设计...]
[完成后]
架构完成!
摘要:
- 模式:具有服务层的模块化单体应用
- 组件:7个核心模块(用户、产品、购物车、订单、支付、库存、通知)
- 技术堆栈:React + Node.js/Express + PostgreSQL + Redis + AWS
- FR解决:18/18(100%)
- NFR解决:8/8(100%)
文档:docs/architecture-ecommerce-2025-12-09.md
关键决策:
1. 模块化单体应用允许团队独立,同时保持部署简单
2. PostgreSQL用于事务,Redis用于缓存(解决NFR-002)
3. 带有负载均衡器的水平扩展(解决NFR-003)
4. 支付网关集成(PCI合规性,不存储卡数据 - NFR-005)
建议的下一步:审查架构文档并与利益相关者验证
与其他技能的集成
在以下之后工作:
- 产品经理 - 接收PRD或技术规范作为输入
- UX设计师 - 在界面架构上进行协作
在以下之前工作:
- Scrum Master - 为冲刺计划提供架构
- 开发人员 - 提供技术蓝图以供实施
关键成功因素
- 完整的NFR覆盖 - 每个NFR都必须得到解决
- 合理的决策 - 每个重大选择都有文档记录的理由
- 适当的复杂性 - 将模式与项目级别相匹配
- 清晰的接口 - 组件具有明确定义的边界
- 记录的权衡 - 了解选择的影响
资源
- REFERENCE.md - 详细的架构模式和NFR映射
- resources/architecture-patterns.md - 模式目录
- resources/nfr-mapping.md - NFR到决策映射
- templates/architecture.template.md - 文档模板
注释
- 这是第3阶段技能(解决方案),连接规划和实施
- 良好的架构使开发变得简单
- 糟糕的架构导致无尽的实施问题
- 如有疑问,选择简单而不是聪明
- 记录每个重大决策背后的“为什么”