Spring Cloud Zuul 網關簡介

 

Zuul網關原理及其配置

  網關: 是一個網絡整體系統中的前置門戶入口。請求首先通過網關,進行路徑的路由,定位到具體的服務節點上。
  Zuul是一個微服務網關,首先是一個微服務。也是會在Eureka註冊中心中進行服務的註冊和發現。也是一個網關,請求應該通過Zuul來進行路由。

  Zuul網關的作用

  網關有以下幾個作用:
  統一入口:未全部爲服務提供一個唯一的入口,網關起到外部和內部隔離的作用,保障了後臺服務的安全性。
  鑑權校驗:識別每個請求的權限,拒絕不符合要求的請求。
  動態路由:動態的將請求路由到不同的後端集羣中。
  減少客戶端與服務端的耦合:服務可以獨立發展,通過網關層來做映射,簡化客戶端的調用。

在這裏插入圖片描述

  網關全局變量配置

  URL路徑匹配

# ? 單個字符
# * 任意多個字符,不包含多級路徑
# ** 任意多個字符,包含多級路徑
zuul.routes.eureka-application-service.path=/api/**
# url用於配置符合path的請求路徑路由到的服務地址。
zuul.routes.eureka-application-service.url=http://127.0.0.1:8080/

  服務名稱匹配

# 路徑匹配規則
zuul.routes.eureka-application-service.path=/api/**
# serviceId用於配置符合path的請求路徑路由到的服務名稱。
zuul.routes.eureka-application-service.serviceId=eureka-application-service

  路由前綴配置

# 配置請求路徑前綴,所有基於此前綴的請求都由zuul網關提供代理。
zuul.prefix=/api
# 這裏的配置將爲:http://ip:port/api/appservice/**的請求提供zuul網關代理,可以將要訪問服務進行前綴分類。
# 並將請求路由到服務eureka-application-service中。
zuul.routes.eureka-application-service.path=/appservice/**

  路由排除配置

# 配置不被zuul管理的服務列表。多個服務名稱使用逗號','分隔。
zuul.ignored-services=eureka-application-service
# 此方式相當於給所有新發現的服務默認排除zuul網關訪問方式,只有配置了路由網關的服務纔可以通過zuul網關訪
zuul.ignored-services=*
# 使用服務名稱匹配規則配置路由列表,相當於只對已配置的服務提供網關代理。
zuul.routes.eureka-application-service.path=/api/**

# 通配方式配置排除網關代理路徑。所有符合ignored-patterns的請求路徑都不被zuul網關代理。
zuul.ignored-patterns=/**/test/**
zuul.routes.eureka-application-service.path=/api/**

  查看Zuul的路由端點和過濾器信息

  /routes端點

  Zuul 會暴露一個路由管理端點 /routes。藉助這個端點,可以方便、直觀地查看以及管理 Zuul 的路由。

  /fliters端點

  /fliters 端點會返回 Zuul 中所有過濾器的信息。可以清楚地瞭解 Zuul 中目前有哪些過濾器,哪些過濾器被禁用了等詳細信息

  Zuul網關過濾器

  Zuul中提供了過濾器定義,可以用來過濾代理請求,提供額外功能邏輯。如:權限驗證,日誌記錄等。
  Zuul提供的過濾器是一個父類。父類是ZuulFilter。通過父類中定義的抽象方法filterType,來決定當前的Filter種類是什麼。有以下過濾類型。
  pre-前置過濾:是請求進入Zuul之後,立刻執行的過濾邏輯。
  route - 路由後過濾:是請求進入Zuul之後,並Zuul實現了請求路由後執行的過濾邏輯,路由後過濾,是在遠程服務調用之前過濾的邏輯。
  post -後置過濾:遠程服務調用結束後執行的過濾邏輯。
  error -異常過濾:是任意一個過濾器發生異常或遠程服務調用無結果反饋的時候執行的過濾邏輯。無結果反饋,就是遠程服務調用超時。

  過濾器實現方式

  繼承父類ZuulFilter。在父類中提供了4個抽象方法,分別是:filterType, filterOrder, shouldFilter, run。其功能分別是:
  filterType:方法返回字符串數據,代表當前過濾器的類型。可選值有-pre, route, post, error。
  filterOrder:返回int數據,用於爲同filterType的多個過濾器定製執行順序,返回值越小,執行順序越優先。
  shouldFilter:返回boolean數據,代表當前filter是否生效。
  run:具體的過濾執行邏輯。

Zuul網關的容錯(與Hystrix的無縫結合)

  Zuul中的服務降級處理

  zuul的服務降級顆粒度是微服務級別,不是具體的API級別。
  Zuul的fallback容錯處理邏輯,只針對timeout異常處理,當請求被Zuul路由後,只要服務有返回(包括異常),都不會觸發Zuul的fallback容錯邏輯。因爲對於Zuul網關來說,做請求路由分發的時候,結果由遠程服務運算的。那麼遠程服務反饋了異常信息,Zuul網關不會處理異常,因爲無法確定這個錯誤是否是應用真實想要反饋給客戶端的。

  Zuul網關的限流保護

  Zuul網關組件也提供了限流保護。當請求併發達到閥值,自動觸發限流保護,返回錯誤結果。只要提供error錯誤處理機制即可。
  Zuul的限流保護需要額外依賴spring-cloud-zuul-ratelimit組件。

  zuul.ratelimit.policies 限流策略

  limit 每個週期內請求次數
  quota 單位時間內允許訪問的總時間
  refresh-interval 週期時間
  type 限流方式 :USER 根據用戶;ORIGIN 原始請求(IP);URL 請求地址;

  全侷限流

#全局配置限流
zuul.ratelimit.enabled=true
##60s 內請求超過 3 次,服務端就拋出異常,60s 後可以恢復正常請求
zuul.ratelimit.default-policy.limit=3
zuul.ratelimit.default-policy.refresh-interval=60
##針對 IP 進行限流,不影響其他 IP
zuul.ratelimit.default-policy.type=origin

以上配置針對每一個服務都有效果

  局部限流

# 局部限流:針對某個服務進行限流
##開啓限流
zuul.ratelimit.enabled=true
##60s 內請求超過 3 次,服務端就拋出異常,60s 後可以恢復正常請求
zuul.ratelimit.policies.e-book-product.limit=3
zuul.ratelimit.policies.e-book-product.refresh-interval=60
##針對某個 IP 進行限流,不影響其他 IP
zuul.ratelimit.policies.e-book-product.type=origin

以上配置只針對e-book-product的服務一分鐘內最多訪問3次,超過就會限流,對其他服務就沒有影響。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章