在學習了spring cloud的Eureka註冊服務,Ribbon客戶端負載均衡,Hystrix斷路器,已經聲明式服務調用Feign後,咱們如今理解微服務的架構以下圖所示java
在整個系統架構對外提供服務時,當客戶端應用單擊某個功能的時候每每會發出一些對微服務獲取資源的請求到後端,這些請求經過FS、 Nginx等設施的路由和負載均衡分配後, 被轉發到各個不一樣的服務實例上。 而爲了讓這些設施可以正確路由與分發請求, 運維人員須要手工維護這些路由規則與服務實例列表, 當有實例增減或是IP地址變更等狀況發生的時候, 也須要手工地去同步修改這些信息以保持實例信息與中間件配置內容的一致性。隨着系統規模愈來愈大,人工作這件事會愈來愈複雜,錯誤率也會愈來愈高。因此咱們須要一套機制來有效下降維護路由規則與服務實例列表的難度。spring
咱們在服務端實現的微服務接口, 每每都會有必定的權限校驗機制, 好比對用戶登陸狀態的校驗等; 同時爲了防止客戶端在發起請求時被篡改等安全方面的考慮, 還會有一些簽名校驗的機制存在。 這時候, 由千使用了微服務架構的理念, 咱們將本來處千一個應用中的多個模塊拆成了多個應用, 可是這些應用提供的接口都須要這些校驗邏輯, 咱們不得不在這些應用中都實現這樣一套校驗邏輯。 隨着微服務規模的擴大, 這些校驗輯的冗餘變得愈來愈多, 忽然有一天咱們發現這套校驗邏輯有個BUG須要修復,或者須要對其作一些擴展和優化,此時咱們就不得不去每一個應用裏修改這些邏輯, 而這樣的修改不只會引發開發入員的抱怨, 更會加劇測試人員的負擔。 因此, 咱們也須要一套機制可以很好地解決微服務架構中, 對於微服務接口訪問時各前置校驗的冗餘問題。後端
爲了解決上面這些常見的架構問題,API網關的概念應運而生。API網關是一個更爲智能的應用服務器, 它的定義相似於面向對象設計模式中的Facade模式, 它的存在就像是整個微服務架構系統的門面同樣,全部的外部客戶端訪問都須要通過它來進行調度和過濾。它除了要實現請求路由、 負載均衡、 校驗過濾等功能以外, 還須要更多能力, 好比與服務治理框架的結合、 請求轉發時的熔斷機制、 服務的聚合等一系列高級功能。設計模式
傳統開發方式,全部的服務都是本地的,UI能夠直接調用,如今功能拆分紅獨立的服務,跑在獨立的虛擬機上的java進程了。客戶端如何訪問他呢?跨域
後臺有N個服務,前臺就須要記住管理N個服務,一個服務下線/更新/升級,前臺就要從新部署,這明顯不符合咱們拆分的理念。微服務在系統內部一般無狀態,用戶登陸信息和權限管理最後有個統一的地方維護管理(OAuth)。安全
不一樣的微服務有不一樣的網絡地址,而外部的客戶端可能要調用多個服務的接口才能完成一個業務需求。好比一個電影購票可能調用用戶微服務,電影微服務等,若是客戶端直接和微服務通訊,會存在以下常見問題:服務器
客戶端屢次請求不一樣微服務,增長客戶端的複雜性網絡
跨域問題,必定場景下處理相對複雜架構
認證複雜,每一個服務都要獨立認證app
難重構,隨着項目迭代,可能需從新劃分微服務,重構難以實施
某些微服務可能使用了其餘協議,直接訪問會有問題
以上問題能夠藉助微服務網關API Gateway來解決,微服務網關介於客戶端和服務器端之間,全部的外部請求都會先通過微服務網關:
這樣客戶端只需和網關交互,無需直接調用特定微服務的接口,方便監控,易於認證,減小客戶端和各微服務間的交互。
提供統一服務入口,微服務對前臺透明
聚合後臺服務,節省流量,提高性能
安全,過濾,流控等API管理功能
提供統一服務出口,解耦
PRE:請求路由以前調
ROUTING:路由到微服務
POST:路由到微服務以後
ERROR:其餘階段發生錯誤後執行
除了默認的過濾器類型,Zuul還容許建立自定義的過濾器類型。
經過將多個zuul節點註冊到Eureka Server實現高可用。存在如下兩種狀況:
Zuul客戶端自動從Eureka Server查詢Zuul Server列表,並用Ribbon負載均衡請求Zuul集羣。
微服務可能被其餘微服務調用,也可能直接被終端app調用,這種狀況,咱們須要藉助額外的負載均衡器來實現Zuul的高可用,好比Nginx等。
許多場景下,一個外部請求,可能要查詢後端多個微服務。好比一個電影售票系統,在購票訂單頁上,須要查電影微服務,還有用戶微服務,若是讓系統直接請求各個微服務,就算使用Zuul轉發,網絡開銷、流量耗費、時長都不是很好,這時咱們就可使用Zuul聚合微服務請求,即應用系統值發送一個請求給Zuul,由Zuul請求用戶微服務和電影微服務,並把數據返給應用系統。
https://blog.csdn.net/chengqiuming/article/details/80860981 https://blog.csdn.net/zhanglh046/article/details/78651993/