API Gateway
資料來源
What is API gateway? @ ByteByteGo
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 處理請求的流程
整個流程會像這樣:
- client 發送 request 到 API gateway
- API gateway 驗證 HTTP request(Parameter Validation)
- 透過 client 的 IP address 和 HTTP headers 與 allow-list / deny-list、rate limiter 比對後,決定要不要讓它存取服務
- 進行 authentication 和 authorization
- 這個步驟通常會需要向 Identify Provider 查詢此使用者的使用權限
- Rate Limit Check
- Dynamic Routing:決定要將該請求 route 到那個 service 處理
- Service Discovery:例如 Cart、Billing、User、Notification
- 將請求轉成適當的 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 才做)