可擴展性

一句話定義

可擴展性是系統在流量、資料量、使用者數、地理範圍或團隊規模變大時,仍能透過增加資源、拆分責任與調整資料流維持可接受性能與可靠性的能力。

核心要點

不是「能撐大流量」一句話

可擴展性至少要拆成幾個面向:

面向問題
流量擴展QPS / concurrent users 增加時,入口與服務層如何承接
資料擴展單一資料庫或單一磁碟放不下時,如何複製、分片、歸檔
地理擴展使用者跨區域時,如何降低延遲並處理資料同步
功能擴展產品功能變多時,服務邊界與資料模型是否仍可理解
團隊擴展多人協作時,架構、接口、測試與 review 是否能避免互相踩踏

只說「上雲」「加機器」「改微服務」都太粗;必須先知道是哪一種規模壓力。

垂直擴展與水平擴展

  • 垂直擴展:在同一台機器上增加 CPU、記憶體、磁碟或 I/O 能力。優點是簡單;缺點是硬體上限、成本與單點故障。
  • 水平擴展:增加更多機器,讓負載分散。優點是容量上限更高;缺點是需要處理負載均衡、資料一致性、分片、部署與監控。

2026-05-14-搞定系統設計面試 的路徑是先用垂直或簡單拆分解短期瓶頸,再逐步引入水平擴展需要的元件。

常見擴展手段

手段解決什麼代價
負載均衡多台服務共同接流量需要健康檢查與 session 處理
無狀態服務層服務可自由增加 / 移除狀態要移到共享存儲
快取降低讀延遲與資料庫壓力失效、穿透、雪崩與一致性問題
CDN把靜態內容移近使用者快取更新與成本管理
資料庫複製提高可用性與讀吞吐主從延遲、failover、寫一致性
資料分片單庫放不下時分散資料分片 key、熱點、跨 shard 查詢
消息佇列削峰、非同步、解耦延遲、重試、順序、重複消費
多資料中心區域容災與低延遲資料同步、部署一致性、成本
監控告警擴展後維持可操作性指標設計與告警噪音

擴展不是越早越好

過早引入分散式架構會讓團隊承擔一致性、部署、觀測、除錯與資料遷移成本。更務實的問題是:

  • 當前瓶頸是真實存在,還是想像中的未來流量?
  • 這個擴展手段是降低複雜度,還是把複雜度提前帶進來?
  • 如果流量真的成長,下一個可逆的擴展步驟是什麼?
  • 有沒有先用 封底估算 檢查數量級?

與其他概念的關係

  • 系統設計 — 可擴展性是系統設計中最常見的品質目標之一。
  • 分散式系統元件 — 負載均衡、快取、CDN、佇列、分片與監控是實作可擴展性的常用手段。
  • 封底估算 — 用數量級估算判斷是否真的需要某種擴展手段。
  • 系統設計面試 — 面試中常用「如果使用者增加 10 倍怎麼辦」追問可擴展性。
  • 網頁爬蟲 — 從單機爬蟲到分散式爬蟲時,會遇到任務分配、去重、佇列、節流與儲存擴展。
  • AI輔助開發 — AI 加速產出程式碼不等於系統可擴展;可擴展性仍需工程設計、測試與可觀測性。

相關來源

備註

未來可補:scaling laws 在 AI / infra 的語境、SRE 容量規劃、資料庫分區策略、serverless 擴展模型、Kubernetes autoscaling 與成本治理。