spring boot集成Hystrix


git地址
https://github.com/a18792721831/studySpringCloud.git

1. 什麼是Hystrix

在分佈式系統中,服務與服務之間的依賴錯綜複雜,一種不可避免的情況就是某些服務會出現故障,導致依賴於它們的其他服務出現遠程調度的線程阻塞。Hystrix 是 Netflix公司開源的一個項目,它提供了熔斷器功能,能夠阻止分佈式系統中出現聯動故障。Hystrix 是通過隔離服務的訪問點阻止聯動故障的,並提供了故障的解決方案,從而提高了整個分佈式系統的彈性。

2. Hystrix解決了什麼問題

在複雜的分佈式系統中,可能有幾十個服務相互依賴,這些服務由於某些原因,例如機房的不可靠性、網絡服務商的不可靠性等,導致某個服務不可用。如果系統不隔離該不可用的服務,可能會導致整個系統不可用。
在高併發的情況下,單個服務的延遲會導致整個請求都處於延遲狀態,可能在幾秒鐘就使整個服務處於線程負載飽和的狀態。
某個服務的單個點的請求故障會導致用戶的請求處於阻塞狀態,最終的結果就是整個服務的線程資源消耗殆盡。由於服務的依賴性,會導致依賴於該故障服務的其他服務也處於線程阻塞狀態,最終導致這些服務的線程資源消耗殆盡,直到不可用,從而導致整個問服務系統都不可用,即雪崩效應。
爲了防止雪崩效應,因而產生了熔斷器模型。Hystrix 是在業界表現非常好的一個熔斷器模型實現的開源組件,它是Spring Cloud 組件不可缺少的一部分。

3. Hystrix設計原則

總的來說,Hystrix的設計原則如下。

  • 防止單個服務的故障耗盡整個服務的Servlet容器(例如Tomcat)的線程資源。
  • 快速失敗機制,如果某個服務出現了故障,則調用該服務的請求快速失敗,而不是線程等待。
  • 提供回退(fallback)方案,在請求發生故障時,提供設定好的回退方案。
  • 使用熔斷機制,防止故障擴散到其他服務。
  • 提供熔斷器的監控組件Hystrix Dashboard,可以實時監控熔斷器的狀態。

4. Hystrix工作機制

首先,當服務的某個 API 接口的失敗次數在一定時間內小於設定的閥值時,熔斷器處於關閉狀態,該 API接口正常提供服務。當該API 接口處理請求的失敗次數大於設定的閥值時,Hystrix判定該API接口出現了故障,打開熔斷器,這時請求該 API 接口會執行快速失敗的邏輯(即 fallback 回退的邏輯),不執行業務邏輯,請求的線程不會處於阻塞狀態。處於打開狀態的熔斷器,一段時間後會處於半打開狀態,並將一定數量的請求執行正常邏輯。剩餘的請求會執行快速失敗,若執行正常邏輯的請求失敗了,則熔斷器繼續打開;若成功了,則將熔斷器關閉。這樣熔斷器就具有了自我像復的能力。

5. RestTemplate和Ribbon使用Hystrix

5.1 創建項目

在這裏插入圖片描述

5.2 配置

配置服務名稱,eureka server,日誌等
在這裏插入圖片描述
配置eureka client服務提供者的連接名稱
在這裏插入圖片描述

5.3 添加註解

在這裏插入圖片描述

5.4 創建Ribbon配置

在這裏插入圖片描述

5.5 創建Ribbon Service

在這裏插入圖片描述
當Hystrix認爲eureka client的服務提供者提供的服務不可用時,就會訪問fallbackMethod的方法

5.6 創建controller

在這裏插入圖片描述

5.7 驗證

首先啓動eureka server
在這裏插入圖片描述
然後啓動本項目
在這裏插入圖片描述
注意,此時沒有啓動eureka client服務提供者,那麼服務是不可用的。
訪問Hystrix的接口,會調用service裏面的fallbackMethod的方法。
在這裏插入圖片描述
接下來啓動eureka client 服務提供者。
在這裏插入圖片描述
此時服務可達,所以,此時應該能夠正確的訪問的
在這裏插入圖片描述
當然,需要多試試,才能成功。
在這裏插入圖片描述
這就是Hystrix的自我修復。
將熔斷器設置爲半開狀態,嘗試請求,成功就將服務設置可用,否則繼續熔斷。

