Hystrix的正確理解方式

hystrix-logo-tagline-640.png

什么是熔斷器

熔斷器扑眉,原本是電路中在電器發(fā)生短路時的防止電路過載的開關裝置纸泄,它切斷發(fā)生短路的電路,從而防止因電路過載導致的發(fā)熱起火等災難的發(fā)生腰素。同樣的聘裁,在為服務中也可能出現(xiàn)類似電路中短路的事故發(fā)生,所以為了防止類似的災難的發(fā)生弓千,Hystrix(微服中的熔斷器)為此而被設計出來衡便。

官方的定義

以下是官方對hystrix的定義:

In a distributed environment, inevitably some of the many service dependencies will fail. Hystrix is a library that helps you control the interactions between these distributed services by adding latency tolerance and fault tolerance logic. Hystrix does this by isolating points of access between the services, stopping cascading failures across them, and providing fallback options, all of which improve your system’s overall resiliency.

以下是我的翻譯:

在分布式環(huán)境中,服務之間的調用不可避免地會失斞蠓谩(網(wǎng)絡原因镣陕、服務器異常等 )。Hystrix是一個在分布式環(huán)境中通過增加延遲性和容錯來幫助你控制這些服務之間的交互姻政。Hystrix是通過隔離服務之間的訪問呆抑,阻止服務間的連鎖故障,并提供可選項配置扶歪,所有這些旨在提高您微服系統(tǒng)的整體彈性理肺。
(以上僅表示我個人的翻譯,如果有高見歡迎評論)

Hystrix的歷史

Hystrix是由Netflix Api團隊的一個開始于2011年提高服務彈性的項目演變而來的善镰,在2012年Hystrix不斷的發(fā)展和成熟妹萨,在Netflix團隊中也有越來越多的項目使用到Hystrix.如今,在Netflix每天有成千上萬的線程分離和數(shù)百億的信號分離的調用是通過Hystrix完成的炫欺。也因此系統(tǒng)的正常運行時間和彈性得到了顯著的提高乎完。

Hystrix被設計用來做什么?
  • 提供保護和控制過度的延遲和依賴失敗品洛。
  • 在復雜的分布式系統(tǒng)中防止級聯(lián)失敗树姨。
  • 使失敗快速結束和快速恢復(Fail fast and rapidly recover)摩桶。
  • 回退和盡可能優(yōu)雅的降級。
  • 提供短近乎實時的監(jiān)控帽揪、警報和操作控制硝清。
Hystrix可以解決什么問題?

在官方文檔的介紹中舉了一個這樣的例子转晰,假設一個應用依賴30個微服務芦拿,并且這30個微服的正常運行時間高達99.99%(這對于一個微服來說表現(xiàn)已經(jīng)很不錯了)。這樣的情況下查邢,我們能得到這樣的結論:

  • 99.99的30次方 = 99.7% 正常運行時間
  • 如果有10億次請求則有3,000,000次的失敗請求
  • 即使所依賴的30個服務都表現(xiàn)很棒蔗崎,每個月還是有2小時的停機時間

這是在我們假設的依賴的服務表現(xiàn)很棒的情況下,還是會有每月2小時的宕機扰藕,在實際的生產(chǎn)環(huán)境中情況肯定要比這個更糟糕缓苛,尤其對于一些金融或是對服務穩(wěn)定要求較高的行業(yè),這樣的情況是不能允許的邓深。由此可見Hystrix在微服中的重要作用未桥。

如果所有的服務時健康的那么請求的流程如下圖:


soa-1-640.png

在流程圖中一個關于用戶的請求依賴A H I P四個服務,如果這4個服務中有個服務請求超時了庐完,那么這將會導致整個用戶請求的阻塞钢属,如果在一秒內有50個以上的這樣的請求執(zhí)行,那么以為意味著會有50個以上的請求在這秒時阻塞的,這將消耗大量的線程门躯。如下圖所示:


soa-2-640.png
soa-3-640.png

對于高訪問量的服務來說淆党,這個問題會導致,服務的資源在短時間內被耗盡讶凉。

當涉及到與第三方后臺進行交互時染乌,這些情況會變得更加糟糕。

網(wǎng)絡連接失敗或降級懂讯、服務的失敗或變慢荷憋、配置或是性能的優(yōu)化導致的服務的重新部署、客服端庫的bug,所有的這些失敗或是延遲的問題都需要被隔離和管理從而防止因某個單一的錯誤拖垮整個微服系統(tǒng)褐望。

