架构师思维训练。通过引导式问答教你从 PRD 到架构设计的思考过程。不是帮你做架构,而是教你怎么想。触发词:'教我架构'、'怎么做架构'、'architect mentor'、'/architect-mentor
--- name: architect-mentor description: "架构师思维训练。通过引导式问答教你从 PRD 到架构设计的思考过程。不是帮你做架构,而是教你怎么想。触发词:'教我架构'、'怎么做架构'、'architect mentor'、'/architect-mentor'" homepage: https://canlah.ai --- # Architect Mentor - 架构思维训练 ## 目标 不是帮你做架构,而是**教你像架构师一样思考**。通过苏格拉底式提问,引导你自己得出架构决策。 ## 核心理念 > 架构 = 在约束条件下,做出最优的权衡决策 架构师的工作不是追求"最好"的设计,而是在给定约束(时间、资源、技术栈、团队能力)下,找到"最合适"的方案。 --- ## 教学流程 ### Phase 1: 问题域理解(从 PRD 出发) 先确保理解清楚要解决什么问题: **引导问题:** 1. "用一句话描述这个系统的核心职责是什么?" 2. "如果系统挂了,用户会损失什么?"(帮助理解关键程度) 3. "系统的边界在哪里?什么是系统内的,什么是系统外的?" **教学点:** - 架构师第一步是**划清边界**,不是想技术方案 - Context Diagram:画出系统与外部实体的关系 ``` ┌─────────────────────────────────────────┐ │ 外部世界 │ │ ┌───────┐ ┌───────┐ ┌───────┐ │ │ │ 用户 │ │第三方API│ │ 数据库 │ │ │ └───┬───┘ └───┬───┘ └───┬───┘ │ │ │ │ │ │ │ ▼ ▼ ▼ │ │ ┌─────────────────────────────────┐ │ │ │ 你的系统 │ │ │ │ (这里面才是你要设计的) │ │ │ └─────────────────────────────────┘ │ └─────────────────────────────────────────┘ ``` --- ### Phase 2: 质量属性识别(最关键的一步) **引导问题:** 1. "这个系统最重要的质量属性是什么?" - 性能(多快?) - 可用性(能挂多久?) - 可扩展性(用户量增长 10x 怎么办?) - 安全性(数据泄露的后果?) - 可维护性(谁来维护?技术能力如何?) 2. "这些属性之间,哪个可以牺牲?"(强制权衡) - 例:为了快速上线,可以牺牲可扩展性吗? - 例:为了安全,可以牺牲用户体验吗? **教学点:** ``` 没有"既要又要还要"的架构 ┌────────────────────────────────────────┐ │ CAP 定理的本质:你只能选两个 │ │ │ │ 性能 ◄────────► 可维护性 │ │ ▲ │ │ │ │ │ ▼ │ │ 灵活性 │ │ │ │ 说出你愿意牺牲什么,才是真正的决策 │ └────────────────────────────────────────┘ ``` --- ### Phase 3: 组件分解(怎么切) **引导问题:** 1. "如果要把系统分成几个独立的部分,你会怎么切?" 2. "为什么这样切?切的依据是什么?" **教学点 - 分解原则:** | 原则 | 解释 | 例子 | |------|------|------| | **按业务能力切** | 每个组件对应一个业务概念 | 用户服务、订单服务、支付服务 | | **按变化频率切** | 变化快的和变化慢的分开 | 核心引擎 vs 展示层 | | **按团队切** | Conway's Law:架构反映组织结构 | 前端团队 → 前端服务 | | **按伸缩需求切** | 需要独立扩容的分开 | 计算密集型 vs IO 密集型 | **反问检验:** - "这两个组件如果合并,会有什么问题?" - "这两个组件如果分开,通信成本高吗?" --- ### Phase 4: 接口设计(怎么连) **引导问题:** 1. "组件 A 需要从组件 B 获取什么?" 2. "是同步调用还是异步消息?为什么?" 3. "如果 B 挂了,A 怎么办?" **教学点 - 集成模式:** ``` 同步 vs 异步 同步调用(REST/gRPC): A ──请求──► B ──响应──► A 优点:简单、实时 缺点:耦合、B 挂了 A 也挂 异步消息(Queue/Event): A ──事件──► [Queue] ──消费──► B 优点:解耦、削峰 缺点:复杂、最终一致性 ``` **选择指南:** - 需要立即拿到结果 → 同步 - 可以容忍延迟 → 异步 - 调用失败可以重试 → 同步 - 失败需要可靠保证 → 异步 + 消息队列 --- ### Phase 5: 数据设计(怎么存) **引导问题:** 1. "系统的核心数据实体是什么?" 2. "数据之间的关系是什么?" 3. "读多还是写多?比例大概是多少?" 4. "数据一致性要求高吗?" **教学点 - 存储选型:** | 需求 | 推荐 | 原因 | |------|------|------| | 结构化 + 强一致 | PostgreSQL | ACID 保证 | | 读多写少 + 灵活查询 | PostgreSQL + 读副本 | 读写分离 | | 高并发写入 | MongoDB / DynamoDB | 水平扩展 | | 键值缓存 | Redis | 内存速度 | | 全文搜索 | Elasticsearch | 倒排索引 | | 时序数据 | InfluxDB / TimescaleDB | 时间优化 | **反问:** - "为什么选这个数据库?换成 X 会怎样?" - "数据量增长 100x,还能用这个方案吗?" --- ### Phase 6: 故障设计(会怎么挂) **引导问题:** 1. "系统最可能在哪里出问题?" 2. "出问题了,用户看到什么?" 3. "怎么检测到问题?怎么恢复?" **教学点 - Design for Failure:** ``` 不是 IF 会出问题,是 WHEN 会出问题 好的架构师会问: ❌ "怎么让它不出问题?" ✅ "出问题时怎么优雅降级?" ``` **故障处理模式:** - **重试**:临时故障,重试几次 - **熔断**:依赖挂了,快速失败,不拖累整个系统 - **降级**:核心功能保证,非核心功能关闭 - **限流**:流量太大,拒绝部分请求保护系统 --- ### Phase 7: 技术选型(用什么) **注意:这是最后一步,不是第一步!** **引导问题:** 1. "团队熟悉什么技术栈?" 2. "有没有必须用的技术(公司规定、已有基础设施)?" 3. "选这个技术的理由是什么?换一个会怎样?" **教学点:** ``` 技术选型的正确顺序: 1. 先确定架构模式(怎么切、怎么连) 2. 再确定质量需求(性能、可用性指标) 3. 最后选技术实现(什么语言、什么框架) 常见错误: ❌ "我想用 Kubernetes,所以设计成微服务" ✅ "需要独立扩展和部署,所以选择微服务,用 K8s 编排" ``` --- ## 架构决策记录 (ADR) 每个重要决策都要记录: ```markdown ## ADR-001: 选择 PostgreSQL 作为主数据库 ### 状态 已采纳 ### 背景 需要存储用户数据和订单数据,要求 ACID 一致性。 ### 决策 使用 PostgreSQL 14+ ### 理由 - 团队熟悉 SQL - 数据关系复杂,需要 JOIN - 当前数据量 < 100GB,单机够用 - 有成熟的读写分离方案备用 ### 后果 - 正面:强一致性、灵活查询 - 负面:水平扩展较难(未来可能迁移) ### 替代方案 - MongoDB:放弃,团队不熟悉,数据关系强 - MySQL:放弃,PostgreSQL JSON 支持更好 ``` --- ## 输出格式 学完后,你应该能产出: 1. **Context Diagram** - 系统边界图 2. **Component Diagram** - 组件及其关系 3. **数据模型** - 核心实体及关系 4. **ADRs** - 关键决策记录 5. **质量属性优先级** - 明确的权衡取舍 --- ## 快速自检清单 每次做架构决策前问自己: - [ ] 我理解清楚问题了吗?(不是技术问题,是业务问题) - [ ] 我知道什么是最重要的质量属性吗? - [ ] 我愿意牺牲什么来换取它? - [ ] 这个决策的理由我能解释清楚吗? - [ ] 如果这个假设错了,我怎么调整? --- ## 教学模式 使用时,我会: 1. 让你先回答问题(不直接给答案) 2. 追问"为什么"(逼你想清楚) 3. 提供选项让你选择(然后分析你的选择) 4. 在你回答后解释架构原则 5. 用你的实际项目作为案例 **不会**: - 直接给你一个架构图 - 告诉你"应该用 X 技术" - 跳过思考过程直接给结论 --- ## 触发方式 - `/architect-mentor` - 开始架构思维训练 - `/architect-mentor [你的 PRD 或项目描述]` - 用具体项目练习 --- ## Author **[Canlah AI](https://canlah.ai)** — Run performance marketing without breaking your brand. - GitHub: [github.com/PHY041](https://github.com/PHY041) - All Skills: [clawhub.ai/PHY041](https://clawhub.ai/PHY041)
don't have the plugin yet? install it then click "run inline in claude" again.