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

Spring Cloud Hystrix有什么作用?

更新時(shí)間:2021-03-25 來源:黑馬程序員 瀏覽量:

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

在微服務(wù)架構(gòu)中,通常會(huì)存在多個(gè)服務(wù)層調(diào)用的情況,如果基礎(chǔ)服務(wù)出現(xiàn)故障可能會(huì)發(fā)生級(jí)聯(lián)傳遞,導(dǎo)致整個(gè)服務(wù)鏈上的服務(wù)不可用,如圖1所示。

1616661963926_服務(wù)故障的級(jí)聯(lián)傳遞.jpg

圖1 服務(wù)故障的級(jí)聯(lián)傳遞

在圖1中,A為服務(wù)提供者,B為A的服務(wù)調(diào)用者,C和D是B的服務(wù)調(diào)用者。隨著時(shí)間的推移,當(dāng)A的不可用引起B(yǎng)的不可用,并將不可用逐漸放大到C和D時(shí),整個(gè)服務(wù)就崩潰了。

為了解決服務(wù)級(jí)聯(lián)失敗這種問題,在分布式架構(gòu)中產(chǎn)生了斷路器等一系列的服務(wù)保護(hù)機(jī)制。分布式架構(gòu)中的斷路器,有些類似于我們生活中的空氣開關(guān),當(dāng)電路發(fā)生短路等情況時(shí),空氣開關(guān)會(huì)立刻斷開電流,以防止用電火災(zāi)的發(fā)生。

在Spring Cloud中,Spring Cloud Hystrix就是用來實(shí)現(xiàn)斷路器、線程隔離等服務(wù)保護(hù)功能的。Spring Cloud Hystrix是基于Netflix的開源框架Hystrix實(shí)現(xiàn)的,該框架的使用目標(biāo)在于通過控制那些訪問遠(yuǎn)程系統(tǒng)、服務(wù)和第三方庫的節(jié)點(diǎn),從而對(duì)延遲和故障提供更強(qiáng)大的容錯(cuò)能力。

與空氣開關(guān)不能自動(dòng)重新打開有所不同的是,斷路器是可以實(shí)現(xiàn)彈性容錯(cuò)的,在一定條件下它能夠自動(dòng)打開和關(guān)閉,其使用時(shí)主要有三種狀態(tài),如圖2所示。

在圖2中,斷路器的開關(guān)由關(guān)閉到打開的狀態(tài)是通過當(dāng)前服務(wù)健康狀況(服務(wù)的健康狀況=請(qǐng)求失敗數(shù)/請(qǐng)求總數(shù))和設(shè)定閾值(默認(rèn)為10秒內(nèi)的20次故障)比較決定的。當(dāng)斷路器開關(guān)關(guān)閉時(shí),請(qǐng)求被允許通過斷路器,如果當(dāng)前健康狀況高于設(shè)定閾值,開關(guān)繼續(xù)保持關(guān)閉;如果當(dāng)前健康狀況低于設(shè)定閾值,開關(guān)則切換為打開狀態(tài)。當(dāng)斷路器開關(guān)打開時(shí),請(qǐng)求被禁止通過;如果設(shè)置了fallback方法,則會(huì)進(jìn)入fallback的流程。當(dāng)斷路器開關(guān)處于打開狀態(tài),經(jīng)過一段時(shí)間后,斷路器會(huì)自動(dòng)進(jìn)入半開狀態(tài),這時(shí)斷路器只允許一個(gè)請(qǐng)求通過;當(dāng)該請(qǐng)求調(diào)用成功時(shí),斷路器恢復(fù)到關(guān)閉狀態(tài);若該請(qǐng)求失敗,斷路器繼續(xù)保持打開狀態(tài),接下來的請(qǐng)求會(huì)被禁止通過。

1616661981911_斷路器的三種狀態(tài)轉(zhuǎn)換.jpg

圖2 斷路器的三種狀態(tài)轉(zhuǎn)換

Spring Cloud Hystrix能保證服務(wù)調(diào)用者在調(diào)用異常服務(wù)時(shí)快速地返回結(jié)果,避免大量的同步等待,這是通過HystrixCommand的fallback方法實(shí)現(xiàn)的,如圖3所示。

1616661994323_fallback方法.jpg

圖3 fallback方法

在圖3中,雖然A服務(wù)仍然不可用,但采用fallback的方式可以給用戶一個(gè)友好的提示結(jié)果,這樣就避免了其他服務(wù)的崩潰問題。


猜你喜歡:

Spring MVC框架有哪些優(yōu)點(diǎn)?

Spring AOP實(shí)現(xiàn)原理和常見代理的區(qū)別

Spring Cloud是什么?怎么理解Spring Cloud?

Spring Boot如何實(shí)現(xiàn)微服務(wù)?/a>

Spring框架功能分為哪些模塊?

傳智教育java培訓(xùn)課程

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