超时机制,断路器模式简介
生活随笔
收集整理的這篇文章主要介紹了
超时机制,断路器模式简介
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用Hystrix保護應用,它是一種豪豬,他身上有很多的刺,所以他能保護自己,我們知道老外的項目,他的項目名稱往往取得比較有格調(diào),比較的生動形象,所以他可以保護這樣的一個組件,起名叫Hystrix,我們目前的架構存在什么樣的問題,到目前為止我們使用了Eureka Server,服務注冊和服務發(fā)現(xiàn),然后使用客戶端的負載均衡Ribbon,完成了負載均衡的請求,那有這樣的一種問題,假設服務提供者響應的的都非常的慢,那服務消費者會被強制的等待,一直等到HTTP的請求超時,拋個異常,connection timeout,那在高負載,就是所謂的高并發(fā),如果不做任何的處理,資源是不是就很快耗竭掉,線程都阻塞掉了,不耗竭掉才怪呢,那有一天消費者不能接受請求了,資源耗竭了,消費者也掛掉了,我現(xiàn)在畫的圖還比較簡單,如果服務消費者還是其他服務的服務提供者呢,那他掛掉了,就會引起其他的掛掉了,一層一層的,這個就是所謂的雪崩效應
假設B是A的消費這,C是B的消費者,一開始大家都是正常的,A都掛掉了,B慢慢的資源耗竭掉了,C和D也慢慢的掛掉了,最終整個系統(tǒng)都掛掉了,這種就是所謂的級聯(lián)失敗,它會發(fā)現(xiàn)有一些術語叫級聯(lián)失敗,或者說是雪崩效應,其實指的一個基礎服務的故障導致級聯(lián)的故障,進而造成了整個系統(tǒng)的不可用
怎么去解決這些問題呢,大致上得做大兩步,第一步是超時機制,之前會強制的等待嗎,我們不做任何處理,它會強制等待,那現(xiàn)在我可能有一種超時機制,如果依賴不可用,我可能等1到2秒,我就直接返回了,那就可以一定程度上阻止資源耗竭,我們本來一個HTTP請求的超時,可能要等10秒,或者幾十秒,現(xiàn)在強制他兩秒就給我返回,這樣的話資源就不會耗竭
第二種叫斷路器模式,斷路器是每個家庭里面,他都有一個閘,跳閘,就比如你家里有電短路了,那是不是閘會跳,等到有一天把短路的情況找到了,修復了,把閘一送,整個電路又正常,這就是斷路器模式,斷路器在軟件中大概是這么一個概念,就是當依賴的服務,所謂的依賴的服務,就是B請求A,就是依賴的服務有大量的超時的時候,比如A有大量的超時,B一直去請求A有什么意義呢,沒有意義,那這個時候就可以做一些其他的事情,既然反正都是失敗,A他已經(jīng)掛掉了,就不要請求他了,直接返回一個異常,返回一個默認的值,這樣的話就避免了資源的浪費,他不去請求了,既然你不去請求,那就是實現(xiàn)快速失敗,一個斷路器他大概有三種狀態(tài),關閉,打開,半開,關閉和打開可能比較好理解,正常情況下斷路器是關閉的,正常還要走什么斷路器呢,有一天發(fā)現(xiàn)A掛掉了,他就可能走斷路器,斷路器一打開就不走A了,拋個異常,或者返回一個空,他還有一個半開始是什么樣的呢,就是說過了10分鐘,B他可能猜測,A服務是不是已經(jīng)好了,他就會進行分流,大部分還是直接返回,有異常有異常,他有一小部分的流量去請求A,然后他發(fā)現(xiàn),這個時候A的失敗率,響應的時間已經(jīng)達標了,那這個時候他把斷路器的狀態(tài)變成關閉,回到這種狀態(tài),那假設B請求A,他發(fā)現(xiàn)A還是沒有達標,請求還是一大堆的超時,請求的失敗率還是很高,那他就會繼續(xù)把斷路器的狀態(tài)變成一個打開的狀態(tài),我們已經(jīng)提出了一個解決方案,但是這畢竟是理論,理論和實踐只有一步之遙,但是把理論變成實踐,往往是非常艱難的,實現(xiàn)超時機制和實現(xiàn)斷路器模式,他都是很有難度很有挑戰(zhàn)性的
那在開源世界中呢,Hystrix就是實現(xiàn)了超時機制和斷路器模式的組件,我們來討論一下,實現(xiàn)斷路器模式他要做到幾點呢,第一他肯定要有一個監(jiān)控,就是我要監(jiān)控這些請求,B請求A的請求,他成功了多少次,他失敗了多少次,我怎樣去判斷,A是掛掉了,肯定要設置一個閾值,那要有一定的監(jiān)控,總共請求多少次,有多少次失敗,假設失敗率達到10%,斷路器打開,第二個是斷路器的狀態(tài),他得設計三種狀態(tài),打開,關閉和半開,第三個他還得分流,就是半開的時候得分流,他要留一小部分的去嘗試請求,A服務,第四是自我修復,其實還是一個狀態(tài)的切換,他發(fā)現(xiàn)A已經(jīng)達標了,我需要的閾值了,這個時候我就把斷路器變成關閉,我把斷路器變成依然可以打開,所以實現(xiàn)斷路器是很困難的,那實現(xiàn)超時的話,就是強制的一個超時機制,每一個請求都要進行一個超時,斷路器肯定也是有超時機制的
?
總結
以上是生活随笔為你收集整理的超时机制,断路器模式简介的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Eurek Ribbon Feign常见
- 下一篇: Hystrix简介及简单代码示例