API 閘道器是客戶端和後端服務之間的中間層,用於管理和控制從客戶端發起的 API 請求。 API 閘道器具有以下功能:
請求路由和請求:API 閘道器可以根據請求的 URL、方法、標頭等資訊路由請求。 它可以將請求傳送到後端的相應服務例項,實現負載均衡和流量控制,並確保請求得到正確處理和響應。
服務聚合:當客戶端需要從多個後端服務獲取資料時,API 閘道器可以將來自不同服務的請求聚合,並將合併後的結果返回給客戶端,從而減少客戶端的請求數量,提高效能。
安全認證和授權:API 閘道器可以處理認證和授權機制,例如使用 API 金鑰和訪問令牌進行客戶端身份驗證。 驗證請求的合法性,並根據預設的訪問策略對請求進行授權或拒絕,確保只有授權的客戶端才能訪問相應的API。
請求轉換和協議轉換:API閘道器可以將來自不同客戶端的請求轉換為不同的請求格式(如JSON、XML)和後端服務可以理解的格式。 它還可以將請求從一種協議(例如HTTP)轉換為另一種協議(例如WebSocket),以滿足不同服務之間的通訊需求。
快取和資料響應:API 閘道器可以快取部分響應資料,以加快響應速度,減輕後端服務的壓力。 它根據快取策略儲存和管理響應,並在適當的時候使用快取資料響應重複請求,從而提供更快的訪問。
分析和監控:API 閘道器可以收集和分析請求和響應資料,以提供實時監控和日誌記錄。 它可以幫助開發人員和管理員跟蹤請求的行為和效能,並為故障排除和效能優化提供基礎。
API 閘道器在現代應用程式架構中發揮著關鍵作用。 它充當入口點,並提供路由、安全性、效能優化、監控和 API 請求管理等功能。 通過集中處理和管理 API 請求,API Gateway 可以提高應用程式的安全性、可靠性和可維護性,同時簡化客戶端與後端服務之間的通訊。 目前 J**A 陣營常用的 API 閘道器是 Zuul 和 SpringCloud Gateway,兩者都是 Spring Cloud 框架中用於構建 API 閘道器的元件,它們有以下區別:
技術架構:Zuul 是乙個基於阻塞 IO 模型的 servlet 2X 容器,而 Spring Cloud Gateway 是使用 Spring Framework 5、Spring Webflux 和 Project Reactor 堆疊構建在非阻塞 IO 模型上。
效能和可擴充套件性:由於 Spring Cloud Gateway 使用了 Webflux 和 Reactor 的非同步非阻塞模型,因此在 IO 處理能力、併發連線處理、請求響應處理速度等方面都比 Zuul 的同步阻塞模型具有更好的效能。 同時,Spring Cloud Gateway 的架構也更適合構建高可用、可擴充套件的 API 閘道器,可以實現更好的橫向擴充套件,適用於大規模、高併發的分布式系統。
閘道器元件的靈活性:Spring Cloud Gateway 提供了更靈活的過濾機制,可以自定義過濾鏈、路由規則和方法,比 Zuul 更容易擴充套件和自定義閘道器的功能和行為。
API 生命週期管理:Spring Cloud Gateway 提供與 Spring Framework 一致的生命週期和健康檢查機制,可支援路由規則和處理器的動態重新整理和重新載入,實現實時配置和部署。
社群支援與發展:目前,Spring Cloud Gateway作為Spring Cloud家族桶的一員,在Spring社群中得到了更廣泛的關注和支援,並保持著強勁的更新和發展態勢。
Zuul 和 Spring Cloud Gateway 各有優缺點和適配場景,應根據具體業務需求進行選擇。 如果您需要更高的效能和可擴充套件性,但也想要更靈活的配置和定製,則可以選擇Spring Cloud Gateway。 如果您需要更多的功能和穩定的操作環境,則可以選擇Zuul。
在高併發、高時延的場景下,閘道器實現高效能、高吞吐的基本要求是全鏈路非同步、不阻塞執行緒。 Zuul閘道器採用同步阻塞方式,不符合要求。
Spring Cloud Gateway 基於 WebFlux,完美支援非同步無阻塞程式設計,許多功能易於實現。 Spring5 必須使用 J**A 8,函式式程式設計是 J**A8 的重要特性之一,WebFlux 支援函式式程式設計來定義路由端點來處理請求。
通過上述實現,閘道器從 Zuul 遷移到了 Spring Cloud Gateway。 閘道器中定義了豐富的路由斷言和過濾器,可以通過配置檔案或 Fluent API 直接呼叫使用,非常方便。 在效能方面,也比之前的Zuul閘道器要好。