【趕快收藏】Hystrix實戰(zhàn),優(yōu)雅提升系統(tǒng)的魯棒性

背景

最近接手了一個系統(tǒng)荣挨,其功能都是查詢男韧。查詢分了兩種方式,一種是公司集團提供的查詢能力默垄,支持全國各個省份的查詢此虑,但是業(yè)務(wù)高峰期時服務(wù)響應(yīng)比較慢;另外一種是各省的分公司都分別提供了對應(yīng)的查詢能力口锭,但是服務(wù)質(zhì)量相對較差朦前,業(yè)務(wù)高峰期服務(wù)超時較多介杆,而且分公司系統(tǒng)升級時也會影響服務(wù)質(zhì)量。為了提升服務(wù)查詢的成功率韭寸,可以將兩種查詢方式結(jié)合起來春哨。比較完備方案就是優(yōu)先使用各省分公司提供的服務(wù),當分公司的服務(wù)質(zhì)量下降后降級到公司集團對應(yīng)的服務(wù)恩伺。很早就聽過Hystrix赴背,用在現(xiàn)用系統(tǒng)服務(wù)質(zhì)量提升的改造上,再適合不過了晶渠。

Hystrix簡介

Hystrix是Netflix開源的一款容錯系統(tǒng)癞尚, 能幫助開發(fā)者碼出具備強大的容錯能力和魯棒性的程序!

Hystrix功能

1乱陡、對依賴的服務(wù)(HTTP調(diào)用浇揩、SOA服務(wù))進行保護, 并且把控住由于依賴服務(wù)所帶來的的延遲和失敗憨颠。

2胳徽、防止在一個復雜的分布式系統(tǒng)里出現(xiàn)級聯(lián)失效(cascading failures)。

3爽彤、快速失斞痢(Fail fast),并且快速恢復依賴服務(wù)适篙。

4往核、優(yōu)雅的降級。

5嚷节、實時的監(jiān)控和報警聂儒。

健康狀態(tài)系統(tǒng)

請求被阻塞系統(tǒng)

?任何的RPC都可能會面臨三種情況:成功、失敗硫痰、超時衩婚。如果一次用戶請求所依賴外部服務(wù)(A,H,I,P)有任何一個不可用,就有可能導致整個用戶請求被阻塞效斑》谴海考慮到應(yīng)用容器的線程數(shù)目基本都是固定的,當在高并發(fā)的情況下缓屠,某一外部依賴的服務(wù)超時阻塞奇昙,就有可能使得整個主線程池被占滿 線程池被占滿就會導致整個服務(wù)不可用,而依賴該服務(wù)的其他服務(wù)敌完,就又可能會重復產(chǎn)生上述問題储耐。因此整個系統(tǒng)就像雪崩一樣逐漸的擴散、坍塌蠢挡、崩潰了弧岳!

艙壁隔離模式(Bulkheads)

貨船為了進行防止漏水和火災的擴散, 將船的底部劃分成一個個的艙室, 這樣一個艙室進水不會導致整艘船沉沒业踏。

服務(wù)雪崩

隔離架構(gòu)

降級-觸發(fā)fallback

1禽炬、run()/construct方法拋出非HystrixBadRequestException異常

2、run()/construct()運行超時

3勤家、熔斷器啟動

4腹尖、線程池/信號量拒絕

隔離策略

線程池隔離:會帶來線程開銷

Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ThreadPoolTestGroup"))

