SpringCloud微服務項目實戰 - 網關zuul詳解及搭建


上一篇介紹了服務的調用,這篇接着之前的話題,來說說SpringCloud中zuul的使用及搭建網關的那點事。

首先,我們要知道什么是網關
網關,是一個系統中前置的統一入口,介於客戶端和服務器端之間的中間層,主要用來處理非業務功能,提供路由請求、鑒權、監控、緩存、限流等功能。客戶端發起的請求首先通過網關,進行非業務功能處理,在根據路徑的路由,定位到具體的服務節點上。

同時系統使用服務路由的功能,可以在對外提供服務時,只暴露網關中配置的調用地址,而調用方就不需要了解后端具體的微服務主機。可以有效的保護真實的服務地址信息。Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka注冊中心中進行服務的注冊和發現。也是一個網關,請求應該通過Zuul來進行路由。Zuul網關不是必要的。是推薦使用的。SpringCloud zuul的相關介紹

1,為什么要使用微服務網關?

不同的微服務一般會有不同的網絡地址,而客戶端可能需要調用多個服務接口才能完成一個業務需求,若讓客戶端直接與各個微服務通信,會有以下問題:

    1)客戶端會多次請求不同微服務,增加了客戶端復雜性;

    2)存在跨域請求,處理相對復雜;

    3)認證復雜,每個服務都需要獨立認證;

    4)難以重構,多個服務可能將會合並成一個或拆分成多個;

2,使用網關的優缺點?

優點:

  1. 所有的外部請求先經過微服務網關進行交互,無需調用特定微服務接口,簡化了開發;

  2. 服務網關=路由轉發+過濾器

  • 路由轉發:接收請求,轉發到后端的微服務上;

  • 過濾器:可在服務網關中可以完成一系列的橫切功能(權限校驗)

缺點:增加了網關,多了一層轉發,服務性能會下降;

3,使用zuul 的作用?Zuul可以通過加載動態過濾機制,從而實現以下各項功能:

  • 驗證與安全保障: 識別面向各類資源的驗證要求並拒絕那些與要求不符的請求。
  • 審查與監控: 在邊緣位置追蹤有意義數據及統計結果,從而為我們帶來准確的生產狀態結論。
  • 動態路由: 以動態方式根據需要將請求路由至不同后端集群處。
  • 壓力測試: 逐漸增加指向集群的負載流量,從而計算性能水平。
  • 負載分配: 為每一種負載類型分配對應容量,並棄用超出限定值的請求。
  • 靜態響應處理: 在邊緣位置直接建立部分響應,從而避免其流入內部集群。
  • 多區域彈性: 跨越AWS區域進行請求路由,旨在實現ELB使用多樣化並保證邊緣位置與使用者盡可能接近。

4,zuul的工作原理?

zuul的核心是一系列的filters, 其作用可以類比Servlet框架的Filter,或者AOP。zuul把Request route到 用戶處理邏輯 的過程中,這些filter參與一些過濾處理,比如Authentication,Load Shedding等。 

Zuul提供了一個框架,可以對過濾器進行動態的加載,編譯,運行。

Zuul的過濾器之間沒有直接的相互通信,他們之間通過一個RequestContext的靜態類來進行數據傳遞的。RequestContext類中有ThreadLocal變量來記錄每個Request所需要傳遞的數據。

Zuul的過濾器是由Groovy寫成,這些過濾器文件被放在Zuul Server上的特定目錄下面,Zuul會定期輪詢這些目錄,修改過的過濾器會動態的加載到Zuul Server中以便過濾請求使用。

下面有幾種標准的過濾器類型:

Zuul大部分功能都是通過過濾器來實現的。Zuul中定義了四種標准過濾器類型,這些過濾器類型對應於請求的典型生命周期。

    1) PRE:這種過濾器在請求被路由之前調用。我們可利用這種過濾器實現身份驗證、在集群中選擇請求的微服務、記錄調試信息等。

    2) ROUTING 務。這種過濾器用於構建發送給微服務的請求,並使用Apache HttpClient或Netfilx Ribbon請求微服務。

    3) POST:這種過濾器在路由到微服務以后執行。這種過濾器可用來為響應添加標准的HTTP Header、收集統計信息和指標、將響應從微服務發送給客戶端等。

    4) ERROR:在其他階段發生錯誤時執行該過濾器。

內置的特殊過濾器

zuul還提供了一類特殊過濾器,分別為:StaticResponseFilter和SurgicalDebugFilter;

  • StaticResponseFilter:StaticResponseFilter允許從Zuul本身生成響應,而不是將請求轉發到源。

  • SurgicalDebugFilter:SurgicalDebugFilter允許將特定請求路由到分隔的調試集群或主機。

自定義的過濾器

除了默認的過濾器類型,Zuul還允許我們創建自定義的過濾器類型。

5,Zuul和Nginx的區別相同點:Zuul和Nginx都可以實現負載均衡、反向代理(隱藏真實ip地址),過濾請求,實現網關的效果不同點:

  • Nginx–c語言開發

  • Zuul–java語言開發

  • Zuul負載均衡實現:采用ribbon+eureka實現本地負載均衡

  • Nginx負載均衡實現:采用服務器實現負載均衡

  • Nginx相比zuul功能會更加強大,因為Nginx整合一些腳本語言(Nginx+lua)

  • Nginx適合於服務器端負載均衡

  • Zuul適合微服務中實現網關

Zuul服務搭建

我們先在父級項目里引入zuul的依賴服務

再創建Zuul微服務模塊,並添加pom依賴如下:

添加yml配置:

然后添加啟動類:

啟動所有服務:

測試:

推薦閱讀:SpringCloud微服務項目實戰 - 微服務調用詳解(附面試題)

SpringCloud微服務項目實戰,服務注冊與發現(附面試題)

Spring Cloud微服務項目實戰--Eureka服務搭建

 

掃碼關注公眾號,發送關鍵詞獲取相關資料:

  1. 發“Springboot”領取電商項目實戰源碼;

  2. 發“SpringCloud”領取學習實戰資料;

  3. 發“SpringCloud實戰”領取SpringCloud實戰源碼;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM