zuul 是netflix開源的一個API Gateway 服務器, 本質上是一個web servlet應用html
須要JAVA Spring Cloud大型企業分佈式微服務雲構建的B2B2C電子商務平臺源碼 一零三八七七四六二六java
zuul過濾器機制web
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還容許咱們建立自定義的過濾器類型。
例如,咱們能夠定製一種STATIC類型的過濾器,直接在Zuul中生成響應,而不將請求轉發到後端的微服務。
zuul 能作什麼?
Zuul能夠經過加載動態過濾機制,從而實現如下各項功能:
驗證與安全保障: 識別面向各種資源的驗證要求並拒絕那些與要求不符的請求。
審查與監控: 在邊緣位置追蹤有意義數據及統計結果,從而爲咱們帶來準確的生產狀態結論。
動態路由: 以動態方式根據須要將請求路由至不一樣後端集羣處。
壓力測試: 逐漸增長指向集羣的負載流量,從而計算性能水平。
負載分配: 爲每一種負載類型分配對應容量,並棄用超出限定值的請求。
靜態響應處理: 在邊緣位置直接創建部分響應,從而避免其流入內部集羣。
多區域彈性: 跨越AWS區域進行請求路由,旨在實現ELB使用多樣化並保證邊緣位置與使用者儘量接近。