Spring Cloud技術總結

2021-09-24 02:19:49 字數 2955 閱讀 2160

spring cloud是微服務化得綜合性解決框架,提供服務治理eureka,容錯hystrix,客戶端負載均衡ribbon,配置中心config,基於ribbon和hystrix的宣告式服務呼叫元件feign,閘道器zuul,訊息匯流排bus等。對於第一次接觸微服務架構的團隊或者架構人員不足的團隊能夠快速搭建起整個微服務架構。

服務註冊中心一般需要搭建多台,多台服務註冊中心分別向其他服務註冊中心註冊自己,實現服務清單互相同步,去掉單點故障,達到高可用的效果。

ribbon是netflix發布的開源專案,主要功能是提供客戶端的軟體負載均衡演算法,將netflix的中間層服務連線在一起。

服務間呼叫的時候回出現呼叫超時(網路問題),呼叫失敗等問題。如果沒有容錯保護機制,整個微服務體系可能會因為某乙個服務不可用而不可用,hystrix就是來保證微服務體系高可用性的元件。

執行緒池隔離和訊號量隔離,限制呼叫分布式服務的資源使用,某乙個呼叫的服務出現問題不會影響其他服務呼叫。

hystrix會將服務呼叫結果(成功,失敗,拒絕,超時)等資訊報告給斷路器,斷路器會根據這些資料來更改斷路器的狀態。

斷路器狀態

斷路器開啟關閉條件:

服務呼叫失敗後hystrix提供降級方案,有下面兩種方案:

hystrix提供快取功能,同樣服務請求呼叫,根據cachekey來判斷是否從快取中讀取

feign是乙個宣告式的web service客戶端,它整合了ribbon和hystrix。feign提供了http請求的模板,通過編寫簡單的介面和插入註解,就可以定義好http請求的引數、格式、位址等資訊。我們在實際微服務開發過程中就是使用feign,不會xianshi

feign特性

在微服務架構中,我們通過feign來實現服務間呼叫,但有些服務需要提供對外訪問介面,zuul就是來提供這個功能的。zuul主要提供兩個功能,路由配置和請求過濾,zuul和feign一樣整合了ribbon和hystrix包,提供負載均衡和熔斷等功能。由於所有的外部訪問都會首先通過閘道器,所以閘道器還可以很方便的提供統一鑑權和監控的功能。

下面的單例項和多例項配置可以幫忙**請求到對應ip和埠。但由於eureka儲存了服務名和對應服務訪問的埠和ip,我們也可以配置路由規則和服務名對應起來,而且zuul預設新增了路由規則和服務名對應的路由。zuul還提供各種路由匹配規則,像萬用字元匹配,忽略表示式,路由字首等等。

單例項配置

如下,符合/user-services/**規則的路由**到http://localhost:8080/

多例項配置符合/user-services/**規則的路由**到http://localhost:8080/,http://localhost:8081/,同時依賴ribbon實現了負載均衡。

服務路由預設規則如果每乙個服務都要定義服務路由規則也實在太麻煩了,所以eureka上的服務預設都會被zuul自動建立路由規則。預設路由規則如下,符合/user-services/**規則的路由訪問user-service服務。

zuul.routes.user-service.path=/user-services/**

zuul.routes.user-service.url=user-service

過濾器類似於spring filter功能,zuul過濾器負責對請求的處理過程進行干預,實現請求的校驗,監控等功能。

filter type

以下提供四種標準的filter型別及其在請求生命週期中所處的位置:

filter特徵

zuul請求生命週期

在分布式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分布式配置中心元件。spring cloud config就是spring cloud微服務架構提供的配置中心。它包含了client和server兩個部分,server提供配置檔案的儲存、以介面的形式將配置檔案的內容提供出去,client通過介面獲取資料、並依據此資料初始化自己的應用。spring cloud使用git或svn存放配置檔案,預設情況下使用git。spring-boot-starter-actuator監控模組,提供/refresh介面實現客戶端應用配置資訊的重新獲取與重新整理。

客戶端啟動獲取流程:

我們如果要去更新所有微服務的配置,如何避免向乙個個服務傳送post請求來通知更新。這時候我們就不要忘記訊息佇列的發布訂閱模型。這時bus訊息匯流排就能解決,你只需要在springcloud config server端發出refresh,就可以觸發所有微服務更新了。spring cloud bus需要配合rabbitmq或者kafka來實現。bus提供微服務架構中的發布訂閱功能,利於配置更新或者其他的一些需要讓所有客戶端知道的管理操作。

客戶端下面的架構圖,我們來簡單整理一下整個客戶端配置更新的流程

架構圖:

Springcloud技術體系

學習springcloud之前我們需要知道某樣技術的體系是什麼,從上而下學習這門技術,這樣才能更好地掌握。首先講一下springcloud和dubbo的區別 springcloud是管理應用,dubbo是管理服務的。1.1 基礎框架 springboot main函式啟動的原理。2.1 分布式配置 ...

Spring Cloud 面試總結

resttemplate是spring提供的用於傳送http請求的客戶端工具,它遵循restful原則,resttemplate預設依賴jdk的http連線工具httpurlconnection,你也可以替換不同的源,比如okhttp apache httpcomponents 等等。feign是s...

springcloud 整體技術使用架構

一 常用的服務註冊中心 1 eureka 停更不停用,不建議使用 2 zookeeper 3 consul 4 nacos 支援百萬資料,推薦使用 二 服務呼叫1 1 ribbon 2 loadbalancer 三 服務呼叫2 1 feign 不推薦使用 2 openfeign 四 服務降級 1 h...