可擴展性 (Scalability)

核心定義

系統能隨著需求(使用者、資料量、流量)增加,透過增加資源來維持效能與穩定性的能力。

指標 定義 關聯
Throughput(吞吐量) 每秒能處理的請求數(RPS) 擴展目標:提高吞吐量
Latency(延遲) 單一請求從發出到完成的時間 擴展目標:降低延遲
為什麼重要?

使用者量成長時,若架構不可擴展 → 延遲上升、錯誤增加、甚至宕機。
可擴展架構能彈性增減資源,支撐業務成長,同時避免單點故障。


垂直擴展(Vertical Scaling)

升級單一伺服器的硬體規格:加 CPU、加 RAM、換更快的硬碟。

  ┌──────────┐        ┌──────────────┐
  │ Server   │  →     │ Server       │
  │ 4 cores  │  升級   │ 16 cores     │
  │ 16 GB    │        │ 64 GB RAM    │
  └──────────┘        └──────────────┘
    舊機器                 新機器
項目 說明
優點 簡單、改動少、不需要修改應用程式架構
缺點 有物理上限(CPU/RAM 無法無限升級);停機風險;初期便宜但後期貴
適合 短期快速解法、流量剛開始成長時

水平擴展(Horizontal Scaling)

增加伺服器數量,透過 Load Balancer 分擔流量。

                    ┌──────────┐
                 ┌──► Server 1 │
  Client → LB ──┤   └──────────┘
                 ├──► Server 2 │
                 │   └──────────┘
                 └──► Server 3 │
                     └──────────┘
項目 說明
優點 理論上無限擴展;彈性佳;高可用性(一台掛掉不影響服務)
缺點 設計複雜;需處理分散式資料一致性;需要 Load Balancer
適合 長期、大規模成長;需要高可用性的系統

垂直 vs 水平比較

比較項目 Vertical Scaling Horizontal Scaling
做法 升級單機規格 增加機器數量
上限 有物理上限 理論無限
複雜度 高(需 LB、分散式一致性)
成本 初期低、後期貴 彈性,按需付費
停機風險 升級時可能需停機 可滾動更新,無停機
典型時機 短期、快速解法 長期、大規模
面試策略

先垂直,再水平。
流量初期用垂直擴展應急,等到碰到硬體上限或需要高可用性時,才轉向水平擴展。
面試中直接說「我們先垂直擴展,之後再水平」是合理且常見的答案。


水平擴展的挑戰

不是加機器就好

水平擴展帶來的新問題:

  1. Session 狀態:請求可能打到不同 Server,Sticky Session 或集中式 Session Store
  2. 資料一致性:多台 Server 後的 DB 如何同步?→ 見 02-Distributed-Systems/02-CAP-Theorem
  3. Load Balancer 本身的 SPOF:需要 LB 也要做高可用(主備/多節點)
  4. 資料分片(Sharding):資料量大時,DB 也要水平擴展