SpringCloud學習二-網關技術選型

什麼是網關?

Eureka用於服務的註冊和發現,在發現服務後外部的客戶端請求如何訪問到服務呢?在微服務中,後端服務一般不會直接對外開放,而是通過一個API網關根據請求的url路由到對應的服務中去。就像家裏的路由器一樣在服務和客戶端之間作爲中轉,來保護內部的服務,也可以將請求進行負載均衡。

網關的基本功能如下:
網關基本功能.png

技術選型

網關相當於微服務世界的大門,可以說是微服務中的核心組件,那麼網關的選擇又有哪些呢?

Gateway VS Zuul

Spring Cloud Gateway 是 Spring Cloud 微服務平臺的一個子項目,屬於 Spring 開源社區,依賴名叫:spring-cloud-starter-gateway。
https://spring.io/projects/spring-cloud-gateway

Zuul 是 Netflix 公司的開源項目,Spring Cloud 在 Netflix 項目中也已經集成了 Zuul,依賴名叫:spring-cloud-starter-netflix-zuul。
https://link.zhihu.com/?target=https%3A//github.com/Netflix/zuul

功能點:

身份認證和安全: 識別每一個資源的驗證要求,並拒絕那些不符的請求
審查與監控:在邊緣位置追蹤有意義的數據和統計結果,從而帶來精確的生產視圖。
動態路由:動態將請求路由到不同後端集羣
壓力測試:逐漸增加指向集羣的流量,以瞭解性能
負載分配:爲每一種負載類型分配對應容量,並棄用超出限定值的請求
靜態響應處理:邊緣位置進行響應,避免轉發到內部集羣
多區域彈性:跨域AWS Region進行請求路由,旨在實現ELB(ElasticLoad Balancing)使用多樣化

對比:
Zuul構建於 Servlet 2.5,兼容 3.x,使用的是阻塞式的 API,不支持長連接,比如 websockets。(替代方案:Zuul 支持websockets方案

Spring Cloud Gateway構建於 Spring 5+,基於 Spring Boot 2.x 響應式的、非阻塞式的 API。同時,它支持 websockets,和 Spring 框架緊密集成,開發體驗相對來說十分不錯。(在後續開發中發現因其基於webflux 整合shiro時與Servlet整合方式不一致,此處需注意)

如何選擇?

Netflix 早就發佈了最新的 Zuul 2.x,但 Spring Cloud一直沒有整合計劃,在此場景下spring推出了自己的服務網關Spring Cloud Gateway,作爲親兒子在後續版本的更新上比較zuul應該是更有優勢的。

網關過濾器

過濾器可以說是網關的核心組件了,其中過濾器主要的過濾類型有如下幾種。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-GLj1y0W9-1570548799230)(https://i.loli.net/2019/10/08/zHYMpFs4xhuZPVG.png)]

Zuul過濾器配置

filterType:返回一個字符串代表過濾器的類型,在zuul中定義了四種不同生命週期的過濾器類型,具體如下:
pre:路由之前
routing:路由之時
post: 路由之後
error:發送錯誤調用
filterOrder:過濾的順序
shouldFilter:這裏可以寫邏輯判斷,是否要過濾,本文true,永遠過濾。
run:過濾器的具體邏輯。可用很複雜,包括查sql,nosql去判斷該請求到底有沒有權限訪問。
原文鏈接:https://blog.csdn.net/forezp/article/details/81041012

GateWay過濾器配置

GateWay的過濾器類型沒有Zuul豐富,只有pre 和 post 兩種tilter方式.
客戶端的請求先經過“pre”類型的filter,然後將請求轉發到具體的業務服務,收到業務服務響應後,在經過“post” 類型filter處理,返回給客戶端。

與Zuul不同的地方是,GateWay的filter除了單個路由的filter外還有針對所有路由的global GateWay filter。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章