SpringCloudAlibaba之Sentinel流量控制


SpringCloudAlibaba微服務實戰教程系列  

一、認識下Sentinel

   Sentinel使用流程:微服務會集成Sentinel客戶端,從官方下載jar啟動作為服務端,在有配置變更和添加的時候Sentinel會發送消息給客戶端,進行變更應用。

 Sentinel 分為兩個部分:

核⼼庫:(Java 客戶端)不依賴任何框架/庫,能夠運⾏於所有 Java 運⾏時環境,同時對 Dubbo /Spring Cloud 等框架也有較好的⽀持。
控制台:(Dashboard)基於 Spring Boot 開發,打包后可以直接運⾏,不需要額外的 Tomcat 等應⽤容器。
Sentinel 具有以下 特征:
豐富的應⽤場景:Sentinel 承接了阿⾥巴巴近 10 年的雙⼗⼀⼤促流量的核⼼場景,例如秒殺(即突發流量控制在系統容量可以承受的范圍)、消息削峰填⾕、集群流量控制、實時熔斷下游不可⽤應⽤等。
完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制台中看到接⼊應⽤的單台機器秒級數據,甚⾄ 500 台以下規模的集群的匯總運⾏情況。
⼴泛的開源⽣態:Sentinel 提供開箱即⽤的與其它開源框架/庫的整合模塊,例如與 SpringCloud、Dubbo的整合。您只需要引⼊相應的依賴並進⾏簡單的配置即可快速地接⼊ Sentinel。
完善的 SPI 擴展點:Sentinel 提供簡單易⽤、完善的 SPI 擴展接⼝。您可以通過實現擴展接⼝來快速地定制邏輯。例如定制規則管理、適配動態數據源等。

sentinel資源概念,不配置spring.cloud.sentinel.eager=true參數,@RequestMapping不會別識別,懶加載模式

二、Sentinel簡單實戰 

  Sentinel官方版本下載地址: https://github.com/alibaba/Sentinel/releases 

快速下載啟動開發環境:國內朋友可以考慮使用docker配置國內鏡像源
直接執行:docker run --name sentinel -p 8858:8858 -d  bladex/sentinel-dashboard

  1、搭建Sentinel服務端

    如下下載的jar包直接執行以下命令即可啟動服務。

 java -jar sentinel-dashboard-1.7.1.jar &

     jar命令啟動完成,登錄地址 http://localhost:8080,  ⽤戶名/密碼:sentinel/sentinel

     docker啟動完成,登錄地址 http://localhost:8858,  ⽤戶名/密碼:sentinel/sentinel

  2、搭建Sentinel客戶端

   第一步、先引入pom文件,注意沒有使用maven統一管理版本號的,需要指定version字段

        <!--借用監控開放端口-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--sentinel 核⼼環境 依賴-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

   第二步、修改配置文件

    注意:dashboard 為sentinel服務的客戶端,port為客戶端自己開發端口,用於接收服務端發送的限流數據,port可以隨意更改。

spring:
    sentinel:
      transport:
        #sentinel dashboard/console 地址
        dashboard: 127.0.0.1:8858
        # sentinel會在該端⼝啟動http server,那么這樣的話,控制台定義的⼀些限流等規則才能發送傳遞過來,
        port: 8719

#暴露出來健康檢查和檢測的接口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

    第三步、啟動項目訪問Sentenl即可生效

三、Sentinel高級應用

  1、流控規則

    在Sentinel服務的管理台,會列出服務的菜單,點擊服務-->簇點鏈路-->流控,出現下圖頁面。 

 重點屬性介紹

資源名:
  默認請求路徑
針對來源:
  Sentinel可以針對調⽤者進⾏限流,填寫微服務名稱,默認default(不區分來源)
閾值類型/單機閾值
  QPS:(每秒鍾請求數量)當調⽤該資源的QPS達到閾值時進⾏限流
  線程數:當調⽤該資源的線程數達到閾值的時候進⾏限流(線程處理請求的時候,如果說業務邏輯執⾏時間很⻓,流量洪峰來臨時,會耗費很多線程資源,這些線程資源會堆積,最終可能造成服務不可⽤,進⼀步上游服務不可⽤,最終可能服務雪崩)
是否集群:
  是否集群限流
