Spring Cloud -- Gateway服務網關架構、特性及工作流程
前言
本篇我們要來探討Spring Cloud Gateway服務網關,原本Spring Cloud在1.x版本使用的服務網關為Netfilx公司開發的Zuul網關,但因為Zuul在2.x版本中升級不順利,因此Spring Cloud最後自己研發了Gateway網關代替了Zuul。
Gateway是在Spring系統上構建的API網關服務,基於Spring 5、Spring Boot 2和Project Reactor等技術,目的在提供一種簡單而有效的方式來對API進行路由,以及提供強大的過濾器功能,例如:熔斷、限流、重試等。
微服務網關的架構位置通常在如下圖的位置:
Spring Cloud Gateway 特性
Spring Cloud Gateway 具有如下8點特性:
1. 基於Spring 5、Spring Boot 2和Project Reactor進行構建。
2. 動態路由:能夠匹配任何請求屬性。
3. 可以對路由指定Predicate(斷言)和Filter(過濾器)。
4. 集成Hystrix的斷路器功能。
5. 集成Spring Cloud服務發現功能。
6. 易於撰寫的Predicate(斷言)和Filter(過濾器)。
7. 請求限流功能。
8. 支持路徑重寫。
Gateway有三大核心概念,分別是Route(路由)、Predicate(斷言)、Filter(過濾),說明如下:
1. Route(路由):路由是構建服務網關的基本模組,它由ID、目標URI,一系列的斷言和過濾器組成,如果斷言為true則匹配該路由
2. Predicate(斷言):參考Java 8的java.util.function.Predicate,開發人員可以匹配HTTP請求中的所有內容,如有請求與Predicate相匹配則進行路由。
3. Filter(過濾):為Spring框架中的GatewayFilter實例,使用過濾器,可以在請求被路由前或後對請求進行修改。
Spring Cloud Gateway 工作流程
Gateway的工作流程如下圖:
上圖的意思是:客戶端向Spring Cloud Gateway發送請求,然後在Gateway Handler Mapping中找到與請求相匹配的路由,將其發送至Gateway Web Handler。
Handler再通過指定的過濾器鍊來將請求發送至我們實際的服務業務邏輯,然後返回。
過濾器可以在發送請求之前(pre)或之後(post)執行業務邏輯。
Filter在"pre"類型的過濾器中可以做參數檢驗、權限檢驗、流量監控、log輸出、協議轉換等等的功能。
在"post"類型的過濾器中可以做響應內容、響應頭的修改、log輸出、流量監控等等功能。
Gateway的核心邏輯:路由轉發 + 執行過濾器鍊
以上,就是我們這篇文章針對Spring Cloud Gateway的架構、特性及工作流程做一個較詳細的整理,下一篇我們會來實作Gateway服務網關的搭建,文章中若有疏漏,也歡迎各位前輩不吝指教,謝謝大家~
參考文獻
尚硅谷Spring Cloud教程