服務閘道器之SpringCloudGateway

2022-06-19 07:27:12 字數 2383 閱讀 6634

一般微服務架構如下圖

後端服務比較健全,但是當涉及到前後端互動時,存在如下問題:

1,客戶端需要維護服務端的各個位址,**困難

2,認證、鑑權複雜

3,跨域問題嚴重

為了解決以上問題,微服務架構的五大關鍵技術之一服務閘道器就登場了。

所謂服務閘道器(api閘道器),就是指系統的統一入口,它封裝了應用程式的內部結構,為客戶提供統一服務,一些與業務本身無關的公共邏輯可以在這裡實現,諸如認證、鑑權、監控、路由**等等。常見的服務閘道器有nginx+lua、kong、zuul、springcloudgateway。

springcloudgateway是spring公司基於spring5.0、springboot2.0、project reactor等技術開發的閘道器,它旨在為微服務架構提供一種簡單有效統一的api路由管理方式。它的目標是替代netflix zuul,其不僅提供統一的路由方式,並且基於filter鏈的方式提供了閘道器的基本功能更,例如:安全、監控和限流。

優點:效能強勁,是第一代閘道器zuul的1.6倍。

功能強大,內建了很多實用功能,例如**、監控、限流等。

設計優雅,容易擴充套件。

缺點:其實現依賴netty與webflux,不是傳統的servlet程式設計模型,學習成本高。

不能將其部署在tomcat、jetty等servlet容器裡,只能打成jar包執行。

需要springboot2.0及以上的版本。

路由(route)是gateway中最基本的元件之一,表示乙個具體的路由資訊載體。主要定義了下面幾個資訊:

id:路由識別符號,區別於其他route。

uri:路由指向的目的地uri,即客戶端請求最終被**到的微服務。

order:用於多個route之間的排序,數值越小排序越靠前,匹配優先順序越高。

predicate:斷言的作用是進行條件判斷,只有判斷都發返回真,才會真正的執行路由。

filter:用於修改請求和響應資訊。

predicate(斷言、謂詞)用於進行條件判斷,只有斷言都返回真,才會真正執行路由。即在什麼條件下,才能進行路由**。

gateway中有許多內建斷言工廠,這些斷言都與http請求的不同屬性匹配,比較常見的有:基於datetime型別的斷言工廠、基於遠端位址的、基於header的、基於host的、基於path的......

過濾器(filter)就是在請求的傳遞過程中,對請求和響應做一些處理。生命週期為pre和post。

pre:這種過濾器在請求被路由之前呼叫。我們可利用這種過濾器實現身份驗證、在集群中選擇請求的微服務、記錄除錯資訊等。

post:這種過濾器在路由到微服務以後執行,這種過濾器可用來為響應新增標準的http header、收集統計資訊和指標、將響應從微服務傳送給客戶端等。

在gateway中內建了很多不同種類的閘道器路由過濾器,常見的有:addrequestheader、addrequestparameter、addresponseheader、addresponseparameter、hystrix、prefixpath......

全域性過濾器作用於所有路由,無需配置,通過全域性過濾器可以實現對許可權的統一鑑權、安全驗證等功能。gateway內建的全域性過濾器如下:

內建的過濾器可以完成絕大多數功能,但是對於企業開發的一些業務功能處理,還能需要我們自己編寫過濾器來實現的,那麼我們一起通過**的形式自定義乙個過濾器,去完成統一的許可權校驗。

自定義全域性過濾器,開發鑑權邏輯:

當客戶端第一次請求服務時,服務端對使用者進行資訊認證(登入)。

認證通過,將使用者資訊進行加密形成token,返回給客戶端,作為登入憑證。

以後每次請求,客戶端都攜帶認證的token

服務端對token進行解密,判斷是否有效

sentinel提供了gateway的適配模組,可以提供兩種資源維度的限流。

route維度:即在spring配置檔案中配置的路由條目,資源名為對應routeid。

自定義api維度:使用者可以利用提供的api來自定義一些api分組。

Spring Cloud 之 服務閘道器

在微服務架構體系中,使用api 服務閘道器後的系統架構圖如下 api服務閘道器的主要作用如下 在springcloud中,基於netflix 和zuul 元件來實現api 閘道器功能,下面先來構建乙個服務閘道器專案 1.pom檔案 3 閘道器服務啟動類 enablezuulproxy public ...

Springcloud服務閘道器之Zuul

springcloud目前的服務閘道器有zuul和springcloud getway。zuul是netflix公司公司開源專案。在微服務架構中,後端服務往往不直接開放給呼叫端,而是通過乙個api閘道器根據請求的url,路由到相應的服務。當新增api閘道器後,在第三方呼叫端和服務提供方之間就建立了一...

SpringCloud之服務閘道器Gateway

使用springcloud的閘道器 一 1 建立springboot空專案,匯入gateway依賴 org.springframework.cloud spring cloud starter gateway 2.2.3.release 2 兩種方式進行閘道器控制 2.1 啟動類中建立bean be...