流控模式:
  直接:資源調⽤達到限流條件時,直接限流
  關聯:關聯的資源調⽤達到閾值時候限流⾃⼰
  鏈路:只記錄指定鏈路上的流量
流控效果:
  快速失敗:直接失敗,拋出異常
  Warm Up:根據冷加載因⼦(默認3)的值,從閾值/冷加載因⼦,經過預熱時⻓,才達到設置的QPS閾值
  排隊等待:勻速排隊,讓請求勻速通過,閾值類型必須設置為QPS,否則⽆效
  流控模式之關聯限流
    關聯的資源調⽤達到閾值時候限流⾃⼰,⽐如⽤戶注冊接⼝,需要調⽤身份證校驗接⼝(往往身份證校驗接⼝),如果身份證校驗接⼝請求達到閾值,使⽤關聯,可以對⽤戶注冊接⼝進⾏限流。
  流控模式之鏈路限流
    鏈路指的是請求鏈路(調⽤鏈)
    鏈路模式下會控制該資源所在的調⽤鏈路⼊⼝的流量。需要在規則中配置⼊⼝資源,即該調⽤鏈路⼊⼝的上下⽂名稱。
  Warm Up 模式(預熱模式)
    預熱讓通過的流量緩慢n秒內增加,經過設置的預熱時間以后,到達系統處理請求速率的設定值。Warm Up 模式默認會從設置的 QPS 閾值的 1/3 開始慢慢往上增加⾄ QPS 設置值。
  流控效果之排隊等待
    排隊等待模式下會嚴格控制請求通過的間隔時間,即請求會勻速通過,允許部分請求排隊等待,通常⽤於消息隊列削峰填⾕等場景。需設置具體的超時時間,當計算的等待時間超過超時時間時請求就會被拒絕。 

  2、Sentinel 降級規則模塊

RT(平均響應時間 )
  當 1s 內持續進⼊ >=5 個請求,平均響應時間超過閾值(RT以 ms 為單位),那么在接下的時間窗⼝(以 s 為單位)之內,對這個⽅法的調⽤都會⾃動地熔斷(拋出 DegradeException)。注意Sentinel 默認統計的 RT 上限是 4900 ms,超出此閾值的都會算作 4900 ms,若需要變更此上限可以通過啟動配置項 -Dcsp.sentinel.statistic.max.rt=xxx 來配置。
異常⽐例
  當資源的每秒請求量 >= 5,並且每秒異常總數占通過量的⽐值超過閾值之后,資源進⼊降級狀態,即在接下的時間窗⼝(以 s 為單位)之內,對這個⽅法的調⽤都會⾃動地返回。異常⽐率的閾值范圍是 [0.0, 1.0] ,代表 0% - 100%。
異常數
  當資源近 1 分鍾的異常數⽬超過閾值之后會進⾏熔斷。注意由於統計時間窗⼝是分鍾級別的,若timeWindow ⼩於 60s,則結束熔斷狀態后仍可能再進⼊熔斷狀態。

  3、Sentinel ⾃定義兜底邏輯

    注意:兜底⽅法非本類需要為static靜態⽅法,同時指定資源類,可以為當前類的非靜態方法,blockHandler保持返回值與參數一致的同時在添加com.alibaba.csp.sentinel.slots.block.BlockException類型的參數,用於接收sentinel異常,fallback方法為java異常返回方法

     @SentinelResource注解類似於Hystrix中的@HystrixCommand注解

    @SentinelResource注解中有兩個屬性需要我們進⾏區分,blockHandler屬性⽤來指定不滿⾜Sentinel規則的降級兜底⽅法,fallback屬性⽤於指定Java運⾏時異常兜底⽅法
@SentinelResource 注解常用屬性
  value:定義資源名唯一或共享(針對接口級別線程池)
  blockHandlerClass:指定Sentinel規則異常兜底邏輯所在class類
  blockHandler:指定Sentinel規則異常兜底邏輯具體哪個⽅法
  fallbackClass:指定Java運⾏時異常兜底邏輯所在class類
  fallback:指定Java運⾏時異常兜底邏輯具體哪個⽅法

 

 

sentinel對接nacos持久話配置 

https://www.jianshu.com/p/d36f55ef2688?utm_campaign=haruki


免責聲明!

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



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