跳至主要内容

API Gateway

資料來源

API gateway 的功能

API Gateway

API gateway 位在 clients 和許多 backend services 的中間,它通常會提供的功能包括:

  • authentication and security policy enforcements
  • load balancing and circuit breaking
  • protocol translation and service discovery
  • monitoring, logging, analytics and billing
  • caching
  • error tacking and circuit-breaking

API Gateway 處理請求的流程

Imgur

整個流程會像這樣:

  1. client 發送 request 到 API gateway
  2. API gateway 驗證 HTTP request(Parameter Validation)
  3. 透過 client 的 IP address 和 HTTP headers 與 allow-list / deny-list、rate limiter 比對後,決定要不要讓它存取服務
  4. 進行 authentication 和 authorization
    • 這個步驟通常會需要向 Identify Provider 查詢此使用者的使用權限
  5. Rate Limit Check
  6. Dynamic Routing:決定要將該請求 route 到那個 service 處理
  7. Service Discovery:例如 Cart、Billing、User、Notification
  8. 將請求轉成適當的 protocol,並發送到對應的 service,例如透過 gRPC;同樣的,收到 service 處理好的資料時,也在這裡轉成 client 可以接受的 protocol

其他

  • 應該要將 API gateway 部署到多個地區,以增加 availability。這點可以透過許多雲端服務來達到。

Load Balancer 和 API gateway 的差別

:::資料來源

EP48: Debugging Like A Pro - by Alex Xu @ bytebytego

:::

在開始說明前需要先區分幾個概念:

  • NLB(Network Load Balancer):通常會部署在 API gateway 前,主要是根據使用者的 IP 來進行分流(traffic routing),但它不會處理任何 HTTP requests
  • ALB(Application Load Balancer):根據 HTTP header 和 URL 來進行 routing
  • API gateway:處理的是比較靠近 application level 的 tasks

上面這幾個通常會搭配使用,例如

  • 情境 a:使用 ALB 來將 requests 分配到不同的 services,每個 services 實作它們自己的 rate limitation、authentication 等等。這種作法雖然比較彈性,但在 service level 需要做的事情較多
  • 情境 b:使用 API gateway 來處理 authentication、rate limiting、caching 等等。這種作法的好處是 services level 要做的事情較少,但相較於 ALB 的彈性比較小(因為在 API gateway 就做了一些限制和處理,而不是到 services level 才做)

Imgur