系統設計面試(卷二)
Alex Xu、Sahn Lam|把大哉問拆成可討論的設計
🧭 四步框架 面對「設計一個 X」的流程
🎯 什麼情境該想到我
當你面對「設計一個 X 系統」這種又大又模糊的題目(面試或實務),不知從何下手時。
⚙️ 怎麼用(四步,別急著畫框)
- 釐清需求與範圍:功能需求(要做什麼)、非功能需求(規模、延遲、一致性)、圈定範圍。不確定就問。
- 容量估算:粗估 QPS、儲存量、頻寬(見 工具-容量估算),決定選型量級。
- 高層設計:畫出主要方塊與資料流(客戶端 → 負載均衡 → 服務 → 快取 → DB → 佇列…)。
- 深入與取捨:挑 1–2 個關鍵元件深入(如何分區/複製/快取),主動討論瓶頸與替代方案的取捨。
面試/評審看重的是推理與取捨,不是背標準答案。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 最常見錯誤是跳過步驟 1 直接畫架構——沒釐清需求,後面全是猜。
🔗 相關工具
- 工具-容量估算 —— 框架第二步的固定動作,先算量級才知道該用什麼架構
- 工具-透明多級分流 —— 高層設計常用的第一塊積木:請求從入口怎麼一路導到健康節點
- 工具-可靠可擴展可維護 —— 深入設計時的檢查面向,避免只談功能忘了非功能需求
① 釐清需求與範圍(功能/非功能/規模) ② 粗略容量估算 ③ 高層設計(畫方塊圖) ④ 深入設計 + 討論瓶頸與取捨
📏 粗估規模 先算再選型
🎯 什麼情境該想到我
當你要快速判斷「這系統大概多大、需要什麼量級的資源/架構」時(設計前的粗估)。
⚙️ 怎麼用
- 從使用者/流量推 QPS:日活 × 每人操作數 ÷ 86400 ≈ 平均 QPS;尖峰再 ×2~10。
- 估儲存:每筆資料大小 × 筆數 × 保存年限;別忘副本與索引開銷。
- 估頻寬:QPS × 每次回應大小。
- 記幾個關鍵數字(延遲級距):記憶體讀 ~100ns、SSD ~100µs、磁碟/網路跨機房 ~ms;讀記憶體比讀磁碟快上萬倍。
- 只求數量級:目的是判斷「單機夠不夠、要不要分區/快取」,不是精算。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 估算是為了「選對量級的架構」;別在面試/設計初期糾結精確數字。
🔗 相關工具
- 工具-系統設計思考框架 —— 上位流程,估算是它第二步的固定動作
- 工具-資料分區 —— 估算結果的直接用途:算出單機裝不下,就知道非分區不可
- 工具-時間複雜度分析 —— 姊妹尺,一個估系統資源量級,一個估演算法成長速度
🧱 反覆用到的元件
負載均衡 × 快取 × CDN 訊息佇列 × 分區 × 複製 資料庫選型
⚖️ 取捨心法 考的是推理過程
沒有標準答案 面試考的是「取捨的推理過程」, 不是背某個架構
先簡單再擴展 從能動的最小設計出發, 隨規模逐步加元件 (呼應 [[工具-透明多級分流]])
📚 案例演練場
近距離服務 × 通知系統 × 支付 搜尋自動補全 × 聊天系統 把 [[設計資料密集型應用]]、[[鳳凰架構]] 的知識實戰化