系統設計

一句話定義

系統設計是把模糊需求、容量約束、資料流、服務邊界、失效模式與工程取捨組成可擴展、可維護、可觀測架構的能力;重點不是背架構圖,而是說清楚為什麼這樣切、哪裡會壞、如何逐步演化。

核心要點

先界定問題,再畫架構

大型系統設計一開始不是選資料庫或畫微服務,而是確認:

問題目的
使用者是誰、核心使用情境是什麼防止把不重要功能放進架構中心
讀多還是寫多、峰值與平均差多少決定快取、佇列、分片與資料模型
需要同步還是可延遲決定一致性、佇列、補償與 retry
哪些 failure mode 可接受決定備援、降級、限流與告警
成本、時程、團隊能力限制決定是否應先用簡單方案,再逐步擴展

這讓系統設計與 架構性思考 同源:先把問題邊界與判準拉清楚,再進入方案。

從單機到大規模的演化路徑

2026-05-14-搞定系統設計面試 的第一章用「從 0 到 100 萬用戶」建立一條典型演化線:

  1. 單伺服器:Web、應用與資料庫都在同一台機器。
  2. 分離資料庫:應用與資料層分開,讓資源可以各自調整。
  3. 負載均衡:多台 Web 伺服器共同承接流量。
  4. 資料庫複製:讀寫分離、提高可用性與讀吞吐。
  5. 快取與 CDN:把熱資料與靜態內容移近使用者。
  6. 無狀態 Web 層:把 session / 狀態移到共享存儲,讓應用層可水平擴展。
  7. 多資料中心:用地理路由與資料同步處理區域可用性。
  8. 消息佇列:把耗時工作與尖峰流量解耦。
  9. 監控、日誌、告警與自動化:讓系統變大後仍可被理解與操作。
  10. 資料分片:當單一資料庫不再足夠時,把資料按 key 拆到多個 shard。

這條路徑的價值不是每個系統都要照順序上所有元件,而是知道「下一個瓶頸通常在哪裡」。

取捨比正解重要

系統設計沒有唯一標準答案,常見張力包括:

  • 一致性 vs 可用性:支付 / 帳務與 news feed / 搜尋提示的容錯條件不同。
  • 同步回應 vs 非同步處理:使用者需要立即知道結果,還是可以收到稍後通知。
  • 簡單架構 vs 預先擴展:過早微服務化可能比單體更難維護。
  • 成本 vs 體驗:CDN、多區部署、強一致資料庫都會提高成本。
  • 吞吐 vs 延遲:批次處理可以提高吞吐,但可能拉長等待。

好的設計不是「選最強技術」,而是讓取捨對齊需求與風險。

案例是組合題,不是模板題

URL 縮短器、通知系統、聊天系統、網路爬蟲、雲盤、支付與監控看似不同,但都在重複組合 分散式系統元件

  • API / gateway / load balancer
  • database / cache / object storage
  • queue / worker / retry
  • rate limit / dedup / id generation
  • metrics / logs / alerting
  • consistency / availability / data partitioning

因此學案例的目的不是背「設計 YouTube」或「設計雲盤」,而是看同一組元件如何在不同約束下重新組合。

與其他概念的關係

  • 系統設計面試 — 系統設計在面試場景中的呈現方式;要求候選人邊釐清需求、邊展示取捨。
  • 可擴展性 — 系統設計最常見的品質目標之一;處理流量、資料量、區域與團隊規模變大時的演化。
  • 分散式系統元件 — 系統設計的常用積木庫:負載均衡、快取、CDN、佇列、分片、限流、監控等。
  • 封底估算 — 系統設計的前期 sanity check;用粗估 QPS、儲存、頻寬與延遲暴露瓶頸。
  • 網頁爬蟲 — 從單機資料抽取升級到分散式爬取系統時,是系統設計案例之一。
  • 智慧型API / AI輔助開發 — AI 產品仍要落在真實系統中;模型能力只是元件,可靠服務還需要系統設計。
  • MOC-工程 — 本頁屬於工程 MOC 的架構 / 基礎設施軸。

相關來源

備註

未來累積方向:限流器、一致性哈希、分散式唯一 ID、鍵值存儲、消息佇列、物件儲存、監控告警、支付系統、分散式交易、CAP / PACELC、可觀測性與 SRE。先由本頁與 分散式系統元件 承接,等某個子題有 2+ 專門來源或成為查詢高頻點再拆頁。