SpringCloud微服務(wù)Hystrix:如何解決災(zāi)難性雪崩效應(yīng)?

一、什么是災(zāi)難性的雪崩效應(yīng)
? ? ?在微服務(wù)架構(gòu)的項目中,尤其是中大型項目,肯定會出現(xiàn)一個服務(wù)調(diào)用其他的服務(wù),其他服務(wù)又調(diào)用別的服務(wù),服務(wù)和服務(wù)之間形成了一種鏈式的調(diào)用關(guān)系。
? ? ? 導(dǎo)致服務(wù)U和服務(wù)T的負載過高。運行性能下降。會導(dǎo)致其他調(diào)用服務(wù)U和服務(wù)T的鏈條出現(xiàn)問題。從而所有的項目可能都出現(xiàn)的問題。

?當(dāng)其中某一個服務(wù)突然遇到大量請求時。整個鏈條上所有服務(wù)負載驟增。
?這種情況就稱為災(zāi)難性的雪崩效應(yīng)。

二、雪崩效應(yīng)原因:
1.服務(wù)提供者(Application Service)不可用。
(1)硬件故障、
(2)程序BUG
(3)緩存擊穿
(4)并發(fā)請求量過大等。
2.重試加大流量。
(1)用戶重試
(2)代碼重試邏輯等。
3.服務(wù)調(diào)用者(Application Client)不可用。
(1)同步請求阻塞造成的資源耗盡等。
? ? 雪崩效應(yīng)最終的結(jié)果就是 服務(wù)鏈條中的某一個服務(wù)不可用,導(dǎo)致一系列的服務(wù)不可用,最終造成服務(wù)邏輯崩潰。這種問題造成的后果,往往是無法預(yù)料的。

三、如何防止災(zāi)難性雪崩效應(yīng)
1、降級
? ? ? 降級是指,當(dāng)請求超時、資源不足等情況發(fā)生時進行服務(wù)降級處理,不調(diào)用真實服務(wù)邏輯,而是使用快速失?。╢allback)方式直接返回一個托底數(shù)據(jù),保證服務(wù)鏈條的完整,避免服務(wù)雪崩。
2、熔斷
? ? ? 當(dāng)一定時間內(nèi),異常請求比例(請求超時、網(wǎng)絡(luò)故障、服務(wù)異常等)達到閥值時,啟動熔斷器,熔斷器一旦啟動,則會停止調(diào)用具體服務(wù)邏輯,通過fallback快速返回托底數(shù)據(jù),保證服務(wù)鏈的完整。
3、請求緩存
? ? ? Hystrix為了降低訪問服務(wù)的頻率,支持將一個請求與返回結(jié)果做緩存處理。如果再次請求的URL沒有變化,那么Hystrix不會請求服務(wù),而是直接從緩存中將結(jié)果返回。這樣可以大大降低訪問服務(wù)的壓力。
4、請求合并
1.沒有請求合并
Application Service 負載是Application Client發(fā)送請求的總數(shù)量
2.請求合并
把一段時間范圍內(nèi)的所有請求合并為一個請求。大大的降低了Application Service 負載。
5、隔離
1.線程池隔離
2.信號量隔離
3.線程池隔離和信號量隔離
4.限流說明
四、Hystrix簡介
? ? 在Spring Cloud中解決災(zāi)難性雪崩效應(yīng)就是通過Spring Cloud Netflix Hystrix實現(xiàn)的。
? ? Hystrix [h?st'r?ks],中文含義是豪豬,因其背上長滿棘刺,從而擁有了自我保護的能力。本文所說的Hystrix(中文:斷路器)是Netflix開源的一款容錯框架,同樣具有自我保護能力。
? ? 通俗解釋:Hystrix就是保證在高并發(fā)下即使出現(xiàn)問題也可以保證程序繼續(xù)運行的一系列方案。作用包含兩點:容錯和限流。
? ? 在Spring cloud中處理服務(wù)雪崩效應(yīng),都需要依賴hystrix組件。在Application Client應(yīng)用的pom文件中都需要引入下述依賴:
<dependency>
? ? ? ? ? ?<groupId>org.springframework.cloud</groupId>
? ? ? ? ? ?<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
通過使用Hystrix,我們能方便的防止雪崩效應(yīng), 同時使系統(tǒng)具有自動降級和自動恢復(fù)服務(wù)的效? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 果.

詳細解決方法可以觀看上方視頻,免費領(lǐng)取源代碼資料哦~