hystrix簡介


hystrix,框架,提供了高可用相關的各種各樣的功能,然后確保說在hystrix的保護下,整個系統可以長期處於高可用的狀態,100%。

高可用系統架構:

資源隔離、限流、熔斷、降級、運維監控

資源隔離:讓你的系統里,某一塊東西,在故障的情況下,不會耗盡系統所有的資源,比如線程資源。

限流:高並發的流量涌入進來,比如說突然間一秒鍾100萬QPS,廢掉了,10萬QPS進入系統,其他90萬QPS被拒絕了。

熔斷:系統后端的一些依賴,出了一些故障,比如說mysql掛掉了,每次請求都是報錯的,熔斷了,后續的請求過來直接不接收了,拒絕訪問,10分鍾之后再嘗試去看看mysql恢復沒有

降級:mysql掛了,系統發現了,自動降級,從內存里存的少量數據中,去提取一些數據出來

運維監控:監控+報警+優化,各種異常的情況,有問題就及時報警,優化一些系統的配置和參數,或者代碼。

1、Hystrix是什么?

在分布式系統中,每個服務都可能會調用很多其他服務,被調用的那些服務就是依賴服務,有的時候某些依賴服務出現故障也是很正常的。

Hystrix可以讓我們在分布式系統中對服務間的調用進行控制,加入一些調用延遲或者依賴故障的容錯機制.

Hystrix通過將依賴服務進行資源隔離,進而組織某個依賴服務出現故障的時候,這種故障在整個系統所有的依賴服務調用中進行蔓延,同時Hystrix還提供故障時的fallback降級機制

總而言之,Hystrix通過這些方法幫助我們提升分布式系統的可用性和穩定性

 

 

2.Hystrix的設計原則是什么?

hystrix為了實現高可用性的架構,設計hystrix的時候,一些設計原則是什么???

(1)對依賴服務調用時出現的調用延遲和調用失敗進行控制和容錯保護

(2)在復雜的分布式系統中,阻止某一個依賴服務的故障在整個系統中蔓延,服務A->服務B->服務C,服務C故障了,服務B也故障了,服務A故障了,整套分布式系統全部故障,整體宕機

(3)提供fail-fast(快速失敗)和快速恢復的支持

(4)提供fallback優雅降級的支持

(5)支持近實時的監控、報警以及運維操作

調用延遲+失敗,提供容錯

阻止故障蔓延

快速失敗+快速恢復

降級

監控+報警+運維

4、Hystrix要解決的問題是什么?

在復雜的分布式系統架構中,每個服務都有很多的依賴服務,而每個依賴服務都可能會故障

如果服務沒有和自己的依賴服務進行隔離,那么可能某一個依賴服務的故障就會拖垮當前這個服務

舉例來說,某個服務有30個依賴服務,每個依賴服務的可用性非常高,已經達到了99.99%的高可用性

那么該服務的可用性就是99.99%的30次方,也就是99.7%的可用性

99.7%的可用性就意味着3%的請求可能會失敗,因為3%的時間內系統可能出現了故障不可用了

4.Hystrix的更加細節的設計原則是什么?

(1)阻止任何一個依賴服務耗盡所有的資源,比如tomcat中的所有線程資源

(2)避免請求排隊和積壓,采用限流和fail fast來控制故障

(3)提供fallback降級機制來應對故障

(4)使用資源隔離技術,比如bulkhead(艙壁隔離技術),swimlane(泳道技術),circuit breaker(短路技術),來限制任何一個依賴服務的故障的影響

(5)通過近實時的統計/監控/報警功能,來提高故障發現的速度

(6)通過近實時的屬性和配置熱修改功能,來提高故障處理和恢復的速度

(7)保護依賴服務調用的所有故障情況,而不僅僅只是網絡故障情況

調用這個依賴服務的時候,client調用包有bug,阻塞,等等,依賴服務的各種各樣的調用的故障,都可以處理

 

 

6、Hystrix是如何實現它的目標的?

(1)通過HystrixCommand或者HystrixObservableCommand來封裝對外部依賴的訪問請求,這個訪問請求一般會運行在獨立的線程中,資源隔離

(2)對於超出我們設定閾值的服務調用,直接進行超時,不允許其耗費過長時間阻塞住。這個超時時間默認是99.5%的訪問時間,但是一般我們可以自己設置一下

(3)為每一個依賴服務維護一個獨立的線程池,或者是semaphore,當線程池已滿時,直接拒絕對這個服務的調用

(4)對依賴服務的調用的成功次數,失敗次數,拒絕次數,超時次數,進行統計

(5)如果對一個依賴服務的調用失敗次數超過了一定的閾值,自動進行熔斷,在一定時間內對該服務的調用直接降級,一段時間后再自動嘗試恢復

(6)當一個服務調用出現失敗,被拒絕,超時,短路等異常情況時,自動調用fallback降級機制

(7)對屬性和配置的修改提供近實時的支持

 

 

 

緩存服務,訂閱一個MQ的消息變更,如果有消息變更的話,那么就會發送一個網絡請求,調用一個底層的對應的源數據服務的接口,去獲取變更后的數據

 

將獲取到的變更后的數據填充到分布式的redis緩存中去。

商品服務接口調用故障,導致緩存服務資源耗盡

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM