nabroux's Obsidian vault, published.

Astro Techbook

語言
中文

API Gateway

my-notes/system-design-hld/concepts · ZH

translationKey: api-gateway #system design #concept

🧩 一、什麼是 API Gateway?

API Gateway 是介於 Client 與後端服務之間的反向代理層

它負責統一接收所有請求,並根據規則轉發至對應的微服務。

📘 簡單理解:

Client(App / Web) → [ API Gateway ] → 多個 Backend Services

💬 功能本質:

讓外部世界看到的是「一個統一的 API」, 而內部實際上有很多獨立的微服務。

⚙️ 二、API Gateway 為什麼需要存在?

🧱 沒有 Gateway 時:

  • 每個前端都要知道各後端服務的位址。
  • 安全性差(每個 service 都暴露在外)。
  • 每個服務都得重複做驗證、限流、日誌、CORS、壓縮等

✅ 有 Gateway 後:

  • 統一入口 → 統一管理金鑰、權限、驗證。
  • 後端服務隱藏 → 提高安全性。
  • 可以做快取、限流、A/B測試、統計等。

🔑 三、API Gateway 的核心功能

功能分類 說明
🔁 反向代理 / 路由 (Reverse Proxy) 將 /user/* 請求轉發到 user-service,/order/* 轉到 order-service。
🔐 認證與授權 (Authentication / Authorization) 驗證 JWT、OAuth2、API Key,控制使用者權限。
🚦 流量控制 (Rate Limiting / Quota / Circuit Breaker) 防止惡意請求、平滑突發流量。
⚙️ 負載平衡 (Load Balancing) 根據策略分配請求到多個實例。
🧱 請求聚合 (Request Aggregation) 一次呼叫多個後端服務,合併結果。
🧩 轉換 (Transformation) 修改 header、request body、API 版本轉換。
📊 監控與日誌 (Monitoring / Metrics / Tracing) 記錄每個請求狀態、延遲、錯誤。
📈 快取 (Caching) 常用查詢結果快取在 Gateway。
🧱 CORS 與安全控制 管理跨域、CSRF、Header 白名單等。
🔀 灰度 / A/B 測試 / Canary 部署 部分流量導向新版本以測試。
🛡️ 防火牆 / 攻擊防禦 (WAF) 攔截 SQL Injection、XSS、DDoS。

🌐 四、架構層級定位

整體架構中,Gateway 位於 Load Balancer 後面微服務前面

[ Client ]
   ↓
[ CDN / WAF ]
   ↓
[ Load Balancer ]
   ↓
[ API Gateway Cluster ]
   ↓
[ Auth Service | User Service | Payment Service | ... ]
  • LB:分流、健康檢查(L4/L7)
  • Gateway:應用層邏輯(L7,處理 token、路由)
  • Backend:執行實際業務邏輯

🧠 五、API Gateway 在微服務架構中的角色

元件 職責
Service Discovery 動態知道有哪些服務存在(e.g. Consul, etcd, Eureka)
API Gateway 統一入口、統一規範、安全治理
Service Mesh 管理服務與服務之間的流量(內部)
Backend Services 執行實際業務邏輯
📌 Gateway 是「外部流量入口」,
Service Mesh 是「內部流量治理」。

🧱 六、API Gateway 的部署模式

模式 說明 特點
集中式 Gateway 所有請求都經過單一 Gateway 簡單、統一,但可能成瓶頸
分散式 Gateway(per service) 每個服務都有自己的輕量 Gateway 擴展性強,運維複雜
雲端託管型 AWS API Gateway、GCP Apigee 零維運、功能齊全但貴
Service Mesh Gateway 使用 Istio / Linkerd 入口 適合 Kubernetes 微服務環境

💡 七、常見實作框架

類別 工具 / 服務 說明
☁️ 雲端託管 AWS API Gateway、GCP Apigee、Azure API Management 零維運,企業級功能
🧩 開源型 Kong (Lua / Nginx)Traefik (Go)Envoy (C++)KrakenD (Go) 主流選擇,彈性大
🧱 自架型 Spring Cloud GatewayNetflix Zuul 適合 Java 生態系
⚙️ 輕量代理 Nginx / OpenResty / HAProxy 可自訂規則與 Lua plugin

🔧 八、範例:Nginx 做簡易 API Gateway

server {
    listen 443 ssl;
    ssl_certificate     /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;

    location /user/ {
        proxy_pass http://user-service:8080/;
    }

    location /auth/ {
        proxy_pass http://auth-service:8080/;
    }

    location /payment/ {
        proxy_pass http://payment-service:8080/;
    }
}

這樣:

  • 所有請求都統一從 Gateway 進入
  • SSL/TLS 統一管理
  • 可加上認證、限流、日誌

🧠 九、延伸功能與進階設計

功能 實作方式
🔐 JWT 驗證 Middleware 或 Plugin 驗簽、解析 claims
📈 Rate Limiting Redis / local token bucket
📊 Logging / Monitoring Prometheus + Grafana
Circuit Breaker / Retry 使用 Envoy 或 Kong plugin
🌍 Multi-Tenant 支援 根據 Header 或 Token 路由不同租戶服務
🔄 API 版本控制 /v1/* → 舊版服務、/v2/* → 新版服務
🧱 GraphQL Gateway / BFF 聚合多服務成單一 API(如 Apollo Gateway)

🧰 十、API Gateway vs 其他元件對比

功能 API Gateway Load Balancer Service Mesh
層級 L7 (HTTP/gRPC) L4/L7 L7 (內部流量)
核心任務 外部流量進入、治理 流量分配 內部服務流量治理
驗證 / 權限 ✅ 有 ❌ 無 ✅ 內部憑證
限流 / 熔斷 ✅ 有 ⚙️ 有限 ✅ 自動
對象 Client → Service Client → LB Service → Service
常見產品 Kong, Traefik, Envoy Nginx, HAProxy, ALB Istio, Linkerd

⚙️ 十一、部署架構參考

Client
  ↓
[ CDN / WAF (Cloudflare) ]
  ↓
[ Load Balancer (AWS ELB) ]
  ↓
[ API Gateway Cluster (Kong / Traefik / Envoy) ]
  ↓
[ Auth Service | User Service | Order Service | ... ]
  • SSL Offloading 在 LB 層
  • API Gateway 處理 JWT、路由、限流
  • 內部服務透過 Service Discovery 找彼此

🧩 十二、實務經驗建議

規模 推薦做法
🧱 小型專案 / MVP Nginx 反向代理 + JWT 驗證
🧩 中型微服務 Kong / Traefik / Envoy Gateway
☁️ 雲端 Serverless AWS / GCP API Gateway
🧠 大型企業 Kong + Istio / Apigee + Service Mesh
尚無其他語言版本