歡迎關注頭條号:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 是什麼
- WebFlux
- 做什麼
- 為什麼
- 總結
前言
我們要了解一個事物,從三個次元去了解就行了;是什麼、做什麼、為什麼。
是什麼
在SpringCloud微服務體系中,有個很重要的元件就是網關,在1.x版本中都是采用的Zuul網關;但在2.x版本中,zuul的更新一直跳票,SpringCloud最後自己研發了一個網關替代Zuul,那就是SpringCloud Gateway。
還有一點就是Gateway是基于WebFlux的。這裡引出了WebFlux名詞,那什麼是WebFlux?
WebFlux
我們知道傳統的Web架構,比如說:struts2,springmvc等都是基于Servlet API與Servlet容器基礎之上運作的,在Servlet3.1之後才有了異步非阻塞的支援。
而WebFlux是一個典型非阻塞異步的架構,它的核心是基于Reactor的相關API實作的。相對于傳統的web架構來說,它可以運作在諸如Netty,Undertow及支援Servlet3.1的容器上。
根據官方的說法,webflux主要在如下兩方面展現出獨有的優勢:
1)非阻塞式
其實在servlet3.1提供了非阻塞的API,WebFlux提供了一種比其更完美的解決方案。使用非阻塞的方式可以利用較小的線程或硬體資源來處理并發進而提高其可伸縮性
2) 函數式程式設計端點
老生常談的程式設計方式了,Spring5必須讓你使用java8,那麼函數式程式設計就是java8重要的特點之一,而WebFlux支援函數式程式設計來定義路由端點處理請求。
做什麼
網關可以了解為網絡關卡,是整個微服務的統一入口(門衛)。

可以和服務注冊中心完美的整合,如:Eureka、Consol、Nacos
Spring Cloud Gateway 功能特征
- 基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
- 動态路由
- Predicates 和 Filters 作用于特定路由
- 內建 Hystrix 斷路器
- 內建 Spring Cloud DiscoveryClient
- 易于編寫的 Predicates 和 Filters
- 限流
- 路徑重寫
上圖中是核心的流程圖,最主要的就是Route、Predicates 和 Filters 作用于特定路由。
1)Route:路由是網關的基本構件。它由ID、目标URI、謂詞集合和過濾器集合定義。如果聚合謂詞為真,則比對路由。2)Predicate:參照Java8的新特性Predicate。這允許開發人員比對HTTP請求中的任何内容,比如頭或參數。3)Filter:可以在發送下遊請求之前或之後修改請求和響應。
Spring Cloud Gateway 工作原理
用戶端向 Spring Cloud Gateway 送出請求。然後在 Gateway Handler Mapping 中找到與請求相比對的路由,将其發送到 Gateway Web Handler。Handler 再通過指定的過濾器鍊來将請求發送到我們實際的服務執行業務邏輯,然後傳回。過濾器之間用虛線分開是因為過濾器可能會在發送代理請求之前(“pre”)或之後(“post”)執行業務邏輯。
Filter在“pre”類型的過濾器可以做參數校驗、權限校驗、流量監控、日志輸出、協定轉換等,在“post”類型的過濾器中可以做響應内容、響應頭的修改,日志的輸出,流量監控等有着非常重要的作用。
核心邏輯就是路由轉發,執行過濾器鍊。
為什麼
我們為什麼選擇Gateway?
一方面因為Zuul已經進入了維護階段,而且Gateway是SpringCloud團隊研發的,是親兒子産品,值得信賴。而且很多功能Zuul都沒有;用起來也非常的簡單便捷。
Gateway是基于異步非阻塞模型上進行開發的,性能方面不需要擔心。雖然Netflix 早就釋出了最新的 Zuul 2.x,但 Spring Cloud 貌似沒有整合計劃。而且Netflix相關元件都宣布進入維護期;不知前景如何?
多方面綜合考慮Gateway是很理想的網關選擇。
總結
今天老顧就先簡單介紹Gateway,下面的文章我們就主要聊下Gateway的基礎路由規則,Filter、熔斷和限流等。謝謝!!!
---End---
最近老顧上傳了微服務網關的分享課程,請大家多多支援