微服務組件詳解——sentinel

1.啟動sentinel:

下載jar sentinel-dashboard-1.8.0.jar

使用以下命令直接運行 jar 包(JDK 版本必須≥ 1.8):

java -Dserver.port=9999 -jar D:\sentinel-dashboard-1.8.0.jar

控制臺訪問地址:http://localhost:9999,默認賬號密碼都為 sentinel/sentinel

1.導入依賴:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2.在alibaba-user-consumer-8090項目的application.yml編寫代碼
spring:cloud:sentinel:transport:port: 8719 #sentinel控制臺端口dashboard: 127.0.0.1:9999 #sentinel控制臺地址enable: true #開啟sentinel 默認trueeager: true #取消控制臺懶加載 立即初始化
3.監控

這個是實時刷新的,所以點擊網址之后等幾秒就行

2.流量控制

普通流控:

資源名:請求路徑

閾值類型: QPS: 即每秒查詢率, 線程數:用

因為是用手測試,所以選QPS

效果:會顯示429代表 “Too Many Requests”,即 “請求過多”

關聯:(反向關聯):

點擊高級選項

當sout的閾值超過到1時,demo不可用。(吧demo的資源節省出來給sout)

流控效果:

快速失敗:拋異常

方式是默認的流量控制方式,當QPS超過任意規則的閾值后,新的請求就會被立即拒絕,拒絕方

式為拋出 FlowException 。

WarmUp:慢慢增加到閾值

WarmUp 旨在避免因為流量突增或系統負載過高導致的拒絕服務問題。通過“熱身”過程,系統逐步適應流量的增加,避免瞬間流量過載。

通過動態控制請求的通過率(例如,限制請求的通過比例),逐漸放開流量限制,避免系統立即面對過多請求的壓力。

例如,可以設定初始通過率為 20%,然后逐步提升到 100%,這樣系統就能平穩適應流量增長。

排隊等待:勻速排隊處理

排隊等待 是 Sentinel 提供的另一種流量控制策略,用于限制并發請求的數量,并確保在系統負載較高時不會直接拒絕請求,而是讓請求在隊列中等待,直到系統能夠處理它們。

注意:勻速排隊模式暫時不支持 QPS > 1000 的場景

3.熔斷降級:

這里還沒寫熔斷降級的方法,

選項解析:

最大RT:默認毫秒,請求超出時長

比例閾值:: 當每秒請求量>=N(可配置),并且每秒異常總數占通過量的比值超過閾值之后,進入降級狀

態。取值范圍[0.0,1.0] 代表0%-100%(如:設置為0.2,如果請求異常數超過20%則進入降級)

最小請求數:請求數小于該值時即使異常比率超出閾值也不會熔斷

熔斷策略:
1.慢調用比例:

當單位統計時長

( statIntervalMs )內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接

下來的熔斷時長內請求會自動被熔斷降級。

2.異常比例:

請求異常數超過0.2(20%)就降級

3.異常數:

當單位統計時長內的異常數目超過閾值之后會自動進行熔斷。經過熔斷

時長后熔斷器會進入探測恢復狀態(HALF-OPEN 狀態),若接下來的一個請求成功完成(沒有錯

誤)則結束熔斷,否則會再次被熔斷。

4.熱點參數限流:

熱點參數限流例子:比如說id為3的商品特別火爆,需要進行限流,但是其他id的商品一般不需要限流

資源名:需要在consumer中的方法上設置@SentinelResource注解

參數索引:就是第幾個參數,從0開始

單機閾值:就是正常情況下允許的點擊量

限流閾值:就是限流情況下允許的點擊量

5.@SentinelResource

@SentinelResource 用于定義資源,并提供可選的異常處理和 fallback 配置項。 @SentinelResource

注解包含以下屬性:

value:資源名稱,必需項(不能為空)

entryTypeentry 類型,可選項(默認為 EntryType.OUT)

blockHandler / blockHandlerClass: blockHandler 對應處理 BlockException 的函數名稱,可

選項。blockHandler 函數訪問范圍需要是 public,返回類型需要與原方法相匹配,參數類型需要

和原方法相匹配并且最后加一個額外的參數,類型為 BlockException。blockHandler 函數默認需

要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 blockHandlerClass 為對應的

類的 Class 對象,注意對應的函數必需為 static 函數,否則無法解析。

fallback:fallback 函數名稱,可選項,用于在拋出異常的時候提供 fallback 處理邏輯。fallback

函數可以針對所有類型的異常(除了 exceptionsToIgnore 里面排除掉的異常類型)進行處理。

fallback 函數簽名和位置要求:

返回值類型必須與原函數返回值類型一致;