6. 在Feign上使用熔斷器

6.1 創建項目

在這裏插入圖片描述

6.2 配置

在這裏插入圖片描述

6.3 添加註解

在這裏插入圖片描述

6.4 feign配置

在這裏插入圖片描述

6.5 feign調用

在這裏插入圖片描述

6.6 feign的hystrix處理

在這裏插入圖片描述

6.7 service

在這裏插入圖片描述

6.8 controller

在這裏插入圖片描述

開啓eureka client和feign
因爲feign已經引入了hystrix的依賴,所以我們這裏開啓就行。
因爲feign調用時寫的是接口,而hystrix的熔斷調用的方法就是實現了feign調用的接口的類。
同時這些類和接口需要被spring管理。
在feign調用的接口需要指定熔斷處理類…

6.9 驗證

啓動,首先需要啓動eureka-server和eureka client服務提供者
接着啓動feign-hystrix(也就是feign)
訪問:
在這裏插入圖片描述
關閉eureka client服務提供者
在這裏插入圖片描述
就去調用熔斷處理的方法了。

7. RestTemplate和Feign對比

兩者都能實現熔斷處理。不過feign比RestTemplate更好。

  1. RestTemplate是使用硬編碼指定熔斷處理方法的,而feign則是指定類
  2. RestTemplate熔斷處理方法沒有限制,而feign則是實現接口,其方法已被定義
  3. RestTemplate請求單一,而feign有HttpUrlConnection,HttpClient,OkHttp多種方式
  4. RestTemplate需要自己增加依賴,而feign已集成,無需管理
  5. RestTemplate學習成本小於feign

8. Hystrix Dashboard & RestTemplate

8.1 創建

在這裏插入圖片描述

8.2 配置

在這裏插入圖片描述

8.3 配置hystrix dashboard

在這裏插入圖片描述
注意:
這裏的urlMapping就是熔斷器的元數據訪問地址,如果不配置,會無法訪問導致異常。
當然也可以添加多個,比如
在這裏插入圖片描述
因爲內部是一個list,不存在覆蓋的問題
在這裏插入圖片描述
在這裏插入圖片描述

8.4 配置ribbon

在這裏插入圖片描述

8.5 service

在這裏插入圖片描述

8.6 controller

在這裏插入圖片描述

8.7 註解

在這裏插入圖片描述

8.8 啓動

在這裏插入圖片描述
注意,需要先啓動eureka server以及eureka client服務提供者。
剛開始沒有訪問任何服務,此時eureka client還未獲取eureka server 服務列表。
在這裏插入圖片描述
在這裏插入圖片描述
接着訪問hystrix dashboard的主界面
在這裏插入圖片描述
在這裏插入圖片描述
接着訪問:
在這裏插入圖片描述
其實就是配置的url實際上是等價的。
在這裏插入圖片描述

9. Hystrix Dashboard & Feign

9.1 創建

在這裏插入圖片描述

9.2 配置

在這裏插入圖片描述

9.3 配置hystrix dashboard

在這裏插入圖片描述

9.4 配置feign

在這裏插入圖片描述

9.5 dao.feign

在這裏插入圖片描述

9.6 hystrix.feign

在這裏插入圖片描述

9.7 service

在這裏插入圖片描述

9.8 controller

在這裏插入圖片描述

9.9 註解

在這裏插入圖片描述

9.10 啓動

在這裏插入圖片描述
在這裏插入圖片描述
訪問
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
這個就是元數據訪問不到。

10. Turbine聚合監控

10.1 創建

在這裏插入圖片描述

10.2 配置

在這裏插入圖片描述
在這裏插入圖片描述

10.3 啓動

在這裏插入圖片描述
在這裏插入圖片描述
訪問
在這裏插入圖片描述
在這裏插入圖片描述
將hystrix dashboard需要兩頁的監控圖像放到了一個頁面上。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章