API Gateway vs Load Balancer vs Reverse Proxy
部分內容由 LLM 生成,尚未經過人工驗證。
這三者經常被混淆,因為它們都位於 client 與 server 之間。然而,它們各自解決不同的問題。
功能光譜
flowchart LR
subgraph RP["Reverse Proxy"]
A["SSL 終止"]
B["快取"]
C["壓縮"]
end
subgraph LB["Load Balancer"]
D["流量分配"]
E["健康檢查"]
F["故障轉移"]
end
subgraph AG["API Gateway"]
G["驗證授權"]
H["速率限制"]
I["轉換/分析"]
end
RP --> LB --> AG
Reverse Proxy
位於伺服器前端的代理,用於接收客戶端請求並轉發給後端伺服器。屬於通用型解決方案,不在乎內容類型。
核心功能
| 功能 | 說明 |
|---|---|
| SSL 終止 | 處理 HTTPS 加解密,減輕後端負擔 |
| 快取 | 快取靜態資源,減少後端請求 |
| 安全性 | 隱藏後端伺服器架構 |
| 壓縮 | 壓縮回應內容,加速傳輸 |
常見工具
- Nginx - 高效能、廣泛使用
- HAProxy - 專注於高可用性
- Caddy - 自動 HTTPS、簡單配置
Load Balancer
專門分配流量的反向代理,目標是達成可擴展性與高可用性。
負載平衡演算法
| 演算法 | 說明 |
|---|---|
| Round Robin | 依序輪流分配 |
| Least Connections | 分配給連線數最少的伺服器 |
| IP Hash | 依據 client IP 決定伺服器,確保同一用戶連到同一伺服器 |
| Weighted | 依據權重比例分配 |
L4 vs L7
flowchart TB
subgraph L4["Layer 4 (TCP)"]
L4A["看到:IP + Port"]
L4B["速度快,路由智慧有限"]
end
subgraph L7["Layer 7 (HTTP)"]
L7A["看到:URL, Headers, Cookies"]
L7B["可依路徑路由到不同服務"]
end
| 層級 | 優點 | 缺點 |
|---|---|---|
| L4 | 效能高、延遲低 | 無法依內容路由 |
| L7 | 路由靈活、功能豐富 | 效能開銷較大 |
常見工具
- AWS ALB - L7 應用層負載平衡
- AWS NLB - L4 網路層負載平衡
- GCP Load Balancer - 全球分散式
API Gateway
專門管理 API 的反向代理,適合微服務架構。將橫切關注點(cross-cutting concerns)集中管理。
核心功能
| 功能 | 說明 |
|---|---|
| 身分驗證/授權 | JWT 驗證、OAuth、API Key |
| 速率限制 | 防止 API 濫用 |
| 請求/回應轉換 | 修改 header、body、格式轉換 |
| 版本控制 | 管理多個 API 版本 |
| 分析監控 | 追蹤 API 使用狀況 |
常見工具
- Kong - 開源、可擴展
- AWS API Gateway - 雲端原生、與 AWS 整合
- Apigee - Google 旗下、企業級功能
實際架構
flowchart LR
Client["Client"] --> CDN["CDN"]
CDN --> Gateway["API Gateway"]
Gateway --> LB["Load Balancer"]
LB --> S1["Service A"]
LB --> S2["Service B"]
LB --> S3["Service C"]
現實中這三者經常組合使用,各司其職。
決策框架
| 需求 | 建議方案 |
|---|---|
| 服務有多個實例 | Load Balancer |
| 對外公開 API | API Gateway |
| 需要驗證/速率限制 | API Gateway |
| 需要 SSL + 快取 | Reverse Proxy |
| 微服務架構 | API Gateway + Load Balancer |
總結
- Reverse Proxy - 通用型代理,處理 SSL、快取、壓縮
- Load Balancer - 專注流量分配與高可用性
- API Gateway - 專門管理 API,處理驗證、限流、轉換
三者互補而非競爭,根據需求組合使用。