方法參數列表需要和原函數一致,或者可以額外多一個 Throwable 類型的參數用于接收對應的異

常。

fallback 函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定

fallbackClass 為對應的類的 Class 對象,注意對應的函數必需為 static 函數,否則無法解析。

defaultFallback(since 1.6.0):默認的 fallback 函數名稱,可選項,通常用于通用的 fallback

邏輯(即可以用于很多服務或方法)。默認 fallback 函數可以針對所以類型的異常(除了

exceptionsToIgnore 里面排除掉的異常類型)進行處理。若同時配置了 fallback 和

defaultFallback,則只有 fallback 會生效。defaultFallback 函數簽名要求:

返回值類型必須與原函數返回值類型一致;

方法參數列表需要為空,或者可以額外多一個 Throwable 類型的參數用于接收對應的異常。

defaultFallback 函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定

fallbackClass 為對應的類的 Class 對象,注意對應的函數必需為 static 函數,否則無法解析。

exceptionsToIgnore(since 1.6.0):用于指定哪些異常被排除掉,不會計入異常統計中,也不會

進入 fallback 邏輯中,而是會原樣拋出

fallback屬性:

因為使用熱點參數限流以后如果超了閾值就會報500,ParamFlowException異常,所以我們要處理這個異常

注意:
  1. fallback 方法可以在同一個類中定義,也可以在其他類中定義。如果在其他類中定義,則需要通過 fallbackClass 屬性指定該類
  2. 返回類型:fallback 方法的返回類型必須與被保護的方法相同
  3. fallback 方法應該為 public,以便 Sentinel 框架能夠調用它
  4. 參數列表:fallback 方法可以有以下幾種參數組合:不帶參數。只有一個 Throwable 類型的參數,用于接收捕獲到的異常。包含原始方法的所有參數和一個 Throwable 類型的參數。
    @SentinelResource(value = "demo",fallback = "fallback")@GetMapping("/demo")public ResultAJAX demo(Integer id) {System.out.println("這是方法demo——————————————————————————————"+id);return ResultAJAX.success();}public ResultAJAX fallback(Integer id) {return ResultAJAX.error("這是方法fallback,用來解決ParamFlowException異常");}

這樣就不會直接報500,而是報我們自定義設置的message

blockHandler屬性:

blockHandler 對應處理 BlockException 的函數名稱,可選項。blockHandler 函數訪問范圍需要是 public,返回類型需要與原方法相匹配,參數類型需要 和原方法相匹配并且最后加一個額外的參數,類型為 BlockException。blockHandler 函數默認需要和原方法在同一個類中。若希望使用其他類的函數,則可以指定 blockHandlerClass 為對應的 類的 Class 對象,注意對應的函數必需為 static 函數,否則無法解析。

ParamFlowException 熱點參數異常

DegradeException熔斷降級異常

FlowException流控異常處理

    @SentinelResource(value = "demo",blockHandler = "blockHandler")//@GetMapping("/demo")public ResultAJAX demo(Integer id) {System.out.println("這是方法demo——————————————————————————————"+id);return ResultAJAX.success();}public ResultAJAX blockHandler(Integer id, BlockException e) {//異常類型判斷//流控異常if (e instanceof FlowException) {return ResultAJAX.error("ParamFlowException異常流控異常處理");}//熔斷降級異常處理if (e instanceof DegradeException) {return ResultAJAX.error("熔斷降級處理");}//熱點參數異常if (e instanceof ParamFlowException) {return ResultAJAX.error("ParamFlowException異常流控異常處理");}return ResultAJAX.error("系統異常"+id);}

6.基于nacos配置中心進行規則持久化:

sentinel利用nacos做持久化,然后nacos再做持久化

<!--sentinel利用nacos做持久化-->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

流量控制配置:

spring:cloud:sentinel:datasource:ds1:nacos:server-addr: 127.0.0.1:8848 #nacos地址data-id: ${spring.application.name}-flow#naocs中配置文件名稱,對應服務名,可隨意填寫(和配置中文文件一致即可)group-id: DEFAULT_GROUP #文件分組data-type: json #使用json格式rule-type: flow #使用flow限流

在配置中心配置:

流量控制,熱點參數,熔斷降級配置:

resource:資源名稱

limitApp:來源應用

grade:閾值類型,0表示線程數,1表示QPS

count:單機閾值

strategy:流控模式,0表示直接,1表示關聯,2表示鏈路

controlBehavior:流控效果,0表示快速失敗,1表示Warm Up,2表示排隊等待

clusterMode:是否集群

