hystrix断路器引发的相关概念
1 分布式系統(tǒng)面臨的問題
多個微服務(wù)之間調(diào)用的時候,假設(shè)微服務(wù)A調(diào)用微服務(wù)B和微服務(wù)C,微服務(wù)B和微服務(wù)C又調(diào)用其它的微服務(wù),這就是所謂的"扇出”,如果扇出的鏈路上某個微服務(wù)的調(diào)用響應(yīng)時間過長或者不可用,對微服務(wù)A的調(diào)用就會占用越來越多的系統(tǒng)資源,進而引起系統(tǒng)崩潰,所謂的“雪崩效應(yīng)”,對于高流量的應(yīng)用來說,單一 的后端依賴可能會導(dǎo)致所有服務(wù)器上的所有資源都在幾秒鐘內(nèi)飽和。比失敗更糟糕的是,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加,備份隊列,線程和其他系統(tǒng)資源緊張,導(dǎo)致整個系統(tǒng)發(fā)生更多的級聯(lián)故障。這些都表示需要對故障和延遲進行隔離和管理,以便單個依賴關(guān)系的失敗,不能取消整個應(yīng)用程序或系統(tǒng)。所以, 通常當(dāng)你發(fā)現(xiàn)一個模塊下的某個實例失敗后,這時候這個模塊依然還會接收流量,然后這個有問題的模塊還調(diào)用了其他的模塊,這樣就會發(fā)生級聯(lián)故障,或者叫雪崩。
2 什么是hystrix
Hystrix是一個用于處理分布式系統(tǒng)的延遲和容錯的開源庫, 在分布式系統(tǒng)里,許多依賴不可避免的會調(diào)用失敗,比如超時、異常等,
Hystrix能夠保證在一個依賴出問題的情況下, 不會導(dǎo)致整體服務(wù)失敗,避免級聯(lián)故障,以提高分布式系統(tǒng)的彈性。
“斷路器”本身是一種開關(guān)裝置,當(dāng)某個服務(wù)單元發(fā)生故障之后,通過斷路器的故障監(jiān)控(類似熔斷保險絲) , 向調(diào)用方返回一個符合
預(yù)期的、可處理的備選響應(yīng)(FallBack)
而不是長時間的等待或者拋出調(diào)用方無法處理的異常,這樣就保證了服務(wù)調(diào)用方的線程不會
被長時間、不必要地占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。
可以干嘛
https://github.com/Netflix/Hystrix/wiki/How-To-Use
3 服務(wù)降級,熔斷,限流的區(qū)別
服務(wù)降級
服務(wù)器忙,請稍候再試,不讓客戶端等待并立刻返回一個友好提示,fallback
哪些情況會觸發(fā)降級:
- 超時
- 異常
- 宕機
- 服務(wù)熔斷
- 線程池/信號量打滿
服務(wù)熔斷
保險絲關(guān)閉,斷開,半開.
斷路器在什么情況下開始起作用
涉及到斷路器的三個重要參數(shù):快照時間窗、請求總數(shù)閥值、錯誤百分比閥值。
1:快照時間窗:斷路器確定是否打開需要統(tǒng)計一 些請求和錯誤數(shù)據(jù),而統(tǒng)計的時間范圍就是快照時間窗,默認為最近的10秒。
2: 請求總數(shù)閥值:在快照時間窗內(nèi),必須滿足請求總數(shù)閥值才有資格熔斷。默認為20,意味著在10秒內(nèi),如果該hystrix命令的調(diào)用次數(shù)不足20次,
即使所有的請求都超時或其他原因失敗,斷路器都不會打開。
3:錯誤百分比閥值:當(dāng)請求總數(shù)在快照時間窗內(nèi)超過了閥值,比如發(fā)生了30次調(diào)用,如果在這30次調(diào)用中,有15次發(fā)生了超時異常,也就是超過
50%的錯誤百分比,在默認設(shè)定50%閥值情況下,這時候就會將斷路器打開。
斷路器開啟或者關(guān)閉的條件
1. 當(dāng)滿足一定閥值的時候(默認10秒內(nèi)超過20個請求次數(shù)) 2. 當(dāng)失敗率達到一定的時候(默認10秒內(nèi)超過50%請求失敗) 3. 到達以上閥值,斷路器將會開啟 4. 當(dāng)開啟的時候,所有請求都不會進行轉(zhuǎn)發(fā) 5. 一段時間之后(默認是5秒),這個時候斷路器是半開狀態(tài),會讓其中一個請求進行轉(zhuǎn)發(fā)。如果成功,斷路器會關(guān)閉,若失敗,繼續(xù)開啟。重復(fù)4和5斷路器打開后
1:再有請求調(diào)用的時候,將不會調(diào)用主邏輯,而是直接調(diào)用降級fallback.通過斷路器,實現(xiàn)了自動地發(fā)現(xiàn)錯誤并將降級邏輯切換為主邏輯,減少響 應(yīng)延遲的效果。 2:原來的主邏輯要如何恢復(fù)呢? 對于這- -問題,hystrix也為我們實現(xiàn)了 自動恢復(fù)功能。 當(dāng)斷路器打開,對主邏輯進行熔斷之后, hystrix會啟動一個休眠時間窗,在這個時間窗內(nèi), 降級邏輯是臨時的成為主邏輯,當(dāng)休眠時間窗到期,斷路器將進入半開狀態(tài), 釋放一次請求到原來的主邏輯上,如果此次請求正常返回, 那么斷路器將繼續(xù)閉合, 主邏輯恢復(fù),如果這次請求依然有問題, 斷路器繼續(xù)進入打開狀態(tài),休眠時間窗重新計時。服務(wù)限流
秒殺高并發(fā)等操作,嚴禁一窩蜂的過來擁擠,大家排隊,一秒鐘N個,有序進行hystrix dashboard
除了隔離依賴服務(wù)的調(diào)用以外,Hystrix還提供 了準實時的調(diào)用監(jiān)控(Hystrix Dashboard),Hystrix會持續(xù)地記錄所有通過Hystrix發(fā) 起的請求的執(zhí)行信息,擬統(tǒng)計報表和圖形的形式展示給用戶,包括每秒執(zhí)行多少請求多少成功,多少失敗等。Netflix通過 hystrix-metrics-event-stream項目實現(xiàn)了對以上指標的監(jiān)控。 Spring Cloud也提供了Hystrix Dashboard的整合,對監(jiān)控內(nèi)容轉(zhuǎn)化成 可視化界面。總結(jié)
以上是生活随笔為你收集整理的hystrix断路器引发的相关概念的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm使用black作为Pyth
- 下一篇: 归并排序时间复杂度过程分析