一、Hystrix 設計原則

1.1 Hystrix是什麼?

在分佈式系統中,每個服務都可能會調用很多其它的服務,被調用的那些服務就是依賴服務,有的時候某些依賴服務出現故障也是很正常的。Hystrix可以讓我們在分佈式系統中對服務間的調用進行控制,加入一些調用延遲或者依賴故障的容錯機制。

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

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

 

1.2 Hystrix的歷史

Hystrix,就是一種高可用保障的一個框架,類似於Spring(ioc,mvc),mybatis,activiti,lucene等框架,預先封裝好的爲了解決某個特定領域的特定問題的一套代碼庫框架,用了框架之後,來解決這個領域的特定的問題,就可以大大減少我們的工作量,提升我們的工作質量和工作效率,框架Hystrix,高可用性保障的一個框架。

Netflix(可以認爲是國外的優酷或者愛奇藝之類的視頻網站),API團隊從2011年開始做一些提升系統可用性和穩定性的工作,Hystrix就是從那時候開始發展出來的。在2012年的時候,Hystrix就變得比較成熟和穩定了,Netflix中,除了API團隊以外,很多其他的團隊都開始使用Hystrix。

時至今日,Netflix中每天都有數十億次的服務間調用,通過Hystrix框架在進行,而Hystrix也幫助Netflix網站提升了整體的可用性和穩定性。

 

1.3 初步看一看Hystrix的設計原則是什麼?

Hystrix爲了實現高可用性的架構,設計Hystrix的時候,一些設計原則是什麼?

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

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

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

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

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

 

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

阻止故障蔓延

快速失敗+快速恢復

降級

監控+報警+運維

完全描述了Hystrix的功能,提供整個分佈式系統的高可用的架構

 

1.4 Hystrix要解決的問題是什麼?

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

 

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

 

舉例來說,某個服務有30個依賴服務,每個依賴服務的可用性非常高,已經達到了99.99%的高可用性。那麼該服務的可用性就是99.99%的30次方,也就是99.7%的可用性99.7%的可用性就意味着3%的請求可能會失敗,因爲3%的時間內系統可能出現了故障不可用。對於1億次訪問來說,3%的請求失敗,也就意味着300萬次請求會失敗,也意味着每個月有2個小時的時間系統是不可用的,在真實生產環境中,可能更加糟糕。

上面也就是說,即使你每個依賴服務都是99.99%高可用性,但是一旦你有幾十個依賴服務,還是會導致你每個月都有幾個小時是不可用的。

 

1.5 Hystrix的更加細節的設計原則是什麼?

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

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

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

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

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

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

(7)保護依賴服務調用的所有故障情況,而不僅僅只是網絡故障情況,調用這個依賴服務的時候,client調用包有bug,阻塞,等等,依賴服務的各種各樣的調用的故障,都

可以處理

 

1.6 Hystrix是如何實現它的目標的?

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

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

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

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

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

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

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

 

手工執行mvn install:install-file的命令,在本地倉庫中安裝這個依賴

mvn install:install-file

-Dfile=E:\apache-maven-3.0.5\mvn_repo\com\sun\jdmk\jmxtools\1.2.1\jmxtools-1.2.1.jar -DgroupId=com.sun.jdmk -DartifactId=jmxtools -Dversion=1.2.1 -Dpackaging=jar

 

1.7 hystrix的核心知識

1、hystrix內部工作原理:8大執行步驟和流程

2、資源隔離:你如果有很多個依賴服務,高可用性,先做資源隔離,任何一個依賴服務的故障不會導致你的服務的資源耗盡,不會崩潰

3、請求緩存:對於一個request context內的多個相同command,使用request cache,提升性能

4、熔斷:基於短路器,採集各種異常事件,報錯,超時,reject,短路,熔斷,一定時間範圍內就不允許訪問了,直接降級,自動恢復的機制

5、降級:報錯,超時,reject,熔斷,降級,服務提供容錯的機制

6、限流:在你的服務裏面,通過線程池,或者信號量,限制對某個後端的服務或資源的訪問量,避免從你的服務這裏過去太多的流量,打死某個資源

7、超時:避免某個依賴服務性能過差,導致大量的線程hang住去調用那個服務,會導致你的服務本身性能也比較差

 

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