日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

springcloud hystrix概述(一)

發(fā)布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 springcloud hystrix概述(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:什么是Hystrix?

在分布式環(huán)境中,許多服務(wù)依賴項中的一些將不可避免地失敗。Hystrix是一個庫,通過添加延遲容差和容錯邏輯來幫助您控制這些分布式服務(wù)之間的交互。Hystrix通過隔離服務(wù)之間的訪問點,停止其間的級聯(lián)故障以及提供回退選項,從而提高系統(tǒng)的整體彈性。

Hystrix旨在執(zhí)行以下操作

1:對通過第三方客戶端庫訪問(通常通過網(wǎng)絡(luò))的依賴關(guān)系提供保護并控制延遲和故障。

2:隔離復(fù)雜分布式系統(tǒng)中的級聯(lián)故障。

3:快速發(fā)現(xiàn)故障,盡快恢復(fù)。

4:回退,盡可能優(yōu)雅地降級。

5:啟用近實時監(jiān)控,警報和操作控制。

二:為什么需要Hystrix?

分布式系統(tǒng)所面臨的分體:大型分布式系統(tǒng)中,一個客戶端或者服務(wù)依賴外部服務(wù),如果一個服務(wù)宕了,那么由于我們設(shè)置了服務(wù)調(diào)用系統(tǒng)超時時間,勢必會影響相應(yīng)時間,在高并發(fā)的情況下大多數(shù)服務(wù)器的線程池就出現(xiàn)阻塞(BLOCK),影響整個線上服務(wù)的穩(wěn)定性。嚴(yán)重會產(chǎn)生服務(wù)雪崩

服務(wù)雪崩效應(yīng):

? ? ? ? ?多個微服務(wù)之間調(diào)用的時候,假設(shè)微服務(wù)A服務(wù)調(diào)用微服務(wù)B服務(wù)和C服務(wù),微服務(wù)B和微服務(wù)C又調(diào)用其他微服務(wù),這就是所謂的 "扇出" 。如果扇出的鏈路上某個微服務(wù)的調(diào)用響應(yīng)時間過長或者不可用,對微服務(wù)A的調(diào)用就會占用越來越多的的系統(tǒng)資源,進而引起系統(tǒng)資源崩潰,這就是所謂的雪崩效應(yīng)。

(圖片官方圖片)

當(dāng)一切都健康時,請求可以看起來像這樣

?

下圖A? ?P? ?H? ? I? 四個服務(wù),如果I服務(wù)超時會出現(xiàn)什么情況呢?

當(dāng)許多后端服務(wù)系統(tǒng)中的一個宕掉時或者響應(yīng)超時,整個用戶請求:

如果多個客戶端調(diào)用同一個異常服務(wù)的時候,出現(xiàn)的情況是:

?

?

?

?

?

三:Hystrix解決什么問題?

分布式架構(gòu)中的應(yīng)用程序具有幾十個依賴關(guān)系,每個依賴關(guān)系在某個時刻將不可避免的出現(xiàn)異常。如果應(yīng)用程序不與這些外部故障隔離,則可能出現(xiàn)線程池阻塞,引起系統(tǒng)雪崩。

例如,對于依賴30個服務(wù)的應(yīng)用程序,每個服務(wù)的正常運行時間為99.99%,您可以:

99.99%的30次方 = 99.7%正常運行時間

0.3%的10億次請求= 3,000,000次故障

2+小時宕機/月,即使所有依賴關(guān)系正常運行時間。

當(dāng)使用Hystrix進行熔斷后,每個依賴關(guān)系彼此隔離了,限制了當(dāng)發(fā)生延遲時的阻塞。

?

四:Hystrix能干嘛

 1.請求熔斷: 當(dāng)Hystrix Command請求后端服務(wù)失敗數(shù)量超過一定比例(默認(rèn)50%), 斷路器會切換到開路狀態(tài)(Open). 這時所有請求會直接失敗而不會發(fā)送到后端服務(wù). 斷路器保持在開路狀態(tài)一段時間后(默認(rèn)5秒), 自動切換到半開路狀態(tài)(HALF-OPEN).這時會判斷下一次請求的返回情況, 如果請求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN). Hystrix的斷路器就像我們家庭電路中的保險絲, 一旦后端服務(wù)不可用, 斷路器會直接切斷請求鏈, 避免發(fā)送大量無效請求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測并恢復(fù)的能力.2.服務(wù)降級:Fallback相當(dāng)于是降級操作. 對于查詢操作, 我們可以實現(xiàn)一個fallback方法, 當(dāng)請求后端服務(wù)出現(xiàn)異常的時候, 可以使用fallback方法返回的值. fallback方法的返回值一般是設(shè)置的默認(rèn)值或者來自緩存.告知后面的請求服務(wù)不可用了,不要再來了。3.依賴隔離(采用艙壁模式,Docker就是艙壁模式的一種):在Hystrix中, 主要通過線程池來實現(xiàn)資源隔離. 通常在使用的時候我們會根據(jù)調(diào)用的遠(yuǎn)程服務(wù)劃分出多個線程池.比如說,一個服務(wù)調(diào)用兩外兩個服務(wù),你如果調(diào)用兩個服務(wù)都用一個線程池,那么如果一個服務(wù)卡在哪里,資源沒被釋放后面的請求又來了,導(dǎo)致后面的請求都卡在哪里等待,導(dǎo)致你依賴的A服務(wù)把你卡在哪里,耗盡了資源,也導(dǎo)致了你另外一個B服務(wù)也不可用了。這時如果依賴隔離,某一個服務(wù)調(diào)用A B兩個服務(wù),如果這時我有100個線程可用,我給A服務(wù)分配50個,給B服務(wù)分配50個,這樣就算A服務(wù)掛了,我的B服務(wù)依然可以用。4.請求緩存:比如一個請求過來請求我userId=1的數(shù)據(jù),你后面的請求也過來請求同樣的數(shù)據(jù),這時我不會繼續(xù)走原來的那條請求鏈路了,而是把第一次請求緩存過了,把第一次的請求結(jié)果返回給后面的請求。5.請求合并:我依賴于某一個服務(wù),我要調(diào)用N次,比如說查數(shù)據(jù)庫的時候,我發(fā)了N條請求發(fā)了N條SQL然后拿到一堆結(jié)果,這時候我們可以把多個請求合并成一個請求,發(fā)送一個查詢多條數(shù)據(jù)的SQL的請求,這樣我們只需查詢一次數(shù)據(jù)庫,提升了效率。

?

總結(jié)

以上是生活随笔為你收集整理的springcloud hystrix概述(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。