SpringCloud(H版)學習---服務降級


  前言:不端學習就是程序員的宿命。

一、概述

  參考之前鄙人博客:SpringCloud全家桶學習之斷路器---Hystrix(五)

  Hystrix的Github地址:https://github.com/Netflix/hystrix/wiki,現已停更進維

  (1)服務降級:服務器忙,請稍后再試,不讓客戶端等待並立刻返回一個友好提示,fallback。哪些情況會觸發降級?例:程序運行異常、超時、服務熔斷觸發服務降級、線程池/信號量打滿也會導致服務降級。服務的降級處理是在客戶端實現完成,與服務端沒有關系。在服務熔斷機制下,每個方法都要有一個對應的注解HystrixCommand和fallback方法,這樣顯然是不合適的,而且對本身業務也有侵入性。所以服務降級可以實現上述邏輯的解耦和分離。而這里又是面向接口編程,所以自然想到了將異常等處理邏輯與接口進行綁定,即可實現對業務本身無侵入,實現解耦。

  (2)服務熔斷:類似保險絲達到最大服務訪問后,直接拒絕訪問,然后調用服務降級的方法並返回友好提示。服務熔斷:熔斷機制是應對雪崩效應的一種微服務鏈路保護機制。當扇出鏈路的某個微服務不可用或響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的調用,快速返回“錯誤”的響應信息。當檢測到該節點的微服務調用響應正常后恢復調用鏈路。在Spring Cloud框架里熔斷機制通過Hystix實現。Hystrix會監控微服務間調用的狀況,當失敗的調用到一定的閾值,缺省是5秒內20次調用失敗就會啟動熔斷機制。熔斷機制的注解是@HystrixCommand

  熔斷類型

      ①熔斷打開:請求不再調用當前服務,內部設置一般為MTTR(平均故障處理時間),當打開長達導所設時鍾則進入半熔斷狀態

      ②熔斷關閉:熔斷關閉后不會對服務進行熔斷

      ③熔斷半開:部分請求根據規則調用當前服務,如果請求成功且符合規則則認為當前服務恢復正常,關閉熔斷

  大神論文:https://martinfowler.com/bliki/CircuitBreaker.html

  熔斷官網流程圖地址https://github.com/Netflix/Hystrix/wiki/How-it-Works

  

  流程圖分析:

  

  (3)服務限流:秒殺高並發等操作,嚴禁一窩蜂的過來擁擠,大家排隊,一秒鍾N個,有序進行。

  (4)服務監控DashBoard

 

二、服務降級

1、provider端服務降級:@HystrixCommand注解

 2、consumer端服務降級:@HystrixCommand+@EnableHystrix+配置文件

2.1 application.yml新增如下配置:

feign:
  hystrix:
    # 在feign中開啟Hystrix
    enabled: true

2.2主啟動類添加@EnableHystrix

2.3使用@HystrixCommand注解

 3、全局服務降級

 4、通配服務降級FeignFallback

使用方式:實現Feign接口並交由Spring容器管理,@FeignClient注解添加Fallback屬性

 

三、服務熔斷

1、代碼實現

HystrixCommandProperties查看配置

2、測試及分析

 分析:

(1)斷路器在什么情況下開始起作用?

 涉及到斷路器的三個重要參數:快照時間窗、請求總數閾值、錯誤百分比閾值

   1、快照時間窗:斷路器確定是否打開需要統計一些請求和錯誤數據,而統計的時間范圍就是快照時間窗,默認為最近的10秒。

   2、請求總數閾值:在快照時間窗內,必須滿足請求總數閾值才有資格熔斷。默認為20,意味着在10秒內,如果該Hystrix命令的調動次數不足20次,即使所有的請求都超時或其他原因失敗,斷路器都不會打開。

   3、錯誤百分比閾值:當請求總數在快照時間窗內超過了閾值,比如發生了30次調用,如果在這30次調用中,有15次調用發生了超時異常,也就是超過了50%的錯誤百分比,在默認設定50%閾值的情況下,這時候斷路器就會打開。

(2)斷路器開啟或關閉的條件?

  1、當滿足一定閾值時(默認10秒內超過20個請求次數)

  2、當失敗率達到一定時(默認10秒內超過50%的請求失敗)

  3、到達以上閾值,斷路器將開啟

  4、當開啟時,所有請求將不會轉發

  5、一段時間后(默認是5秒),這個時候斷路器是半開狀態,會讓其中一個進行轉發。如果成功,斷路器會關閉,若失敗,繼續開啟。重復4~5

(3)斷路器開啟后

  1、再有請求調用的時候,將不會調用主邏輯,而是直接調用降級fallback,通過斷路器,實現了自動地發現錯誤並將降級邏輯切換為主邏輯,減少響應延遲的效果。

  2、原來的主邏輯要如何恢復?

    ①Hystrix實現了自我恢復的功能

    ②當斷路器打開時,Hystrix會啟動一個休眠時間窗,在這個時間窗內,降級邏輯是臨時的主邏輯

    ③當休眠時間窗到期,斷路器將進入半開狀態,釋放一次請求到原來的主邏輯上,如果此次請求正常返回,那么斷路器將閉合,主邏輯恢復;否則繼續打開狀態,休眠時間窗重新計時。

四、Hystrix圖形化DashBoard監控

  參考鄙人博客:SpringCloud全家桶學習之斷路器---Hystrix(五)Cloud升級后有坑

1、被監控的服務添加如下代碼

  否則會出現:Unable to connect to Command  Metric Stream

/**
     * 此配置是為了服務監控而配置,與服務容錯本身無觀,springCloud 升級之后的坑
     * ServletRegistrationBean因為springboot的默認路徑不是/hystrix.stream
     * 只要在自己的項目中配置上下面的servlet即可
     *
     * @return
     */
    @Bean
    public ServletRegistrationBean getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean<HystrixMetricsStreamServlet> registrationBean = new ServletRegistrationBean<>(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
View Code

2、DashBoard Web界面

簡記:7色,1圈,1線

  7個顏色分別對應有英文提示說明;

  1圈越大,說明該服務的訪問頻率越高,流量壓力也比較大;

  1線就很明顯了,實時的調用頻率。

  說明:

    ①實心圓:兩層含義,它通過顏色的變化代表了實例的健康程度,它的健康程度從綠色<黃色<橙色<紅色依次遞減。此外,它的大小也會根據實例的請求流量發生變化,流量越大該實心圓就越大。所以通過實心圓的展示,就可以在大量的實例中快速的發現故障實例和高壓力實例。

    ②曲線:用來記錄2分鍾內的相對變化,可以通過它來觀察到流量的上升和下降趨勢

 

Github地址:https://github.com/Simple-Coder/cloud2020


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM