系統設計方法論

四階段設計法

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 舊系統漸進式重構