微服務:Gateway
學習自:SpringCloud Gateway 簡介、工作流程、快速入門_springcloud工作流程_豆恭梓的博客-CSDN博客
建議與微服務:Eureka原理關聯查看。
1、網關
網關位于微服務最邊緣,直接暴露給用戶,作為用戶和微服務的橋梁。

沒網關:C端直接通過完整的IP:Port/url來訪問微服務,需要在C端配置很多IP:Port,這在服務并發大的情況下,無法完成負載均衡。
有網關:C端訪問網關,網關訪問微服務。Gateway通常與Eureka(注冊中心)整合,通過服務名就能找到目標IP:Port,這樣在訪問服務時只需要服務名稱,可以實現負載均衡,還可以實現token攔截、權限驗證、限流等操作。
2、SpringCloud Gateway工作流程

- C端向SpringCloud Gateway發出請求;
- 在Handler Mapping中找到與請求相匹配的路由,之后該請求會發往Gateway Web Handler;
- Handler通過指定的過濾器Filter將請求發到實際的服務的業務邏輯(Proxied Service),之后返回。Filter之間存在虛線是因為Filter可能會在發送請求前(Pre)、后(Post)執行業務邏輯,對其進行加強處理。
Pre類型的Filter可以做參數校驗、權限校驗、流量監控、日志輸出、協議轉換等;
Post類型的Filter可以做響應內容、header的修改、日志輸出、流量監控等
總之,Gateway的核心邏輯是:路由轉發、執行過濾器鏈。
3、SpringCloud Gateway三大概念
1)Route-路由(和Eureka結合成為動態路由)
Gateway和Eureka結合可以做成動態路由。
一個Route由以下信息組成:ID、目的URL、一組斷言工廠、一組filter。
如果路由斷言為True,說明請求的URL與配置路由相匹配。
2)Predicate(斷言)(一個返回Bool的表達式)
Java 8中的斷言函數。
SpringCloud Gateway的斷言函數允許開發者去定義匹配來自于HTTP請求中的任何信息,比如請求頭和參數。
3)Filter(過濾)
一個標準的Spring WebFilter。
SpringCloud Gateway中的Filter分為兩種類型:Gateway Filter和Global Filter。
Filter會對請求、響應進行修改處理:
- Gateway Filter針對某個路由的Filter對某個接口做限流;
- Global Filter針對全局的Filter token ip黑名單。
4、Nginx和Gateway的區別
- Nginx在做路由、負載均衡、限流之前,需要修改nginx.conf配置文件,將負載均衡、路由、限流規則加入其中;
- Gateway和Eureka高度集成,實現自動路由;和Ribbon結合,實現負載均衡;也能輕易實現限流、權限認證。
- Nginx用C編寫,Gateway用Java編寫,Nginx性能更高;
- Nginx用于服務器級別,Gateway用于項目級別。

5、總結
1)網關的作用
沒網關時,C端要知道服務的IP和Port,才能訪問它。如果有很多服務,那么就要在C端維護很多IP:Port,這在并發大的時候無法完成負載均衡。
有網關時,C端通過URL訪問網關,請求中包含了服務名。網關會根據服務名(從Eureka中)找到目標服務的IP:Port。此時只需服務名就能實現負載均衡。
2)Gateway發揮作用的流程
①C端發出請求,流量進入Gateway;
②Gateway根據URL進行路由匹配,發往過濾器Filter;
③Filter將請求轉給具體的Service。
④Filter會對請求處理前后執行一些業務邏輯(參數校驗、流量監控、響應修改)。
3)Nginx與Gateway的區別
Nginx通過修改nginx.conf實現負載均衡、路由、限流;
Gateway和Eureka配合,實現自動路由;和Ribbon配合,實現負載均衡。
Nginx用于服務器級別(WEB層、前端靜態頁面層),Gateway用于項目級別(APP層、業務層)。

浙公網安備 33010602011771號