什么是Spring Cloud Gateway?
????????Spring Cloud Gateway 是 Spring Cloud 社區官方推出的一個基于 Spring Framework 5、Project Reactor 和 Spring Boot 2.x 的下一代 API 網關(API Gateway)解決方案。它旨在為微服務架構提供統一、簡潔、高效的 API 網關層。
????????你可以把它想象成一個大門口的智能保安和交通樞紐。所有外部客戶端(如Web瀏覽器、移動App)對微服務集群的請求,都需要先經過這個網關。網關負責檢查、過濾、路由請求到后端的各個具體微服務,并在請求進入和離開時執行各種邏輯。
核心特性:
基于 Spring Ecosystem:
與 Spring Boot、Spring WebFlux 等無縫集成,開發體驗良好。
響應式編程模型:
內部使用 Project Reactor(Mono, Flux),能夠高效處理高并發請求,性能優異。
高度可配置:
大部分配置可以通過 YAML/Properties 文件或 Spring Cloud Config 動態管理。
豐富的過濾功能:
提供多種內置過濾器,并支持自定義過濾器,實現靈活的請求處理邏輯。
為什么需要 Spring Cloud Gateway?(核心價值)
在微服務架構中,服務數量眾多,接口分散,直接暴露給外部客戶端會帶來諸多問題。API 網關的出現是為了解決這些痛點:
統一入口:
將所有微服務的入口統一到網關,簡化客戶端調用,隱藏內部服務細節。
路由轉發:
根據請求的 URL、Header 等信息,將請求智能地轉發到對應的微服務實例。
請求過濾與安全:
在請求到達具體微服務之前,進行身份認證、權限校驗、非法請求攔截等。
負載均衡:
可以在網關層對后端微服務實例進行簡單的負載均衡(通常與 Spring Cloud LoadBalancer 結合)。
限流熔斷:
保護后端微服務,防止因流量過大或異常請求導致服務崩潰(通常與 Sentinel、Resilience4j 等結合)。
日志監控:
統一記錄所有通過網關的請求和響應信息,便于監控和問題排查。
協議轉換:
可以在網關層進行協議轉換,例如將 HTTP 請求轉換為內部 RPC 調用。
Spring Cloud Gateway 的核心組件
Spring Cloud Gateway 的核心功能由以下幾個關鍵組件構成:
Route(路由):
路由是網關的基本構建塊。它包含一個唯一的 ID、一個目標 URI(指向后端微服務)、一組 Predicate(斷言)和一組 Filter(過濾器)。
?
ID: 路由的唯一標識符。
?
URI: 后端服務的地址,可以是 HTTP 也可以是其他協議。
?
Predicate: 這是一個 Java 8 的 Predicate。輸入類型是 Spring Framework 的 ServerWebExchange(包含請求和響應信息)。如果 Predicate 返回 true,則說明該請求匹配此路由。
?
Filter: 可以是 GatewayFilter 的實例,也可以是 GlobalFilter 的實例。Filter 用于在請求發送到后端之前或之后,對請求或響應進行修改或處理。
Predicate(斷言):
用于匹配 HTTP 請求的各個方面,如路徑(Path)、方法(Method)、頭信息(Header)、參數(Query)、來源 IP(RemoteAddr)等。只有當所有配置的 Predicate 都返回 true 時,請求才會匹配該路由。Spring Cloud Gateway 提供了多種內置 Predicate_FACTORY。
Filter(過濾器):
這是網關實現各種復雜邏輯的核心。Filter 可以分為兩類:
GatewayFilter: 作用于特定的路由。可以對請求路徑進行重寫、添加請求頭、設置超時時間、記錄日志等。
?
GlobalFilter: 作用于所有路由。通常用于實現橫切關注點,如認證、限流、監控等。Spring Cloud Gateway 提供了一些內置的 GlobalFilter。
Spring Cloud Gateway 的工作流程
一個典型的請求在 Spring Cloud Gateway 中的處理流程如下:
接收請求:
網關服務器接收到來自客戶端的 HTTP 請求。
路由匹配:
網關根據請求的屬性(如 URL 路徑、HTTP 方法等),遍歷所有已配置的路由。
斷言執行:
對于每個路由,執行其關聯的 Predicate。如果所有 Predicate 對該請求返回 true,則認為請求匹配了該路由。
執行前置過濾器:
執行該路由關聯的 GatewayFilter(如果有)。這些過濾器可以在請求發送到后端之前修改請求內容或執行其他邏輯(如認證)。
轉發請求:
將處理后的請求轉發到路由中指定的后端 URI。
接收響應:
網關接收到后端微服務返回的響應。
執行后置過濾器:
執行該路由關聯的 GatewayFilter(如果有)。這些過濾器可以在響應返回給客戶端之前修改響應內容或執行其他邏輯(如日志記錄)。
返回響應:
將最終處理后的響應返回給客戶端。
Spring Cloud Gateway 的主要功能
路由轉發:
核心功能,根據規則將請求路由到不同的微服務。
熔斷集成:
可以輕松集成 Hystrix 或 Resilience4j,當后端服務不可用時,返回降級響應。
請求限流:
可以基于各種維度(如 Key-Resolver 定義的鍵、IP、用戶等)對請求進行限流,防止系統過載。
安全認證:
可以通過過濾器實現 JWT 解析、OAuth2 認證等安全機制。
請求/響應修改:
使用 GatewayFilter 修改請求頭、請求參數、響應狀態碼、響應頭等。
日志記錄與監控:
通過 GlobalFilter 記錄請求耗時、參數、狀態碼等信息,用于監控和審計。
動態路由:
可以通過配置中心(如 Nacos, Consul, Spring Cloud Config)動態更新路由規則,無需重啟網關。
Spring Cloud Gateway 的應用場景
所有微服務對外暴露的 API 都通過 Gateway 進行統一管理。
需要集中進行認證、授權的場景。
需要對 API 進行限流、熔斷保護的場景。
需要統一記錄 API 調用日志和監控指標的場景。
需要對外提供統一的 API 版本管理或協議轉換的場景。
總結
????????Spring Cloud Gateway 是現代微服務架構中的核心組件,作為高性能API網關,它能集中處理路由、安全和限流等功能,簡化客戶端與微服務的交互,提升系統穩定性和安全性,是Spring Cloud微服務的首選網關方案。