? 1友鼻、什么是Hystrix逸尖?
??? 在分布式的環(huán)境或者微服務(wù)中,不可避免的會(huì)出現(xiàn)一些錯(cuò)誤素标,一個(gè)服務(wù)的失敗或許會(huì)導(dǎo)致整個(gè)項(xiàng)目的失敗称诗。而Hystrix是一個(gè)庫,它可以通過添加容錯(cuò)邏輯來保護(hù)或者控制你的分布式服務(wù)之間的交互头遭。Hystrix通過隔離服務(wù)之間的訪問點(diǎn)寓免,阻止它們之間的級(jí)聯(lián)故障以及提供后備選項(xiàng)來實(shí)現(xiàn)這一目標(biāo),所有這些都可以提高系統(tǒng)的整體彈性计维。
? 2袜香、Hystrix出現(xiàn)的目的?
? ? ? ? Hystrix出現(xiàn)的目的包括以下幾個(gè)方面:
? ? ? ? (1)通過第三方客戶端庫訪問依賴關(guān)系鲫惶,以防止和控制延遲或故障蜈首;
? ? ? ? (2)在復(fù)雜的分布式系統(tǒng)中,快速的故障并及時(shí)的修復(fù)欠母,防止級(jí)聯(lián)故障欢策;
? ? ? ? (3)在可能的情況下,后退并優(yōu)雅的降級(jí)艺蝴;
? ? ? ? (4)實(shí)現(xiàn)近實(shí)時(shí)監(jiān)控猬腰、警報(bào)或者控制;
? 3猜敢、分布式系統(tǒng)的簡(jiǎn)單模型姑荷?
? ? ? ? 在一切正常的情況下,分布式系統(tǒng)的請(qǐng)求流如下圖所示:(來自Hystrix的官網(wǎng)wiki)
? ? ? ? 但是鼠冕,如果其中的任何一條服務(wù)不可用的時(shí)候,都有可能會(huì)導(dǎo)致整個(gè)用戶請(qǐng)求被阻塞胯盯。
? ? ? ? 應(yīng)用程序中通過網(wǎng)絡(luò)或者可能導(dǎo)致網(wǎng)絡(luò)請(qǐng)求進(jìn)入客戶端庫的每個(gè)點(diǎn)都有可能會(huì)發(fā)生故障懈费。比故障更可怕的是,這些應(yīng)用程序可能會(huì)導(dǎo)致服務(wù)之間的延遲增加博脑,從而備份隊(duì)列憎乙、線程或其他系統(tǒng)故障,最后可能導(dǎo)致主線程池被沾滿叉趣,導(dǎo)致整個(gè)服務(wù)不可用泞边。這類似于雪崩效應(yīng)。
? 4疗杉、雪崩效應(yīng)產(chǎn)生的原因阵谚?
? ? ? ? 服務(wù)提供者不可用,是產(chǎn)生雪崩效應(yīng)的重要原因之一。還有以下幾個(gè)原因梢什,會(huì)產(chǎn)生此效應(yīng):
服務(wù)調(diào)用者自身流量激增奠蹬,導(dǎo)致系統(tǒng)負(fù)載升高。比如異常流量嗡午、用戶重試囤躁、代碼邏輯重復(fù)
緩存到期刷新,使得請(qǐng)求都流向數(shù)據(jù)庫
重試機(jī)制翼馆,比如我們r(jià)pc框架的retry次數(shù)割以,每次重試都可能會(huì)進(jìn)一步惡化服務(wù)提供者
硬件故障,比如機(jī)房斷電应媚,電纜被挖了….
? 5严沥、Ribbon整合Hystrix
? ? ? ? 首先在配置文件中添加響應(yīng)的依賴:
? ? ? ? 在啟動(dòng)類中加入注解:@EnableHystrix
? ? ? ? 在需要做熔斷的類上添加一下注解。其中fallbackMethod屬性表示:當(dāng)方法發(fā)生錯(cuò)誤時(shí)中姜,會(huì)跳到我們自己定義的findBasicDataByTypeFallBack方法中進(jìn)行處理消玄。這樣的話當(dāng)服務(wù)發(fā)生錯(cuò)誤時(shí),就會(huì)去執(zhí)行我們自己定義的方法丢胚,返回一個(gè)結(jié)果翩瓜,不會(huì)導(dǎo)致整個(gè)服務(wù)不可用。