系統設計方法論
四階段設計法
Phase 1: 需求釐清(5 分鐘)
問自己:
1. 功能性需求:系統要做什麼?
2. 非功能性需求:
- 延遲要求(ms)
- 吞吐量(QPS)
- 可用性(99.9%? 99.99%?)
- 資料量(GB? TB? PB?)
3. 規模估算:
- DAU(日活躍用戶)
- QPS(每秒查詢數)
- 儲存量
Phase 2: 高層設計(10 分鐘)
1. API 設計
- 定義主要 API
- Request/Response 格式
2. 資料模型
- 主要 Entity
- 關聯性
- 索引策略
3. 核心流程
- 畫出主要流程圖
- 標示關鍵服務
Phase 3: 深入設計(20 分鐘)
1. 關鍵組件
- 效能瓶頸在哪?
- 如何擴展?
2. 資料庫選型
- SQL vs NoSQL?
- 為什麼?
3. 快取策略
- 快取什麼?
- 失效策略?
4. 佇列/非同步
- 哪些需要非同步?
- 佇列選型?
Phase 4: 權衡討論(10 分鐘)
1. 瓶頸分析
- 系統最脆弱的地方?
2. 擴展方案
- 水平擴展 vs 垂直擴展
3. 取捨
- 一致性 vs 可用性
- 成本 vs 效能
分析框架
CAP 定理
C (Consistency) — 所有節點看到相同的數據
A (Availability) — 每個請求都能收到回應
P (Partition Tolerance) — 網路分割時系統繼續運作
三選二:
- CP:ZooKeeper, HBase(一致性 + 容錯)
- AP:Cassandra, DynamoDB(可用性 + 容錯)
- CA:單節點資料庫(一致性 + 可用性,無容錯)
規模估算公式
QPS = DAU / 86400 * 每人每日操作次數
儲存量 = DAU * 每日新增資料量 * 保留天數
頻寬 = QPS * 平均回應大小
常見設計模式
| 模式 |
適用場景 |
| CQRS |
讀寫分離,讀多寫少 |
| Event Sourcing |
需要完整審計紀錄 |
| Circuit Breaker |
防止連鎖失敗 |
| Sidecar |
微服務共用功能 |
| Strangler Fig |
舊系統漸進式重構 |