系統設計面試(卷二)

Alex Xu、Sahn Lam|把大哉問拆成可討論的設計

🧭 四步框架 面對「設計一個 X」的流程

🎯 什麼情境該想到我

當你面對「設計一個 X 系統」這種又大又模糊的題目(面試或實務),不知從何下手時。

⚙️ 怎麼用(四步,別急著畫框)

  1. 釐清需求與範圍:功能需求(要做什麼)、非功能需求(規模、延遲、一致性)、圈定範圍。不確定就問。
  2. 容量估算:粗估 QPS、儲存量、頻寬(見 工具-容量估算),決定選型量級。
  3. 高層設計:畫出主要方塊與資料流(客戶端 → 負載均衡 → 服務 → 快取 → DB → 佇列…)。
  4. 深入與取捨:挑 1–2 個關鍵元件深入(如何分區/複製/快取),主動討論瓶頸與替代方案的取捨

面試/評審看重的是推理與取捨,不是背標準答案。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意

  • 最常見錯誤是跳過步驟 1 直接畫架構——沒釐清需求,後面全是猜。

🔗 相關工具

① 釐清需求與範圍(功能/非功能/規模) ② 粗略容量估算 ③ 高層設計(畫方塊圖) ④ 深入設計 + 討論瓶頸與取捨

📏 粗估規模 先算再選型

🎯 什麼情境該想到我

當你要快速判斷「這系統大概多大、需要什麼量級的資源/架構」時(設計前的粗估)。

⚙️ 怎麼用

  1. 從使用者/流量推 QPS:日活 × 每人操作數 ÷ 86400 ≈ 平均 QPS;尖峰再 ×2~10。
  2. 估儲存:每筆資料大小 × 筆數 × 保存年限;別忘副本與索引開銷。
  3. 估頻寬:QPS × 每次回應大小。
  4. 記幾個關鍵數字(延遲級距):記憶體讀 ~100ns、SSD ~100µs、磁碟/網路跨機房 ~ms;讀記憶體比讀磁碟快上萬倍。
  5. 只求數量級:目的是判斷「單機夠不夠、要不要分區/快取」,不是精算。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意

  • 估算是為了「選對量級的架構」;別在面試/設計初期糾結精確數字。

🔗 相關工具

🧱 反覆用到的元件

負載均衡 × 快取 × CDN 訊息佇列 × 分區 × 複製 資料庫選型

⚖️ 取捨心法 考的是推理過程

沒有標準答案 面試考的是「取捨的推理過程」, 不是背某個架構

先簡單再擴展 從能動的最小設計出發, 隨規模逐步加元件 (呼應 [[工具-透明多級分流]])

📚 案例演練場

近距離服務 × 通知系統 × 支付 搜尋自動補全 × 聊天系統 把 [[設計資料密集型應用]]、[[鳳凰架構]] 的知識實戰化