上一篇介紹了服務的調用,這篇接著之前的話題才菠,來說說SpringCloud中zuul的使用及搭建網(wǎng)關的那點事。
首先贡定,我們要知道什么是網(wǎng)關赋访? 網(wǎng)關,是一個系統(tǒng)中前置的統(tǒng)一入口,介于客戶端和服務器端之間的中間層蚓耽,主要用來處理非業(yè)務功能渠牲,提供路由請求、鑒權步悠、監(jiān)控签杈、緩存、限流等功能鼎兽〈鹄眩客戶端發(fā)起的請求首先通過網(wǎng)關,進行非業(yè)務功能處理谚咬,在根據(jù)路徑的路由鹦付,定位到具體的服務節(jié)點上。
1,為什么要使用微服務網(wǎng)關撵幽?
不同的微服務一般會有不同的網(wǎng)絡地址灯荧,而客戶端可能需要調用多個服務接口才能完成一個業(yè)務需求,若讓客戶端直接與各個微服務通信盐杂,會有以下問題:
1)客戶端會多次請求不同微服務逗载,增加了客戶端復雜性;
2)存在跨域請求链烈,處理相對復雜厉斟;
3)認證復雜,每個服務都需要獨立認證强衡;
4)難以重構擦秽,多個服務可能將會合并成一個或拆分成多個;
2,使用網(wǎng)關的優(yōu)缺點感挥?
優(yōu)點:
所有的外部請求先經(jīng)過微服務網(wǎng)關進行交互缩搅,無需調用特定微服務接口,簡化了開發(fā);
服務網(wǎng)關=路由轉發(fā)+過濾器
路由轉發(fā):接收請求,轉發(fā)到后端的微服務上;
過濾器:可在服務網(wǎng)關中可以完成一系列的橫切功能(權限校驗)
缺點:增加了網(wǎng)關,多了一層轉發(fā)链快,服務性能會下降;
3誉己,使用zuul 的作用?Zuul可以通過加載動態(tài)過濾機制域蜗,從而實現(xiàn)以下各項功能:
- 驗證與安全保障: 識別面向各類資源的驗證要求并拒絕那些與要求不符的請求巨双。
- 審查與監(jiān)控: 在邊緣位置追蹤有意義數(shù)據(jù)及統(tǒng)計結果,從而為我們帶來準確的生產(chǎn)狀態(tài)結論霉祸。
- 動態(tài)路由: 以動態(tài)方式根據(jù)需要將請求路由至不同后端集群處筑累。
- 壓力測試: 逐漸增加指向集群的負載流量狮荔,從而計算性能水平颤枪。
- 負載分配: 為每一種負載類型分配對應容量,并棄用超出限定值的請求余素。
- 靜態(tài)響應處理: 在邊緣位置直接建立部分響應奔穿,從而避免其流入內部集群镜沽。
- 多區(qū)域彈性: 跨越AWS區(qū)域進行請求路由,旨在實現(xiàn)ELB使用多樣化并保證邊緣位置與使用者盡可能接近贱田。
4缅茉,zuul的工作原理?
zuul的核心是一系列的filters, 其作用可以類比Servlet框架的Filter男摧,或者AOP蔬墩。zuul把Request route到 用戶處理邏輯 的過程中,這些filter參與一些過濾處理耗拓,比如Authentication拇颅,Load Shedding等。
Zuul提供了一個框架乔询,可以對過濾器進行動態(tài)的加載樟插,編譯,運行竿刁。
Zuul的過濾器之間沒有直接的相互通信岸夯,他們之間通過一個RequestContext的靜態(tài)類來進行數(shù)據(jù)傳遞的。RequestContext類中有ThreadLocal變量來記錄每個Request所需要傳遞的數(shù)據(jù)们妥。
Zuul的過濾器是由Groovy寫成猜扮,這些過濾器文件被放在Zuul Server上的特定目錄下面,Zuul會定期輪詢這些目錄监婶,修改過的過濾器會動態(tài)的加載到Zuul Server中以便過濾請求使用旅赢。
下面有幾種標準的過濾器類型:
Zuul大部分功能都是通過過濾器來實現(xiàn)的齿桃。Zuul中定義了四種標準過濾器類型,這些過濾器類型對應于請求的典型生命周期煮盼。
1) PRE:這種過濾器在請求被路由之前調用短纵。我們可利用這種過濾器實現(xiàn)身份驗證、在集群中選擇請求的微服務僵控、記錄調試信息等香到。
2) ROUTING 務。這種過濾器用于構建發(fā)送給微服務的請求报破,并使用Apache HttpClient或Netfilx Ribbon請求微服務悠就。
3) POST:這種過濾器在路由到微服務以后執(zhí)行。這種過濾器可用來為響應添加標準的HTTP Header充易、收集統(tǒng)計信息和指標梗脾、將響應從微服務發(fā)送給客戶端等。
4) ERROR:在其他階段發(fā)生錯誤時執(zhí)行該過濾器盹靴。
內置的特殊過濾器
zuul還提供了一類特殊過濾器炸茧,分別為:StaticResponseFilter和SurgicalDebugFilter;
StaticResponseFilter:StaticResponseFilter允許從Zuul本身生成響應稿静,而不是將請求轉發(fā)到源梭冠。
SurgicalDebugFilter:SurgicalDebugFilter允許將特定請求路由到分隔的調試集群或主機。
自定義的過濾器
除了默認的過濾器類型改备,Zuul還允許我們創(chuàng)建自定義的過濾器類型控漠。
5,Zuul和Nginx的區(qū)別相同點:Zuul和Nginx都可以實現(xiàn)負載均衡绍妨、反向代理(隱藏真實ip地址),過濾請求柬脸,實現(xiàn)網(wǎng)關的效果不同點:
Nginx–c語言開發(fā)
Zuul–java語言開發(fā)
Zuul負載均衡實現(xiàn):采用ribbon+eureka實現(xiàn)本地負載均衡
Nginx負載均衡實現(xiàn):采用服務器實現(xiàn)負載均衡
Nginx相比zuul功能會更加強大他去,因為Nginx整合一些腳本語言(Nginx+lua)
Nginx適合于服務器端負載均衡
Zuul適合微服務中實現(xiàn)網(wǎng)關
Zuul服務搭建
我們先在父級項目里引入zuul的依賴服務
再創(chuàng)建Zuul微服務模塊,并添加pom依賴如下:
添加yml配置:
然后添加啟動類:
啟動所有服務:
測試:
推薦閱讀:
SpringCloud微服務項目實戰(zhàn)?-?微服務調用詳解(附面試題)
SpringCloud微服務項目實戰(zhàn)倒堕,服務注冊與發(fā)現(xiàn)(附面試題)
Spring Cloud微服務項目實戰(zhàn)--Eureka服務搭建
掃碼關注公眾號灾测,發(fā)送關鍵詞獲取相關資料:
發(fā)“Springboot”領取電商項目實戰(zhàn)源碼;
發(fā)“SpringCloud”領取學習實戰(zhàn)資料;