溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基于Spring cloud gateway定制的微服務(wù)網(wǎng)關(guān)

發(fā)布時間:2020-07-24 23:20:26 來源:網(wǎng)絡(luò) 閱讀:497 作者:java架構(gòu)師1 欄目:編程語言

在構(gòu)建微服務(wù)的架構(gòu)體系過程中,API網(wǎng)關(guān)是一個非常重要的組件。那我們應(yīng)該怎樣實現(xiàn)一個微服務(wù)API網(wǎng)關(guān),本文主要介紹Spring Cloud Gateway的功能,以及如何基于Spring Cloud Gateway定制自己的網(wǎng)關(guān)。

基于Spring cloud gateway定制的微服務(wù)網(wǎng)關(guān)
Spring Cloud Gateway
Spring Cloud Gateway提供的是一個用于在Spring MVC之上構(gòu)建API網(wǎng)關(guān)的library,它的目標(biāo)是提供一種簡單而有效的方式路由API請求,它提供了一個切面,主要關(guān)注:安全、監(jiān)控/metrics、彈性伸縮。
Spring Cloud Gateway 特性:

使用Spring Framework 5, Project Reactor 和 Spring Boot 2.0實現(xiàn);
可以在請求的任何屬性上匹配路由;
通過Predicate 和 filter 指定路由;
集成了Hystrix 的熔斷機制;
集成了Spring Cloud 的服務(wù)發(fā)現(xiàn)機制;
易于編寫 Predicate 和 Filter;
請求限流;
重定向;

定制API網(wǎng)關(guān)的目標(biāo)

從Spring cloud gateway的官方文檔中可以查到,它主要關(guān)注于安全、監(jiān)控、彈性伸縮,但是它只是提供了開發(fā)這些功能的基礎(chǔ),直接用于生產(chǎn)的話,用起來體驗不是很好。各種配置都是寫在application.yaml的配置文件中,修改起來不是很方便,每次修改都需要重啟服務(wù),有一種不需要重啟服務(wù)的方法是使用配置中心;但是這些配置(路由策略、熔斷機制、限流策略等)配置不是很好記,不滿足國內(nèi)軟件的要求(漂亮的配置后臺)。

安全:關(guān)于安全其實Spring cloud gateway本身并沒有任何實現(xiàn),要想實現(xiàn)網(wǎng)關(guān)的安全控制,一般有兩種方式:依賴Spring boot security實現(xiàn)基于JWT(或者OAuth3) token的認(rèn)證;另一種就是直接使用網(wǎng)關(guān)分配appId,來識別事先配置的權(quán)限。以上是API權(quán)限的控制,還有一種安全是參數(shù)防篡改的方法:對請求參數(shù)做簽名驗簽名。

API網(wǎng)關(guān)的安全目標(biāo)是,支持多種安全方式自由選擇和組合,并且可以在管理后臺配置,實時生效。

動態(tài)路由:意思是在線修改路由配置,并實時生效。Spring cloud gateway自身提供的路由配置方式有兩種:編寫代碼和application.yaml中配置,在Spring cloud gateway啟動的時候加載到內(nèi)存中,所以要修改路由的話也是需要重啟網(wǎng)關(guān)。但Spring cloud gateway提供了自定義路由RouteDefinitionRepository類的入口,并且還監(jiān)聽了刷新路由事件RefreshRoutesEvent。

API網(wǎng)關(guān)的動態(tài)路由的目標(biāo)是,支持在管理后臺配置和修改服務(wù)路由,并且實時生效。具體實現(xiàn)方式可以參考 動態(tài)路由的實現(xiàn)方式詳解。

熔斷、降級:在分布式系統(tǒng)中這兩個特性一般是同時出現(xiàn),代表了系統(tǒng)容錯性。Spring cloud gateway中依賴Hystrix來實現(xiàn),目前支持的是在application.yaml中配置熔斷和降級策略,這種配置方式,修改的話需要重啟網(wǎng)關(guān)。

API網(wǎng)關(guān)的熔斷降級配置目標(biāo)是,支持在管理后臺操作:是否開啟斷路器、熔斷策略、調(diào)整降級方案,并且實時生效。

限流:API網(wǎng)關(guān)上一般會有大量請求,為了提供整體服務(wù)的可用性和穩(wěn)定性,經(jīng)常會對指定服務(wù)限流。當(dāng)請求量達到限流上限的時候,可以選擇拒絕服務(wù)、排隊或者降級;Spring cloud gateway中依賴了redis來實現(xiàn)限流,通過KeyResolver來配置限流策略。它也存在同樣的問題,就是修改配置需要重啟服務(wù)。

API網(wǎng)關(guān)的限流目標(biāo)是,支持管理后臺配置限流策略,以及速率調(diào)整,并且實時生效。
彈性伸縮:這一般是有基礎(chǔ)設(shè)施平臺提供的特性,一般的容器云平臺都是支持,實時監(jiān)控API網(wǎng)關(guān)的壓力和健康狀態(tài),自動做出相應(yīng)的伸縮容處理。整個Spring cloud體系都是基于云原生的指導(dǎo)思想建設(shè)的,所以還是比較容易實現(xiàn)這一點的。

API網(wǎng)關(guān)的彈性伸縮目標(biāo)是,支持標(biāo)準(zhǔn)的容器云平臺的部署,并且能提供平臺監(jiān)控指標(biāo)。
監(jiān)控:監(jiān)控是一個高可用系統(tǒng)必不可少的功能,Spring cloud gateway是通過Spring boot actuator實現(xiàn)可監(jiān)控的,它可以輸出全方位的監(jiān)控數(shù)據(jù),并且還支持定制監(jiān)控指標(biāo)。還通過micrometer提供了多種監(jiān)控數(shù)據(jù)格式的輸出,最常用的就是prometheus。

API網(wǎng)關(guān)的監(jiān)控目標(biāo)是,通過Actuator+Prometheus+Grafana三個工具組合來實現(xiàn)API網(wǎng)關(guān)的可視化監(jiān)控,并且配置相應(yīng)的報警。

API文檔:一個完美的API文檔是API網(wǎng)關(guān)臉面,因為接入API網(wǎng)關(guān)的應(yīng)用(也就是API的用戶)最先看到的就是API文檔,作為程序員大家都不喜歡寫這種文檔,因此API網(wǎng)關(guān)必須能提供一種方法,方便輸出漂亮的API文檔。目前swagger ui早已在Spring cloud的后端微服務(wù)中流行開來,因此API網(wǎng)關(guān)需要將它們聚合起來。

API網(wǎng)關(guān)的API文檔目標(biāo)是,通過聚合后端服務(wù)的swagger ui來實現(xiàn)API文檔的輸出,當(dāng)然還需要結(jié)合安全特性來控制API文檔的權(quán)限。

實現(xiàn)一個API網(wǎng)關(guān)

上面設(shè)定了要實現(xiàn)一個API網(wǎng)關(guān)的各種目標(biāo)(要求),并且論證了基于Spring cloud gateway實現(xiàn)它們的可行性,下面就需要依依實現(xiàn)它們了,最終你會發(fā)現(xiàn),實現(xiàn)了一個阿里云的API網(wǎng)關(guān)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI