天天看點

Hystrix斷路器

熔斷器的狀态

熔斷器有三個狀态 CLOSED 、 OPEN 、 HALF_OPEN 熔斷器預設關閉狀态,當觸發熔斷後狀态變更為

OPEN ,在等待到指定的時間,Hystrix會放請求檢測服務是否開啟,這期間熔斷器會變為 HALF_OPEN 半

開啟狀态,熔斷探測服務可用則繼續變更為 CLOSED 關閉熔斷器。

Hystrix斷路器

Closed :關閉狀态(斷路器關閉),所有請求都正常通路。代理類維護了最近調用失敗的次數,

如果某次調用失敗,則使失敗次數加1。如果最近失敗次數超過了在給定時間内允許失敗的門檻值,

則代理類切換到斷開(Open)狀态。此時代理開啟了一個逾時時鐘,當該時鐘超過了該時間,則切

換到半斷開(Half-Open)狀态。該逾時時間的設定是給了系統一次機會來修正導緻調用失敗的錯

誤。

Open :打開狀态(斷路器打開),所有請求都會被降級。Hystix會對請求情況計數,當一定時間

内失敗請求百分比達到門檻值,則觸發熔斷,斷路器會完全關閉。預設失敗比例的門檻值是50%,請求

次數最少不低于20次。

Half Open :半開狀态,open狀态不是永久的,打開後會進入休眠時間(預設是5S)。随後斷路

器會自動進入半開狀态。此時會釋放1次請求通過,若這個請求是健康的,則會關閉斷路器,否則

繼續保持打開,再次進行5秒休眠計時。

Hystrix斷路器

//由于這是個Fegin是以會逾時
    @HystrixCommand(fallbackMethod = "buyCallBack")
    @RequestMapping(value = "/buy/{id}",method = RequestMethod.GET)
    public Product findById(@PathVariable Long id) {
        Product product = null;
        if(id !=1 ) {
             throw new RuntimeException("太忙了");
        }
        //product = restTemplate.getForObject("http://service-product/product/1",Product.class);
        product = productFeignClient.findById(id);
        return product;
    }      

熔斷器的預設觸發門檻值是20次請求,不好觸發。休眠時間時5秒,時間太短,不易觀察,為了測試方

便,我們可以通過配置修改熔斷政策:

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000 #預設的連接配接逾時時間1秒,若1秒沒有傳回資料,自動的觸發降級邏輯
      circuitBreaker:
        enabled: true
        requestVolumeThreshold: 5
        errorThresholdPercentage: 10
        sleepWindowInMilliseconds: 10000      

我們瘋狂通路id為1的請求時(超過10次),就會觸發熔斷。斷路器會端口,一切請求都會被降級處理。

此時你通路id為2的請求,會發現傳回的也是失敗,而且失敗時間很短,隻有20毫秒左右:

 注:方法上一定要有降級的方法,不然監控不到。而且假如是HystrixCommand這個注解都支援,假如是

和Fegin結合的話,報錯的地方互動的後面,前面是沒有用的

Hystrix斷路器
Hystrix斷路器
Hystrix斷路器

 熔斷器的隔離政策

微服務使用Hystrix熔斷器實作了服務的自動降級,讓微服務具備自我保護的能力,提升了系統的穩定

性,也較好的解決雪崩效應。其使用方式目前支援兩種政策:

線程池隔離政策: 使用一個線程池來存儲目前的請求,線程池對請求作處理,設定任務傳回處理超

時時間,堆積的請求堆積入線程池隊列。這種方式需要為每個依賴的服務申請線程池,有一定的資

源消耗,好處是可以應對突發流量(流量洪峰來臨時,處理不完可将資料存儲到線程池隊裡慢慢處理)

信号量隔離政策: 使用一個原子計數器(或信号量)來記錄目前有多少個線程在運作,請求來先判

斷計數器的數值,若超過設定的最大線程個數則丢棄改類型的新請求,若不超過則執行計數操作請

求來計數器+1,請求傳回計數器-1。這種方式是嚴格的控制線程且立即傳回模式,無法應對突發

流量(流量洪峰來臨時,處理的線程超過數量,其他的請求會直接傳回,不繼續去請求依賴的服

務)

線程池和型号量兩種政策功能支援對比如下:

Hystrix斷路器