系統設計關鍵數字 (Numbers to Know)

Important

面試不需要背精準數字,但要有「量級直覺」。當你說「需要 sharding」、「需要 cache」、「需要更多 replica」時,要能用數字支撐。

一頁速查表(必背量級)

元件 核心指標 Scale 觸發點
Cache(Redis) latency < 1ms、100k+ ops/sec、最高 1TB 記憶體 hit rate < 80% / latency > 1ms / 記憶體 > 80% / churn
Database 50k TPS 讀、10–20k TPS 寫、64TiB(Aurora 128TiB) 資料 ≈ 50TiB / 寫入 > 10k TPS / uncached read > 5ms / 跨區域 / 備份時間爆掉
App Server 連線 100k+、8–64 核心、64–512GB(最高 2TB)、25Gbps CPU > 70% / latency 超 SLA / 記憶體 > 70% / 頻寬 ≈ 20Gbps
Message Queue(Kafka) 1M msg/sec/broker、latency 1–5ms、儲存 50TB、保存週/月 throughput ≈ 800k msg/sec / partition ≈ 200k / consumer lag 持續上升 / 跨區域

Cache 快取

Redis 早就不是「32GB 小快取」的時代。單節點可達 TB 級,讓「全資料丟進快取」成為合理選項。

何時需要對 Cache 動刀(sharding / 多節點)

真正的瓶頸是 ops/sec 或網路頻寬,不是記憶體大小。
ops/sec 不是硬體常數

ops/sec = 硬體 + 軟體 + workload 共決。

  • DB:每秒能跑多少 query
  • App:每秒能服務多少 API request
  • Cache:Redis 每秒能回多少 GET/SET

同一台機器跑 KV lookup 可能 100k ops/sec、跑複雜 JOIN 可能只剩 1k ops/sec。


Database 資料庫

單一 PostgreSQL / MySQL 比想像中能扛——數十 TB 資料、毫秒級 latency、單機數萬筆寫入/秒並不誇張。很多時候限制是備份/跨區複寫,不是效能

何時真的需要 Sharding

觸發點 數字
資料規模 ≈ 50TiB
寫入吞吐 長期 > 10k TPS
未快取讀取 < 5ms 需求
跨區域 需要多 region 部署
備份 時間過長或不可行
過早 sharding 是新手常見錯誤

500GB / 1–2TB 就喊 sharding 通常是過度設計。Sharding 之前的優化階梯:

  1. 慢查詢 → index、SQL 調校
  2. 讀取瓶頸 → 加 cache → 加 read replica
  3. 寫入瓶頸 → 調 DB 參數 → 升級硬體
  4. 以上都用盡 → 才談 sharding

Sharding 主要解決寫入擴展(寫只能走 primary),代價是巨大的複雜度(跨 shard 查詢、分散式交易、資料遷移)。


Application Server 應用伺服器

現代伺服器資源遠超想像。第一個瓶頸通常是 CPU,不是記憶體或連線數

Scale Triggers

Stateless 設計很好,但別忽略單機記憶體已經很大

可以直接用來做 cache / 計算 / session 管理。第一個瓶頸通常是 CPU。


Message Queue 訊息佇列(Kafka)

已經從「async 背景處理工具」演變成資料流的骨幹。Latency 5ms 內,甚至可以放進 synchronous API 流程;保存能力近乎無限(週、月)。

Scale Triggers


面試怎麼用這些數字

只要記住三件事:

  1. Latency 順序:memory ≪ disk ≪ network
  2. 單機容量:大概能扛多少 QPS、多少 memory
  3. 資料量級感:1KB / 1MB / 1GB 的差異

說的時候用「大概量級 + 推理」就好:

「假設一台機器有幾十 GB memory,大概可以放幾億個這種 object」
「大概超過多少 TPS 才需要考慮 database sharding」

這些數字最大的價值是避免 over-engineering

最常犯的錯:只有幾 TB 資料、幾千 QPS 就急著喊 sharding / 微服務。面試官(特別是 Senior+)會欣賞「根據數據做合理判斷」而不是「盲目套 fancy words」。