當前位置:
首頁 > 最新 > 微服務架構 Zuul網關路由管理實踐

微服務架構 Zuul網關路由管理實踐

介紹

網關的核心功能之一是路由轉發,為此,網關需要獲取並維護一張路由表,這個路由表簡單可以理解為一個服務名服務地址的映射表,有了這張路由表,網關就可以根據請求路徑或者HTTP頭中的服務信息,將請求轉發到對應的目標服務地址。

Zuul[附錄1]是Netflix開源的微服務網關,在Netflix經過大規模生產級驗證,最新的數據表明Netflix每天有近千億級流量要經過Zuul網關。另外,Zuul也是Spring Cloud全家桶的核心組件。本文介紹Zuul網關路由管理的一些常用方案,可供準備在生產環境使用Zuul的企業參考。


這個也是Netflix的做法,Zuul網關藉助Eureka[附錄2]服務註冊中心獲取路由表,簡述步驟如下:

內部微服務(前端聚合服務或者後台基礎服務)啟動時,自動註冊到Eureka服務註冊中心,並定期向註冊中心報心跳,表明自己的存活狀態。例如,上圖中,svcx在Eureka上有一組對應的ip:port對,表示svc服務對應的存活服務實例地址列表。

Zuul網關集成Ribbon[附錄3]客戶端,Ribbon能夠從Eureka上自動發現並定期獲取服務的實例地址信息,並進行本地緩存。

當Zuul網關接收到外部請求,它根據某種規則從請求中獲取服務名,例如,假設第一級path就是服務名,那麼api.xxx.com/svcx中的svcx就是服務名。解析獲取服務名後,Zuul將服務名傳給Ribbon,Ribbon通過查找緩存的路由表獲取服務實例地址列表,再根據某種路由策略(例如,隨機或者RoundRobin等),選擇一個目標實例地址發起調用。

該方法相對簡單,部署Eureka服務註冊中心即可實現。同時也比較靈活,內部服務可以自註冊自發現,研發人員可以自助完成服務上下線,更貼合DevOps研發模式,不太需要運維配合介入。

該方案的問題是,目前很多企業內部還有很多歷史遺留服務,這些服務基本上還是基於傳統域名進行管理的,如果升級到Eureka的自註冊自發現方式,遷移和改造成本不小。


對於內部遺留系統較多,服務主要基於傳統域名方式管理,暫時還不具備條件採用上述第一種方案的企業,可以採用基於服務治理中心+域名的做法,如上圖所示。

該方案需要開發一套服務治理中心,用來集中管理路由等服務元數據信息,同時企業內部需要DNS域名服務支持。採用該方案的流程簡述如下:

研發人員通過運維申請部署服務所需的機器,ip和內部域名等相關信息,完成服務開發和部署,通過內部域名測試服務正常。

研發人員通過服務治理中心註冊服務,提供相應的服務名和域名信息,也提供一些額外的治理信息,如該服務對哪些網關可見(即要通過哪些網關將該服務暴露出去),該服務目前是否在生產環境可訪問(是否已經過QA流程升級到生產環境)。

Zuul網關定期從服務治理中心拉取服務路由表(注意,這裡只需要拉取對該網關可見的路由表,例如無線網關只拉取對無線網關可見的服務,不需要拉取全部路由表),並緩存在本地內存。

當Zuul網關接收到外部請求,它根據某種規則從請求中解析出服務名,再通過查詢內存中的路由表找到目標服務的內部域名,最後對目標域名發起調用。通過域名調用時,底層HTTP客戶端會自動通過DNS服務解析並獲取對應的ip地址。注意,在實際場景中,這裡解析到的ip一般是一個vip,真實的服務實例一般躲在一個內部的負載均衡器LB(例如F5+nginx)後面,這個vip指向LB,LB會對後台服務做負載均衡和轉發。

該方案複雜度適中,內部的域名和負載均衡系統一般由運維支持,服務治理中心的研發門檻和成本不高,基本上就是一個簡單的資料庫應用。該方案的靈活性和自動化程度沒有第一種方案好,需要一些人工配置,但是可以在運維和服務治理中心層面按需增加一些治理環節,可治理性會更好一點。


對於一些初創公司,剛開始什麼都缺的情況下,最簡單的路由管理的方式就是直接把路由配置在Zuul網關的本地配置文件中。但是這種做法很不靈活,每次修改路由都需要重啟網關集群。所有建議可以部署一套配置中心,例如Apollo,把路由信息簡單配置在Apollo配置中心中,然後讓網關定期從Apollo獲取路由配置並做本地緩存,該方案如上圖所示。

Apollo支持XML格式的配置,下面是一個路由配置案例:


路由轉發是網關的核心功能,為此網關需要維護和管理一張路由表,常見做法有基於Eureka自發現,基於服務治理中心和域名,或者最簡單的基於配置中心。

波波在極客時間的課程《微服務架構和實踐160講》,馬上上線第三模塊《微服務網關Zuul架構和實踐》,會對Zuul網關的架構、源碼和生產實踐等內容進行深度剖析,歡迎關注。


Zuulhttps://github.com/netflix/zuul

Eurekahttps://github.com/netflix/eureka

Ribbonhttps://github.com/netflix/ribbon


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 波波微課 的精彩文章:

TAG:波波微課 |