解讀Hystrix系列(一):初探Hystrix

什么是Hystrix?

Hystrix是一個庫湿故,它通過添加延遲容忍和容錯邏輯來幫助您控制這些分布式服務(wù)之間的交互阿趁。

Hystrix的設(shè)計目的如下:

  • 為通過第三方客戶端庫訪問的依賴項(通常通過網(wǎng)絡(luò))提供保護和控制延遲 和故障。
  • 停止復(fù)雜分布式系統(tǒng)中的級聯(lián)故障坛猪。
  • 故障快速恢復(fù)脖阵。
  • 在可能的情況下,后退并優(yōu)雅地降級墅茉。
  • 啟用近實時監(jiān)視命黔、警報和操作控制。

Hystrix解決了什么問題?

復(fù)雜分布式體系結(jié)構(gòu)中的應(yīng)用程序有幾十個依賴項就斤,每個依賴項在某個時候都不可避免地會失敗悍募。如果主機應(yīng)用程序沒有從這些外部故障中隔離出來,那么它就有可能與這些外部故障一起宕機战转。
例如搜立,對于一個依賴于30個服務(wù)的應(yīng)用程序,其中每個服務(wù)都有99.99%的正常運行時間槐秧,您可以這樣期望:99.9930 = 99.7%的正常運行時間(10億個請求的0.3%)= 300萬個故障(2小時以上停機/月)啄踊,即使所有依賴項都具有良好的正常運行時間。現(xiàn)實通常更糟,即使當所有依賴項都運行良好時刁标,0.01%的停機時間對幾十個服務(wù)中的每個服務(wù)的總體影響也相當于一個月潛在的停機時間,如果您不為整個系統(tǒng)服務(wù)設(shè)計彈性)颠通。

當一切正常時,請求流可以是這樣的:


soa-1-640.png

當許多后端系統(tǒng)之一成為潛在膀懈,它可以阻止整個用戶請求:


soa-2-640.png

在高并發(fā)下顿锰,一個后端依賴項出現(xiàn)問題,可能會導(dǎo)致所有服務(wù)器上的所有資源在幾秒鐘內(nèi)飽和启搂。應(yīng)用程序中通過網(wǎng)絡(luò)或客戶機庫到達可能導(dǎo)致網(wǎng)絡(luò)請求的每個點都是潛在故障的來源硼控。比故障更糟的是,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加胳赌,從而備份隊列牢撼、線程和其他系統(tǒng)資源,從而導(dǎo)致系統(tǒng)中出現(xiàn)更多級聯(lián)故障疑苫。
soa-3-640.png

當通過第三方客戶機執(zhí)行網(wǎng)絡(luò)訪問時熏版,這些問題會變得更加嚴重纷责,因為第三方客戶機是一個黑盒子,其中隱藏了實現(xiàn)細節(jié)撼短,并且可以隨時更改再膳,而且每個客戶機庫的網(wǎng)絡(luò)或資源配置都不一樣,而且常常難以監(jiān)控和更改曲横。更糟糕的是傳遞依賴關(guān)系喂柒,它在應(yīng)用程序沒有顯式調(diào)用的情況下執(zhí)行潛在的昂貴或容易出錯的網(wǎng)絡(luò)調(diào)用。網(wǎng)絡(luò)連接失敗或降級胜榔。服務(wù)和服務(wù)器失敗或變慢胳喷。新的庫或服務(wù)部署會更改行為或性能特征∝仓客戶端庫有bug吭露。所有這些都表示需要隔離和管理的故障和延遲,這樣單個故障依賴項就不會導(dǎo)致整個應(yīng)用程序或系統(tǒng)崩潰尊惰。

Hystrix的設(shè)計原則是什么?

Hystrix的工作原理是:
1.防止任何單個依賴項耗盡所有容器(例如Tomcat)的用戶線程讲竿。減少負載,快速失敗弄屡,而不是排隊题禀。
2.在可行的情況下提供回退以保護用戶免受失敗。
3.使用隔離技術(shù)(如隔板膀捷、泳道和斷路器模式)來限制任何一個依賴項的影響迈嘹。
4.通過近乎實時的指標優(yōu)化發(fā)現(xiàn)時間,通過配置更改的低延遲傳播和支持Hystrix的大多數(shù)方面的動態(tài)屬性更改(允許您使用低延遲反饋循環(huán)進行實時操作修改)全庸,監(jiān)視和警報優(yōu)化恢復(fù)時間秀仲。
5.防止整個依賴客戶端執(zhí)行中的失敗,而不僅僅是網(wǎng)絡(luò)流量中的失敗壶笼。

