天天看點

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

本文主要内容是:為什麼要使用網關,整合Gateway,Gateway核心學習:Route,Predicate,Filter,最後使用Gateway聚合微服務請求

先總結至此的架構

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

1 網關的價值

不使用網關行嘛?

  • 各個請求直接打在各個微服務
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

小規模看起來還行,如果微服務很多呢?上百個呢?帶來哪些問題呢

  1. 認證複雜,要對每個服務中每個接口做認證處理!
  2. 用戶端難以重構,随着架構疊代,很可能要重新劃分微服務,由于拆分是動态進行的,用戶端如果直接就與微服務通信的話,重構就很實作咯,很可能重新拆分微服務後域名都變了,用戶端就需要做大量的改動
  3. 其他微服務使用了浏覽器不友好的協定,比如Thrift協定,直接通路的話沒法的呀!

要解決以上這些問題,業界普遍做法就是建構一個網關,外部請求經過網關轉發再打到相應的微服務,有以下好處

  1. 簡化了登入認證,而不需在每個服務都認證一遍
  2. 對外暴露的永遠是一個域名,不管内部的微服務如何拆分,域名都不會變,用戶端重構的成本大大降低

2 Spring Cloud Gateway簡介

◆ 是Spring Cloud的網關(第二代) , 未來會取代Zuul(第一代)

◆ 基于Netty、 Reactor以及WebFlux建構

2.1 優點

◆ 性能強勁

是第一代網關Zuul 1.x的1.6倍!性能PK :

  • 推薦閱讀

糾錯帖:Zuul & Spring Cloud Gateway & Linkerd性能對比

◆ 功能強大

  • 内置了很多實用功能,比如轉發、監控、限流等

◆ 設計優雅,易擴充

2.1 缺點

◆ 依賴Netty與Webflux ,不是Servlet程式設計模型,有一定的學習成本

◆ 不能在Servlet容器下工作,也不能建構成WAR包

◆ 不支援Spring Boot 1.x,至少都得2.x版本

3 編寫Spring Cloud Gateway

  • 建立項目并啟動
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

3.1 轉發規律

  • 通路${GATEWAY_ URL}/{微服務X}/xx 會轉發到微服務X的/xx路徑

4 核心概念

◆ Route(路由)

  • Spring. Cloud. Gateway的基礎元素,可簡單了解成一條轉發的規則。

包含: ID、目标URL、Predicate集合以及 Filter集合。

◆Predicate (謂詞)

  • 即java.util.function.Predicate , Spring Cloud Gateway使用

Predicate實作路由的比對條件。

◆ Filter (過濾器)

  • 修改請求以及響應

路由配置示例

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

然而我們并未如此配置路由哦!而是如下

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

5 架構剖析

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

對應源碼

  • Gateway Handler Mapping :

org.springframework.cloud.gateway.handler.RoutePredicateHandlerMapping

  • Gateway Web Handler :

org.springframework.cloud.gateway.handler.FilteringWebHandler

6 路由謂詞工廠(Route Predicate Factories)

6.1 内置

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 推薦閱讀

Spring Cloud Gateway-路由謂詞工廠詳解(Route Predicate Factories)

6.2 自定義路由謂詞工廠

  • 路由規則
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 配置類
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 自定義謂詞工廠
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

7 過濾器工廠(GatewayFilter Factories)

7.1 内置

  • 推薦閱讀

Spring Cloud Gateway-過濾器工廠詳解(GatewayFilter Factories)

  • 添加配置,通路getway/**會增加一個header字首哦,zai’ch
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 打斷點
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

7.2 自定義過濾器工廠

7.2.1 生命周期

  • pre : Gateway轉發請求之前
  • post : Gateway轉發請求之後

7.2.2 自定義

方式1

◆ 繼承: AbstractGatewayFilterFactory

◆ 參考示例:

org.springframework.cloud.gateway.filter.factory.RequestSizeGatewayFilterFactory

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 配置形式
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

方式2

◆ 繼承 : AbstractNameValueGatewayFilterFactory

◆ 參考示例:

org.springframework.cloud.gateway.filter.factory.AddRequestHeaderGatewayFilterFactory

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 配置形式
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

這種方式其實是第一種的簡化版

7.2.3 核心API

◆ exchange.getRequest().mutate().xxx //修改request

◆ exchange.mutate().xxx //修改exchange

◆ chain.filter(exchange) //傳遞給下一個過濾器處理

◆ exchange.getResponse() //拿到響應

7.2.4 實作一個過濾器工廠

記錄日志功能

微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 配置檔案,兩個參數
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

7.3 全局過濾器

有執行順序哦!

  • 推薦閱讀

Spring Cloud Gateway-全局過濾器(Global Filters)

懸念:如何為Spring Cloud Gateway整合Sentinel?

Sentinel在V1.6+才支援gateway!

7.4 過濾器執行順序

  • Order越小越靠前執行
  • 過濾器工廠的Order按配置順序從1開始遞增
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • 如果配置了預設過濾器,則先執行相同Order的預設過濾器
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

核心代碼

  • org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#loadGatewayFilters :為過濾器設定了Order數值,從1開始
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters :加載預設過濾器&路由過濾器,并對過濾器做了排序
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考
  • org.springframework.cloud.gateway.handler. FilteringWebHandler#handle :建構過濾器鍊并執行
微服務網關實踐 Spring Cloud Alibaba GateWay1 網關的價值2 Spring Cloud Gateway簡介3 編寫Spring Cloud Gateway4 核心概念5 架構剖析6 路由謂詞工廠(Route Predicate Factories)7 過濾器工廠(GatewayFilter Factories)8 監控Spring Cloud Gateway9 排錯、調試技巧10 限流11 總結 參考

8 監控Spring Cloud Gateway

  • 推薦閱讀

Spring Cloud Gateway監控

9 排錯、調試技巧

  • 推薦閱讀

Spring Cloud Gateway排錯、調試技巧總結

10 限流

  • 推薦閱讀

Spring Cloud Gateway限流詳解

11 總結

◆ 路由、路由謂詞工廠、過濾器工廠、全局過濾器…

◆ 網關集大成

● 注冊到Nacos

● 內建Ribbon

● 容錯(預設Hystrix ,也可用Sentinel )

參考

  • GateWay官方文檔
  • 面向未來微服務:Spring Cloud Alibaba從入門到進階

繼續閱讀