? ? ? .andCommandKey(HystrixCommandKey.Factory.asKey(“testCommandKey"))//與其他命名的線程池天然隔離.andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("ThreadPoolTest"))

信號量隔離:服務(wù)的并發(fā)數(shù)大于信號量閾值時將進入fallback 采用資源計數(shù)法,TryableSemaphore

.andCommandPropertiesDefaults(// 配置信號量隔離? ? HystrixCommandProperties.Setter()

? ? ? .withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE)

? ? .withExecutionIsolationSemaphoreMaxConcurrentRequests(3)

? ? ? ? // fallback(降級)調(diào)用最大的并發(fā)數(shù).withFallbackIsolationSemaphoreMaxConcurrentRequests(10))

熔斷器

熔斷相當于家里電壓過大電路的跳閘功能伐脖, 跳閘可以保護我們的電器热幔, 在代碼中類比就是將調(diào)用的服務(wù)直接給屏蔽了, 不再調(diào)用調(diào)用遠程服務(wù)器的服務(wù) 舉個栗子讼庇,配置熔斷策略為 當請求錯誤比例在5s內(nèi)>50%時绎巨, 該服務(wù)將進入熔斷狀態(tài)。

熔斷器默認工作時間,默認:5秒蠕啄, 熔斷器中斷請求5秒后會進入半打開狀態(tài), 放部分流量過去重試场勤。

熔斷器的開關(guān)能保證服務(wù)調(diào)用者在 調(diào)用異常服務(wù)時, 快速返回結(jié)果, fail fast or fallback static,避免大量的同步等待 并且熔斷器能在一段時間后 繼續(xù)偵測請求執(zhí)行結(jié)果, 提供恢復服務(wù)調(diào)用的可能。

請求結(jié)果cache

將一個請求結(jié)果緩存起來歼跟, 下一個具有相同key的請求 將直接從緩存中取出結(jié)果和媳,減少請求開銷。

?Hystrix設(shè)計點

資源隔離

熔斷器模式

命令模式

觀察者模式

RxJava

自助服務(wù)系統(tǒng)查詢改造方案

命令調(diào)用模式哈街,省端直連接口留瞳;降級調(diào)用模式,集團電商接口骚秦。

自助服務(wù)整合Hystrix后系統(tǒng)請求流程圖她倘。

參考鏈接

http://www.reibang.com/p/b9af028efebb

https://github.com/Netflix/Hystrix/wiki

https://github.com/Netflix/Hystrix/wiki/How-To-Use

https://segmentfault.com/a/1190000005988895

http://kriszhang.com/hystrix_defend_your_webapp

https://blog.51cto.com/snowtiger/2057092

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市作箍,隨后出現(xiàn)的幾起案子帝牡,更是在濱河造成了極大的恐慌,老刑警劉巖蒙揣,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靶溜,死亡現(xiàn)場離奇詭異,居然都是意外死亡懒震,警方通過查閱死者的電腦和手機罩息,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來个扰,“玉大人瓷炮,你說我怎么就攤上這事〉菡” “怎么了娘香?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵苍狰,是天一觀的道長。 經(jīng)常有香客問我烘绽,道長淋昭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任安接,我火速辦了婚禮翔忽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盏檐。我一直安慰自己歇式,他們只是感情好,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布胡野。 她就那樣靜靜地躺著材失,像睡著了一般。 火紅的嫁衣襯著肌膚如雪硫豆。 梳的紋絲不亂的頭發(fā)上豺憔,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機與錄音够庙,去河邊找鬼恭应。 笑死,一個胖子當著我的面吹牛耘眨,可吹牛的內(nèi)容都是我干的昼榛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼剔难,長吁一口氣:“原來是場噩夢啊……” “哼胆屿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起偶宫,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤非迹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纯趋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體憎兽,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年吵冒,在試婚紗的時候發(fā)現(xiàn)自己被綠了纯命。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡痹栖,死狀恐怖亿汞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揪阿,我是刑警寧澤疗我,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布咆畏,位于F島的核電站,受9級特大地震影響吴裤,放射性物質(zhì)發(fā)生泄漏旧找。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一嚼摩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矿瘦,春花似錦枕面、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至易结,卻和暖如春枕荞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背搞动。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工躏精, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鹦肿。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓矗烛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親箩溃。 傳聞我的和親對象是個殘疾皇子瞭吃,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

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