問題:
client要怎麼知道你的各個服務的endpoints是什麼?或是更新後的endpoints?
API Gateway 主要是routing traffic到該去的service endpoints / expose API / tasks (SSL)。此外API gateway可以有多個layer topology,某些前面的gateway可以做traffic offloading / SSL,下一層的gatewau可以做身份認證或是真的導向service endpoints。
Routing
API gateway扮演reverse proxy角色,將requests route到後端service (這也就是reverse proxy定義)。
Aggregation
gateway也可以扮演aggregator角色,將多個backend service的response集合起來變成一個返回client端的response:
這個pattern的風險除了一樣bottleneck之外,另外就是不要讓gateway以及這些services之間形成高耦合狀態,還有aggregation也會對gateway帶來額外的CPU load。好處是在client端的,只需要一個request就可以使用多個service。要是aggregation的load或是邏輯太大,會讓gateway變成monolithic,此時最好(以microservices觀點)可以拆出另一個aggregation service:
Offloading
gateway可以把某些不屬於個別service該做的load接手過去做,例如SSL termination,額外的好處是讓SSL certificate這樣的安全性資產可以分散。
這類的load最好是所有service共有的額外項目才放到gateway去做,稱為cross-cutting concerns,例如:
- 安全性認證與授權
- Rate limiting / retry policy / circuit breaking (?!)
- Caching
- Compression
- SSL offloading
- logging & monitoring
實作gateway
最受歡迎的:NGINX / HAProxy / Envoy,都提供了reverse proxy / load balancing / SSL / routing,雲端服務的話有 Azure Application Gateway / Azure Frontdoor / Amazon API Gateway。
Egress gateway
上面講的是ingress gateway,將外部流量往內導向該去的地方。
相對的有一個egress gateway會將內部流量導離自己的private network,來存取外部資源,e.g. 使用一個egress gateway來對某些outbound流量做安全性的blocking動作(可以阻擋不安全往外流量)。總之當你需要monitor outbound requests時,可以用Istio這類的egress gateway。
沒有留言:
張貼留言