nacos-consume-flow配置:限流配置
[
{
"resource": "demo",
"limitApp": "default",
"grade": 1,
"count": 2,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]

bill-consumer-degrade配置:熔斷降級
[
{
"resource": "abc",
"grade": 0,
"count": 2,
"timeWindow": 1,
"minRequestAmount": 1,
"statIntervalMs": 5
}
]

bill-consumer-7790-param-flow 配置:熱點參數限流配置
[
{
"resource": "abc",
"paramIdx": 0,
"count": 10,
"burst": 5,
"duration": 1,
"controlBehavior": 0,
"maxQueueingTimeMs": 500
}
]

yml配置:

spring:application:name: nacos-consumecloud:sentinel:transport:port: 8719 #sentinel控制臺端口dashboard: 127.0.0.1:9999 #sentinel控制臺地址enable: true #開啟sentinel 默認trueeager: true #取消控制臺懶加載 立即初始化datasource:ds1: #限流配置nacos:server-addr: 127.0.0.1:8848 #nacos地址data-id: "${spring.application.name}-flow" #naocs中配置文件名稱,對應服務名,可隨意填寫(和配置中文文件一致即可)group-id: DEFAULT_GROUP #文件分組data-type: json #使用json格式rule-type: flow #使用flow限流ds2: #熔斷降級配置nacos:server-addr: 127.0.0.1:8848data-id: "${spring.application.name}-degrade"group-id: DEFAULT_GROUPdata-type: jsonrule-type: degrade #指定為熔斷降級規則ds3: #熱點參數限流配置nacos:server-addr: 127.0.0.1:8848data-id: "${spring.application.name}-param-flow"group-id: DEFAULT_GROUPdata-type: jsonrule-type: param-flow

能夠在sentinel里面看到持久化的

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72531.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI數據分析:deepseek生成SQL

在當今數據驅動的時代&#xff0c;數據分析已成為企業和個人決策的重要工具。隨著人工智能技術的快速發展&#xff0c;AI 驅動的數據分析工具正在改變我們處理和分析數據的方式。本文將著重介紹如何使用 DeepSeek 進行自動補全SQL 查詢語句。 我們都知道&#xff0c;SQL 查詢語…

動態規劃01背包問題系列一>目標和

目錄 題目分析及優化&#xff1a;狀態表示&#xff1a;狀態轉移方程&#xff1a;初始化&#xff1a;填表順序&#xff1a;返回值&#xff1a;代碼呈現&#xff1a;優化&#xff1a;代碼呈現&#xff1a; 題目分析及優化&#xff1a; 狀態表示&#xff1a; 狀態轉移方程&#xf…

Linux 基礎---sudo權限 修改文件所屬人、用戶所屬組

sudo 概念&#xff1a;讓普通用戶使用管理員權限執行一些操作&#xff08;root&#xff09; 在命令前加上sudo 即可 修改文件所屬人、所屬組

HMC7043和HMC7044芯片配置使用

一,HMC7043芯片 MC7043獨特的特性是對14個通道分別進行獨立靈活的相位管理。所有14個通道均支持頻率和相位調整。這些輸出還可針對50 Ω或100 Ω內部和外部端接選項進行編程。HMC7043器件具有RF SYNC功能,支持確定性同步多個HMC7043器件,即確保所有時鐘輸出從同一時鐘沿開始…

【動手實驗】TCP半連接隊列、全連接隊列實戰分析

本文是對 從一次線上問題說起&#xff0c;詳解 TCP 半連接隊列、全連接隊列 這篇文章的實驗復現和總結&#xff0c;借此加深對 TCP 半連接隊列、全連接隊列的理解。 實驗環境 兩臺騰訊云服務器 node2&#xff08;172.19.0.12&#xff09; 和 node3&#xff08;172.19.0.15&am…

Springboot整合WebSocket+Redis以及微信小程序如何調用

一、 Springboot整合WebSocket 1. 引入socket依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依賴后需要刷新maven,Websocket的版本默認跟隨S…

影刀RPA開發拓展--SQL常用語句全攻略

前言 SQL&#xff08;結構化查詢語言&#xff09;是數據庫管理和操作的核心工具&#xff0c;無論是初學者還是經驗豐富的數據庫管理員&#xff0c;掌握常用的 SQL 語句對于高效管理和查詢數據都至關重要。本文將系統性地介紹最常用的 SQL 語句&#xff0c;并為每個語句提供詳細…

大模型訓練微調技術介紹

大模型訓練微調技術是人工智能領域中的一項重要技術&#xff0c;旨在通過少量特定領域的數據對預訓練模型進行進一步訓練&#xff0c;使其更好地適應具體任務或應用場景。以下是關于大模型訓練微調技術的詳細介紹&#xff1a; 1. 微調技術的定義與意義 微調&#xff08;Fine-…

生態安全相關

概念&#xff1a;生態安全指一個國家具有支撐國家生存發展的較為完整、不受威脅的生態系統&#xff0c;以及應對內外重大生態問題的能力。 &#xff08;1&#xff09;國外生態安全的研究進展 國際上對生態安全的研究是從“環境”與“安全”之間的關系展開的。開始的階段&#x…

2024年第十五屆藍橋杯大賽軟件賽省賽Python大學A組真題解析《更新中》

文章目錄 試題A: 拼正方形(本題總分:5 分)解析答案試題B: 召喚數學精靈(本題總分:5 分)解析答案試題C: 數字詩意解析答案試題D:回文數組試題A: 拼正方形(本題總分:5 分) 【問題描述】 小藍正在玩拼圖游戲,他有7385137888721 個2 2 的方塊和10470245 個1 1 的方塊,他需…

《張一鳴,創業心路與算法思維》

張一鳴&#xff0c;多年如一日的閱讀習慣。 愛讀人物傳記&#xff0c;稱教科書式人類知識最濃縮的書&#xff0c;也愛看心理學&#xff0c;創業以及商業管理類的書。 馮侖&#xff0c;王石&#xff0c;聯想&#xff0c;杰克韋爾奇&#xff0c;思科。 《喬布斯傳》《埃隆馬斯…

策略模式處理

首先&#xff0c;定義接口或抽象父類。例如&#xff0c;定義一個Strategy接口&#xff0c;里面有execute方法。然后不同的策略類實現這個接口&#xff0c;比如ConcreteStrategyA、ConcreteStrategyB等&#xff0c;每個類用Component注解&#xff0c;可能指定Bean的名字&#xf…

go程序中使用pprof增加程序監控功能

1.什么是 pprof&#xff1f; pprof 是 Go 內置的性能分析工具&#xff0c;用于生成程序運行時的性能分析數據。它可以幫助開發者分析&#xff1a; CPU 使用情況 內存分配情況 Goroutine 狀況 系統調用分析等 2. 如何使用 pprof&#xff1f; 要使用 pprof&#xff0c;首先需要在…

javaweb自用筆記:Vue

Vue 什么是vue vue案例 1、引入vue.js文件 2、定義vue對象 3、定義vue接管的區域el 4、定義數據模型data 5、定義視圖div 6、通過標簽v-model來綁定數據模型 7、{{message}}直接將數據模型message展示出來 8、由于vue的雙向數據綁定&#xff0c;當視圖層標簽input里的…

376_C++_云透傳,板端負責處理透傳數據的API函數,用于實現客戶端對設備內部接口的訪問(VMS把數據直接傳給板端內部)

RsApi_PassThrough 云透傳,板端負責處理透傳數據的API函數,用于實現客戶端對設備內部接口的訪問(VMS把數據直接傳給板端內部) 我來分析一下 RsApi_PassThrough 函數的作用和實現邏輯: 1. 功能概述 RsApi_PassThrough 是一個透傳接口,用于處理 /API/Http/PassThrough 的…

基于eRDMA實測DeepSeek開源的3FS

DeepSeek昨天開源了3FS分布式文件系統, 通過180個存儲節點提供了 6.6TiB/s的存儲性能, 全面支持大模型的訓練和推理的KVCache轉存以及向量數據庫等能力, 每個客戶端節點支持40GB/s峰值吞吐用于KVCache查找. 發布后, 我們在阿里云ECS上進行了快速的復現, 并進行了性能測試, ECS…

計算機畢業設計SpringBoot+Vue.js醫院掛號就診系統(源碼+文檔+PPT+講解)

溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 溫馨提示&#xff1a;文末有 CSDN 平臺官方提供的學長聯系方式的名片&#xff01; 作者簡介&#xff1a;Java領…

Linux的用戶與權限--第二天

認知root用戶&#xff08;超級管理員&#xff09; root用戶用于最大的系統操作權限 普通用戶的權限&#xff0c;一般在HOME目錄內部不受限制 su與exit命令 su命令&#xff1a; su [-] 用戶名 -符號是可選的&#xff0c;表示切換用戶后加載環境變量 參數為用戶名&#xff0c…

計算機網絡軟考

1.物理層 1.兩個主機之間發送數據的過程 自上而下的封裝數據&#xff0c;自下而上的解封裝數據&#xff0c;實現數據的傳輸 2.數據、信號、碼元 碼元就是數字通信里用來表示信息的基本信號單元。比如在二進制中&#xff0c;用高電平代表 “1”、低電平代表 “0”&#xff0c…

第四十一:Axios 模型的 get ,post請求

Axios 的 get 請求方式 9.雙向數據綁定 v-model - 鄧瑞編程 Axios 的 post 請求方式&#xff1a;