當前位置:
首頁 > 最新 > 雲服務下的動態路由網關

雲服務下的動態路由網關

最近整理雲服務網關,通過圖形界面配置實現動態路由、動態許可權、限流配額等功能,為項目提供統一的外網調用管理。總結如下:

網關的架構設計模式

傳統的沒有網關參與的互聯網架構,是通過負載均衡期分發http請求到後端的服務系統,缺點是無法對後端服務進行統一的管理。

基於雲服務開發框架的互聯網架構引入了服務註冊中心,後端服務均註冊到服務註冊中心,網關本身也註冊到服務註冊中心,網關可以從服務註冊中心獲取後端服務列表。服務註冊中心的引入,可以有效管理後端服務,但是作為網關產品,需要處理異構系統的系統,如果強制使用服務註冊中心,對其他系統具有侵入性。

網關產品架構採用URL鏈接轉發形式(不採用映射到服務名的模式),這樣能接入各種異構系統。

實現動態路由

動態路由需要達到可持久化配置,動態刷新的效果。如架構圖所示,不僅要能滿足從配置文件properties載入路由信息,還需要從資料庫載入我們的配置。另外一點是,路由信息在容器啟動時就已經載入進入了內存,我們希望配置完成後,實施發布,動態刷新內存中的路由信息,達到不停機維護路由信息的效果。

實現動態路由,可以通過擴展SimpleRouteLocator類並實現RefreshbleRouterLocator來實現自動動態刷新。在子類中Overide locateRoutes方法,從資料庫中讀取路由信息,併合併到從配置文件中讀取的路由配置信息中返回。這樣就實現了通過圖形界面將路由表保存到資料庫的功能。

實現動態路由刷新,可以自定義一個Service注入到Spring,在Service中生成RouteRefreshEvent事件,通過事件可以觸髮網關內部一系列的路由表刷新流程。

在界面中添加手動觸發路由刷新功能的按鈕。

locateRoutes方法默認在一分鐘左右自動執行一次刷新(觸發的機制暫時不清楚),更改路由配置後,在自動刷新執行前,路由配置不起作用。因此在圖形界面中添加了手動出發刷新的按鈕,在後台添加Rest介面,調用步驟2中的Service生成RouteRefreshEvent事件,從而完成觸發。

加強路由刷新Rest介面的安全性

因為路由刷新Rest介面是寫在網關模塊中的,不同於其他業務模塊的Rest介面需要通過網關進行路由映射和轉發,用戶可以直接請求網關的Rest介面,這樣就繞過了網關的許可權認證處理。為避免帶來安全性的問題,通過WebMvcConfigurerAdapter添加攔截器,對用戶的token進行驗證,未登錄的用戶不能調用路由刷新介面。該攔截器不同於網關的filter,網關的filter對指定前綴的url請求進行過濾,攔截器對發送給Contorller的請求進行攔截。


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

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


請您繼續閱讀更多來自 架構學習之路 的精彩文章:

基於密鑰對的License機制和工具開發

TAG:架構學習之路 |