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

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

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

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

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

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

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

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

1605782082620_一切正常的請(qǐng)求情況.jpg

一切正常的請(qǐng)求情況


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


猜你喜歡:

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

什么是Spring Cloud?Spring Cloud介紹

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

黑馬程序員Java高級(jí)軟件工程師課程

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!