Hystrix是依據(jù)怎樣的設計原則勒庄?
  • 防止微服中某個單一服務,消耗掉容器(如 tomcat)的所有用戶線程瘫里。
  • 減少負載和快速失敗而不是排隊实蔽。
  • 采用隔離技術(如bulkhead, swimlane,和斷路器模式)來限制任何一個依賴性的影響谨读。
  • 通過實時指標局装、監(jiān)視和警報來優(yōu)化發(fā)現(xiàn)時間。
  • 在打多算方面支持動態(tài)特性改變和配置變化的低延遲傳播從而達到優(yōu)化回復時間的目的,所以Hytrix允許您以低延遲反饋循環(huán)進行實時操作修改.
  • 保護整個依賴客戶端執(zhí)行中的失敗铐尚,而不僅僅是在網(wǎng)絡流量中拨脉。
Hystrix是如何實現(xiàn)這些目標的?
  • Hystrix 在 HystrixCommand 和 HystrixObservableCommand類 中包裝所有的對依賴服務的調用宣增,這些調用通常在一個單獨線程中執(zhí)行玫膀。(Hystrix在這用的是“命令模式”的設計模式)
  • 調用時間超過我們設置的超時時間才會被認定為超時,當然超時時間有默認值统舀,但是對于大多數(shù)依賴項匆骗,您可以通過“屬性”來自定義這些超時值,以使它們比每個依賴項的實測99.5%百分點性能略高誉简。
  • 為每個依賴維護一個小的線程池(或信號量);
    如果它變滿了,發(fā)往這個依賴關系的請求將被立即拒絕而不是排隊盟广。
  • 衡量成功闷串,失敗(客戶端拋出的異常)筋量,超時和線程拒絕烹吵。
  • 跳閘斷路器可以在一段時間內停止對特定服務的所有請求,無論是手動還是自動桨武,如果服務的錯誤百分比超過閾值肋拔。
  • 當請求失敗被拒絕、超時或短路時執(zhí)行備用邏輯呀酸。
  • 近乎實時的監(jiān)控指標和配置的更改凉蜂。

如下如圖調用外部的依賴服務必須通過包裝的command,然后通過command實現(xiàn)真正的調用。


soa-4-isolation-640.png
Hystrix工作的流程

下圖顯示了通過Hystrix向依賴服務發(fā)出請求的流程


hystrix-command-flow-chart.png

點擊查看大圖

總結

這篇文章其實大部分是依據(jù)官方文檔對Hystrix的介紹來寫的性誉,當中有我個人的理解窿吩,也可以把它作為官方介紹的中文版翻譯來看。文章中如有錯誤的地方歡迎留言错览,如果覺得這篇文章對您有用纫雁,歡迎點贊。

參考

Hystrix官方文檔介紹 https://github.com/Netflix/Hystrix/wiki

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末倾哺,一起剝皮案震驚了整個濱河市轧邪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌羞海,老刑警劉巖忌愚,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扣猫,居然都是意外死亡菜循,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來癌幕,“玉大人衙耕,你說我怎么就攤上這事∩自叮” “怎么了橙喘?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長胶逢。 經(jīng)常有香客問我厅瞎,道長,這世上最難降的妖魔是什么初坠? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任和簸,我火速辦了婚禮,結果婚禮上碟刺,老公的妹妹穿的比我還像新娘锁保。我一直安慰自己,他們只是感情好半沽,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布爽柒。 她就那樣靜靜地躺著,像睡著了一般者填。 火紅的嫁衣襯著肌膚如雪浩村。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天占哟,我揣著相機與錄音心墅,去河邊找鬼。 笑死重挑,一個胖子當著我的面吹牛嗓化,可吹牛的內容都是我干的。 我是一名探鬼主播谬哀,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼刺覆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了史煎?” 一聲冷哼從身側響起谦屑,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎篇梭,沒想到半個月后氢橙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡恬偷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年悍手,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡坦康,死狀恐怖竣付,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情滞欠,我是刑警寧澤古胆,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站筛璧,受9級特大地震影響逸绎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜夭谤,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一棺牧、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧朗儒,春花似錦陨帆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承二。三九已至榆鼠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亥鸠,已是汗流浹背妆够。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留负蚊,地道東北人神妹。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像家妆,于是被迫代替她去往敵國和親鸵荠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容