導
語
閘道器是微服務架構的重要組成部分,有著不可或缺的功能。
引入
在沒有使用閘道器的時候,我們的微服務架構應該是這樣的,使用者通過nginx進入a服務,a服務對b、c、d都要進行呼叫,大家認為這樣的服務設計有沒有問題呢?
**冗餘:在a服務對其他服務進行呼叫的時候,我們需要對每乙個服務進行許可權控制,這不僅造成了**的冗餘,更增加了校驗邏輯的難度,如果有一天我們發現校驗邏輯有bug,或者需要優化某一服務,那麼改動是十分龐大的。
破壞了服務的無狀態性:眾所周知,http協議是無狀態性的,而服務的許可權控制貫穿了整個訪問過程,這也不符合服務集群中rest api無狀態的特點
維護困難:由於需要對服務之間進行呼叫和分發,運維人員需要手動維護不同的服務例項,在服務過多時很容易造成失誤。
因此,我們更加迫切需要乙個微服務元件,將這些功能抽離出來,微服務閘道器也就應運而生了。
實現抽象的閘道器
閘道器僅是乙個抽象概念,spring就為我們提供了一款元件——zuul閘道器,讓我們看看加入zuul後的微服務架構:
總結閘道器的作用
①:輕便的許可權認證:在閘道器即可進行一系列的許可權控制,避免了不必要的冗餘。
②:易於監控和限流:當訪問量突增時,對閘道器進行限流操作即可避免伺服器宕機,同時也能統計訪問資料,對其他服務進行負載均衡分析
③:統一解決跨域問題:在閘道器通過注入corsfilter避免服務遭遇跨域問題。
④:動態路由:極簡配置即可實現服務分發。
⑤:符合http協議無狀態的特點:無須在每乙個微服務都進行許可權校驗 避免了許可權校驗過程貫穿整個請求。
閘道器的***
zuulfilter有四種過濾器型別:
1.pre:請求在被路由之前執行
2.route:在路由請求時呼叫
3.post:在響應之前呼叫
4.error:處理請求時發生錯誤呼叫
我們所說的許可權認證一般應用於前置過濾器(pre型別)
**實現過濾器
@componentpublic class loginfilter extends zuulfilter //數值越大表示過濾器的優先順序越低 @override public int filterorder() @override public boolean shouldfilter() @override public object run() throws zuulexception } // 過濾該請求,不進行路由 context.setsendzuulresponse(false); // 設定響應狀態碼 context.setresponsestatuscode(httpstatus.sc_unauthorized); }}
由於token的生成過程較為複雜,上述**僅作簡單演示。
the end
微服務元件
好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受.微服務可謂是當下最火爆的企業級開發應用模式,那麼具體都要用到哪些技術吶,概括如下圖所示 當下最新的微服務元件,無出其右,基本就是這些。熟悉這些體系中的各個元件,對於微服務的實踐有很重要的指導作用。其中 最主要關注的是 ...
微服務閘道器zuul
1 什麼是閘道器 api gateway,是系統的唯一對外的入口,介於客戶端和伺服器端之間的中間層,處理非業務功能 提供路由請求 鑑權 監控 快取 限流等功能 統一接入 智慧型路由 ab測試 灰度測試 負載均衡 容災處理 日誌埋點 類似nignx日誌 流量監控 限流處理 服務降級 安全防護 鑑權處理...
微服務閘道器 Zuul
該部落格所有的文章都是自己的學習記錄,方便後續複習,達到快速回顧知識點的作用。zuul作為springcloud的路由閘道器元件,再微服務架構中有非常重要的作用,主要體現在以下幾個方面 智慧型路由和負載均衡 zuul可以和ribbon,eureka結合,將請求流量分發到對應的服務例項。將所有服務的a...