首頁技術(shù)文章正文

Spring Cloud Hystrix原理詳細(xì)介紹

更新時間:2020-11-19 來源:黑馬程序員 瀏覽量:

1577370495235_學(xué)IT就到黑馬程序員.gif

Spring Cloud中的Hystrix是Netflix開源的一款針對分布式系統(tǒng)延遲和容錯的庫,其目的是通過添加延遲容忍和容錯邏輯,從而控制分布式服務(wù)之間的交互。

對于一個復(fù)雜的分布式系統(tǒng),包含的應(yīng)用可能多達(dá)數(shù)十個,這些應(yīng)用有許多依賴項目,每個依賴項目在某個時刻不可避免會失敗導(dǎo)致故障,如果不對這些故障進(jìn)行隔離,整個分布式系統(tǒng)都可能會崩潰。

借助官網(wǎng)的一個例子來說明,假設(shè)某個應(yīng)用程序依賴30多個服務(wù),每個服務(wù)正常運(yùn)行的概率是99.99%,那么系統(tǒng)可用的概率是99.9930=99.7%,也就是說,每個服務(wù)出現(xiàn)故障的概率是0.3%,十億個請求的故障就是3000000個,即使所有依賴具有出色的正常運(yùn)行時間,每個月至少會有2小時以上的服務(wù)是不可用的,現(xiàn)實(shí)情況中,情況可能會更糟糕。

當(dāng)一切正常時,請求情況如下圖所示。

1605782082620_一切正常的請求情況.jpg

一切正常的請求情況


當(dāng)其中有一個系統(tǒng)有延遲時,它可能阻塞整個用戶請求,具體如下圖所示。

1605782114853_系統(tǒng)出現(xiàn)延遲的情況.jpg

系統(tǒng)出現(xiàn)延遲的情況

在高流量情況下,一個后端的依賴延遲可能會導(dǎo)致所有服務(wù)的資源在數(shù)秒內(nèi)變的飽和,這也就意味著,后續(xù)如果再有請求將無法提供服務(wù),應(yīng)用會出現(xiàn)故障。比故障更糟糕的是,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加,從而備份隊列、線程和其他資源,從而導(dǎo)致整個系統(tǒng)出現(xiàn)更多級聯(lián)故障,如下圖所示。

1605782137511_系統(tǒng)出現(xiàn)更多級聯(lián)故障情況.jpg

系統(tǒng)出現(xiàn)更多級聯(lián)故障情況

Hystrix的出現(xiàn)就是為了解決上述問題的,它封裝了每個依賴項,每個依賴項彼此隔離,當(dāng)延遲發(fā)生時,它會被限制在資源中,并包含回退邏輯,該邏輯決定在依賴發(fā)生任何類型故障時應(yīng)作出何種響應(yīng)。

使用Hystrix包裝依賴項后,前面圖中的架構(gòu)會發(fā)生變化,如下圖所示。

1605782159820_使用Hystrix包裝依賴后的架構(gòu).jpg

使用Hystrix包裝依賴后的架構(gòu)

在上圖中,Hystrix被設(shè)計的目標(biāo)是阻止級聯(lián)故障,對通過第三方客戶端訪問的依賴項的延遲和故障進(jìn)行保護(hù)和控制。Hystrix實(shí)現(xiàn)這一目標(biāo)的大致思路具體如下:

(1) 將外部依賴的訪問請求封裝在獨(dú)立的線程中,進(jìn)行資源隔離。

(2) 對于超出設(shè)定閾值的服務(wù)調(diào)用,直接進(jìn)行超時,不允許其耗費(fèi)過長時間阻塞線程。

(3) 每個依賴服務(wù)維護(hù)一個獨(dú)立的線程池,一旦線程池滿了,直接拒絕服務(wù)的調(diào)用。

(4) 統(tǒng)計依賴服務(wù)調(diào)用的成功次數(shù)、失敗次數(shù)、拒絕次數(shù)、超時次數(shù)等結(jié)果。

(5) 在一段時間內(nèi),如果服務(wù)調(diào)用的異常次數(shù)超過一定閾值,就會觸發(fā)熔斷停止對特定服務(wù)的所有請求,在一定時間內(nèi)對服務(wù)調(diào)用直接降級,一段時間后再次進(jìn)行自動嘗試恢復(fù)。

(6) 如果某個服務(wù)出現(xiàn)調(diào)用失敗、被拒絕、超時等異常情況,自動調(diào)用fallback降級機(jī)制。

(7) 實(shí)時監(jiān)控指標(biāo)和配置變化。

關(guān)于Hystrix工作機(jī)制的深入分析將在后面小節(jié)詳解,這里大家對Hystrix熔斷機(jī)制有個大致了解即可。


猜你喜歡:

Spring Cloud和Dubbo的區(qū)別是什么?

什么是Spring Cloud?Spring Cloud介紹

微服務(wù)架構(gòu)有哪些功能?

黑馬程序員Java高級軟件工程師課程

分享到:
在線咨詢 我要報名
和我們在線交談!