可擴展性 (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 也要水平擴展