Hystrix是如何實現(xiàn)其目標的?

Hystrix是這樣做的:

  • 將對外部系統(tǒng)(或“依賴項”)的所有調(diào)用封裝在一個HystrixCommand或HystrixObservableCommand對象中神僵,該對象通常在單獨的線程中執(zhí)行(這是命令模式的一個例子)。
  • 超時調(diào)用所花費的時間超過您定義的閾值覆劈。有一個默認值保礼,但是對于大多數(shù)依賴項,您可以通過“屬性”自定義設(shè)置這些超時责语,以便它們比每個依賴項測量到的99.5%的性能稍微高一些炮障。
  • 為每個依賴項維護一個小線程池(或信號量);如果它滿了,針對該依賴項的請求將立即被拒絕坤候,而不是排隊铝阐。
  • 度量成功、失敗(客戶機拋出的異常)铐拐、超時和線程拒絕徘键。
  • 斷開斷路器,在一段時間內(nèi)停止對特定服務(wù)的所有請求遍蟋,如果服務(wù)的錯誤率超過閾值吹害,則手動或自動停止。
  • 當請求失敗虚青、被拒絕它呀、超時或短路時執(zhí)行回退邏輯。
  • 幾乎實時地監(jiān)視度量和配置更改棒厘。

當您使用Hystrix來包裝每個底層依賴項時纵穿,如上面的關(guān)系圖所示的體系結(jié)構(gòu)會發(fā)生類似下面的關(guān)系圖的變化。每個依賴項彼此隔離奢人,當延遲發(fā)生時受資源限制谓媒,資源可能會飽和,當依賴項中出現(xiàn)任何類型的故障時何乎,由回退邏輯決定響應(yīng):


soa-4-isolation-640.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末句惯,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子支救,更是在濱河造成了極大的恐慌抢野,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件各墨,死亡現(xiàn)場離奇詭異指孤,居然都是意外死亡,警方通過查閱死者的電腦和手機贬堵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門恃轩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扁瓢,你說我怎么就攤上這事详恼。” “怎么了引几?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵昧互,是天一觀的道長。 經(jīng)常有香客問我伟桅,道長敞掘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任楣铁,我火速辦了婚禮玖雁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盖腕。我一直安慰自己赫冬,他們只是感情好浓镜,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著劲厌,像睡著了一般膛薛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上补鼻,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天哄啄,我揣著相機與錄音,去河邊找鬼风范。 笑死咨跌,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的硼婿。 我是一名探鬼主播锌半,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼加酵!你這毒婦竟也來了拳喻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤猪腕,失蹤者是張志新(化名)和其女友劉穎冗澈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陋葡,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡亚亲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了腐缤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捌归。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖岭粤,靈堂內(nèi)的尸體忽然破棺而出惜索,到底是詐尸還是另有隱情,我是刑警寧澤剃浇,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布巾兆,位于F島的核電站,受9級特大地震影響虎囚,放射性物質(zhì)發(fā)生泄漏角塑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一淘讥、第九天 我趴在偏房一處隱蔽的房頂上張望圃伶。 院中可真熱鬧,春花似錦、人聲如沸窒朋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炼邀。三九已至魄揉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拭宁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工瓣俯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杰标,地道東北人。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓彩匕,卻偏偏與公主長得像腔剂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子驼仪,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 原文:https://my.oschina.net/7001/blog/1619842 摘要: Hystrix是N...
    laosijikaichele閱讀 4,308評論 0 25
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應(yīng)的列上鍵入重復(fù)值時掸犬,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,307評論 0 9
  • 流程圖 下圖展示了當你使用 Hystrix 來包裝你請求依賴服務(wù)時的流程: 接下來將詳細介紹如下問題: 1.構(gòu)建H...
    KingsChan閱讀 5,997評論 0 21
  • 1绪爸、什么是 Hystrix? 在分布式環(huán)境中湾碎,許多服務(wù)依賴項不可避免地將會失敗。Hystrix是一個通過添加延遲容...
    carl_zhao閱讀 836評論 0 0
  • 今天下午迷迷糊糊一覺醒來奠货,看到手機網(wǎng)頁推送的消息:楊絳先生于凌晨逝世介褥,享年105歲。 看到的消息的我递惋,腦子瞬間清醒...
    懶小妹閱讀 743評論 0 0