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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

springcloud hystrix入门简介(二)

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

Hystrix設(shè)計原則

  1.防止單個服務(wù)的故障,耗盡整個系統(tǒng)服務(wù)的容器(比如tomcat)的線程資源,避免分布式環(huán)境里大量級聯(lián)失敗。通過第三方客戶端訪問(通常是通過網(wǎng)絡(luò))依賴服務(wù)出現(xiàn)失敗、拒絕、超時或短路時執(zhí)行回退邏輯

? ? ? ?2.用快速失敗代替排隊(每個依賴服務(wù)維護一個小的線程池或信號量,當(dāng)線程池滿或信號量滿,會立即拒絕服務(wù)而不會排隊等待)和優(yōu)雅的服務(wù)降級;當(dāng)依賴服務(wù)失效后又恢復(fù)正常,快速恢復(fù)

? ? ? ?3.提供接近實時的監(jiān)控和警報,從而能夠快速發(fā)現(xiàn)故障和修復(fù)。監(jiān)控信息包括請求成功,失敗(客戶端拋出的異常),超時和線程拒絕。如果訪問依賴服務(wù)的錯誤百分比超過閾值,斷路器會跳閘,此時服務(wù)會在一段時間內(nèi)停止對特定服務(wù)的所有請求

? ? ? ?4.將所有請求外部系統(tǒng)(或請求依賴服務(wù))封裝到HystrixCommand或HystrixObservableCommand對象中,然后這些請求在一個獨立的線程中執(zhí)行。使用隔離技術(shù)來限制任何一個依賴的失敗對系統(tǒng)的影響。每個依賴服務(wù)維護一個小的線程池(或信號量),當(dāng)線程池滿或信號量滿,會立即拒絕服務(wù)而不會排隊等待

?

Hystrix特性

  1.請求熔斷:?當(dāng)Hystrix Command請求后端服務(wù)失敗數(shù)量超過一定比例(默認50%), 斷路器會切換到開路狀態(tài)(Open). 這時所有請求會直接失敗而不會發(fā)送到后端服務(wù). 斷路器保持在開路狀態(tài)一段時間后(默認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è)置的默認值或者來自緩存.告知后面的請求服務(wù)不可用了,不要再來了。

  3.依賴隔離(采用艙壁模式,Docker就是艙壁模式的一種):在Hystrix中, 主要通過線程池來實現(xiàn)資源隔離. 通常在使用的時候我們會根據(jù)調(diào)用的遠程服務(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ù)庫,提升了效率。

?

Hystrixl流程圖如下:

?

看了流程圖是不是很蒙圈我也不是很懂,先放著,等到有機會再來看。

下面我就復(fù)用了官網(wǎng)的說明做個簡單概述:

Hystrix流程說明:

?

? ? 1:每次調(diào)用創(chuàng)建一個新的HystrixCommand,把依賴調(diào)用封裝在run()方法中.
  2:執(zhí)行execute()/queue做同步或異步調(diào)用.
  4:判斷熔斷器(circuit-breaker)是否打開,如果打開跳到步驟8,進行降級策略,如果關(guān)閉進入步驟5.
  5:判斷線程池/隊列/信號量是否跑滿,如果跑滿進入降級步驟8,否則繼續(xù)后續(xù)步驟6.
  6:調(diào)用HystrixCommand的run方法.運行依賴邏輯
  6a:依賴邏輯調(diào)用超時,進入步驟8.
  7:判斷邏輯是否調(diào)用成功
  7a:返回成功調(diào)用結(jié)果
  7b:調(diào)用出錯,進入步驟8.
  8:計算熔斷器狀態(tài),所有的運行狀態(tài)(成功, 失敗, 拒絕,超時)上報給熔斷器,用于統(tǒng)計從而判斷熔斷器狀態(tài).
  9:getFallback()降級邏輯.以下四種情況將觸發(fā)getFallback調(diào)用:
    (1):run()方法拋出非HystrixBadRequestException異常。
    (2):run()方法調(diào)用超時
    (3):熔斷器開啟攔截調(diào)用
    (4):線程池/隊列/信號量是否跑滿
  9a:沒有實現(xiàn)getFallback的Command將直接拋出異常
  9b:fallback降級邏輯調(diào)用成功直接返回
  9c:降級邏輯調(diào)用失敗拋出異常
  10:返回執(zhí)行成功結(jié)果

?

?

參考:https://www.cnblogs.com/huangjuncong/p/9026949.html

總結(jié)

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

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