微服務中的服務降級熔斷限流技術:Hystrix

技術/楊33

Hystrix是一個用於處理分佈式系統的延遲和容錯的開源庫。在分佈式系統裡,由於網絡原因或者自身原因,服務並不能保證100%可用,假如某個服務出現問題,這個服務再次被請求就會出現線程阻塞,請求的數量越來越多,把線程池資源消耗完畢,服務就會出現癱瘓,由於微服務的服務與服務之間存在依賴性,所以故障會傳播,最終整個微服務體系癱瘓,這就是“雪崩”效應。

Hystrix能夠保證某個服務出問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分佈式系統的彈性。

某個服務發生故障時,通過Hystrix的故障監控,向調用方返回一個符合預期的、可處理的備選響應,而不是長時間的等待或者拋出調用方無法處理的異常。這樣就保證了服務調用方的線程不會被長時間、不必要的佔用,從而避免了故障在分佈式系統中的蔓延,乃至雪崩。

一、服務降級、服務熔斷、服務限流

  • 服務降級

服務不可用、代碼異常、接口等待時間長的時候,不讓客戶端等待,立刻返回一個友好的提示。

  • 服務熔斷

達到服務的最大訪問能力後,直接拒絕再次被訪問,然後調用服務降級的方法返回友好提示。

  • 服務限流

秒殺高併發等操作,限制一定時間內可以訪問多少服務,有序進行。

二、Java中如何使用Hystrix

Hystrix都是在服務消費者的模塊進行斷路器的相關配置。

1、pom.xml文件依賴包引入

<code> 

      org.springframework.cloud
      spring-cloud-starter-netflix-hystrix
/<code>

2、主啟動類必須添加註解@EnableCircuitBreaker,激活服務降級。

微服務中的服務降級熔斷限流技術:Hystrix

主啟動類

3、fallbackMethod參數指定系統出現問題,服務降級調用的方法名,@HystrixProperty註解可以約定該方法被調用的時間限制,比如超過3秒,就使用服務降級,調用友好提示的方法。

<code>/**
     * 系統正常提供的方法
     * @return
     */
    @HystrixCommand(fallbackMethod = "handler", commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000")
    })
    public String test() {
        return "系統目前正常";
    }

    /**
     * test()方法出現問題後被調用
     * @return
     */
    public String handler() {
        return "系統繁忙,請稍後再試!";
    }/<code>

還可以這是全局的服務降級註解@DefaultProperties(defaultFallback = "handler"),對所有方法提供統一的服務異常處理提示。

微服務中的服務降級熔斷限流技術:Hystrix


作者:楊33,北京互聯網公司在職Java開發,專注分享寫作乾貨。歡迎關注我,期待你的點贊評論。


分享到:


相關文章: