什麼是API網關
API網關是一個伺服器,是系統的唯一入口。從面向對象設計的角度看,它與外觀模式類似。API網關封裝了系統内部架構,為每個用戶端提供一個定制的API。它可能還具有其它職責,如身份驗證、監控、負載均衡、緩存、請求分片與管理、靜态響應處理。
API網關方式的核心要點是,所有的用戶端和消費端都通過統一的網關接入微服務,在網關層處理所有的非業務功能。通常,網關也是提供REST/HTTP的通路API。服務端通過API-GW注冊和管理服務。
為什麼需要 API 網關
假設我們要使用微服務架構建構一個電商平台,以下可能是一些潛在的服務:
•·購物車服務•·訂單服務•·商品服務•·評論服務•·庫存服務
API 網關是用戶端通路服務的統一入口,API 網關封裝了後端服務,還提供了一些更進階的功能,例如:身份驗證、監控、負載均衡、緩存、多協定支援、限流、熔斷等等,API 網關還可以針對不同的用戶端定制不同粒度的 API:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CM3QTO5czMmFTZ2kTYyEmNzYzXyIDOwgTM4AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
網關(API Gateway)的設計要素
•限流:實作微服務通路流量計算,基于流量計算分析進行限流,可以定義多種限流規則。•緩存:資料緩存。•日志:日志記錄。•監控:記錄請求響應資料,api耗時分析,性能監控。•鑒權:權限身份認證。•灰階:線上灰階部署,可以減小風險。•路由:路由是API網關很核心的子產品功能,此子產品實作根據請求,鎖定目标微服務并将請求進行轉發。
網關選型
OpenResty
OpenResty® 是一個基于 Nginx 與 Lua 的高性能 Web 平台,其内部內建了大量精良的 Lua 庫、第三方子產品以及大多數的依賴項。用于友善地搭建能夠處理超高并發、擴充性極高的動态 Web 應用、Web 服務和動态網關。是以,我們可以做出各種符合我們需要的網關政策的Lua腳本,以其為基礎建構高性能的網關系統。
kong
Kong基于OpenResty,是一個雲原生、快速、可擴充、分布式的Api 網關。繼承了OpenResty的高性能、易擴充性等特點。Kong通過簡單的增加機器節點,可以很容易的水準擴充。同時功能插件化,可通過插件來擴充其能力。而且在任何基礎架構上都可以運作。具有以下特性:•提供了多樣化的認證層來保護Api。•可對出入流量進行管制。•提供了可視化的流量檢查、監視分析Api。•能夠及時的轉換請求和相應。•提供log解決方案•可通過api調用Serverless 函數。
Traefik
Traefik 是一個現代 HTTP 反向代理和負載均衡器,可以輕松部署微服務
它可以與您現有的元件(Docker、Swarm,Kubernetes,Marathon,Consul,Etcd,…)內建,并自動動态配置。
Ambassador
Ambassador是一個基于envoy proxy建構的,kubernetes原生的開源微服務網關。Ambassador在建構之初就緻力于支援多個獨立的團隊,這些團隊需要為最終使用者快速釋出、監控和更新服務。Ambassador還可以用來處理Kubernetes ingress和負載均衡的能力。
Ambassador依靠Kubernetes實作擴充、高可用性和持久性。所有Ambassador配置都直接存儲在Kubernetes中(etcd);沒有資料庫。Ambassador被打包成一個單獨的容器,其中包含控制平面和一個Ambassador代理執行個體。預設情況下,Ambassador部署為kubernetes deployment,可以像其他kubernetes deployment一樣進行擴充和管理。
Tyk
Tyk是一個開源的、輕量級的、快速可伸縮的 API 網關,支援配額和速度限制,支援認證和資料分析,支援多使用者多組織,提供全 RESTful API。基于 go 編寫。
Zuul
Zuul 是一種提供動态路由、監視、彈性、安全性等功能的邊緣服務。Zuul 是 Netflix 出品的一個基于 JVM 路由和服務端的負載均衡器。Zuul是Spring Cloud全家桶中的微服務API網關。