Sentinel简单使用
Sentinel使用
一、簡介
官網:https://github.com/alibaba/sentinel
中文文檔:https://github.com/alibaba/Sentinel/wiki/介紹
中文文檔也是從GitHub上點擊鏈接跳轉過來的,GitHub哪里有一個“中文文檔”這樣的字眼,直接點擊就可以跳轉到這里了。
1.1、下載和安裝
安裝需要注意:Sentinel是java寫的,所以需要JDK1.8以上的的版本。默認端口號為 8080,所以地址需要注意 8080端口號不能被占用。
- 下載
- 安裝
下載下來直接是一個jar包,啟動就和普通的jar啟動方式樣,不用過多介紹。
nohup java -jar xxxx.jar &我在Windows上測試,所以我就直接使用 java -jar XXX.jar啟動了。
1.2、Sentinel 的主要特性
1.3、Sentinel生態
1.4、解決那些問題
- 服務雪崩
- 服務降級
- 服務熔斷
- 服務限流
二、創建后端工程
創建 spring-cloud-alibaba-sentinel工程。
2.1、引入依賴
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>如果直接使用 sentinel,那么這個包就可以了。但是在sentinel里面的配置我們需要持久化,否則我們重新啟動自己的jar,sentinel里面的配置就沒有了。所以還需要引入一下這個依賴,將sentinel里面的配置同步到nacos中,nacos是可以將數據持久化到mysql數據庫的,所以就不用擔心數據丟失的問題。
<!-- 將sentinel的數據同步到nacos中 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId> </dependency> 強調如果還需要使用 openfeign怎么辦,還需要引入 openfeign的依賴嗎?
<!-- openfeign --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>spring-cloud-starter-alibaba-sentinel這個依賴中已經包含了常用的 spring-boot-starter-web、spring-cloud-starter-openfeign、spring-cloud-starter-netflix-ribbon。但是需要注意的是,里面的 <optoinal>true</optoinal>設置成了true,所以下面是不能被繼承的。
沒有直接引入版本號,因為父工程引入springcloudalibaba的包管理器了。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba-dependencies.version}</version><type>pom</type><scope>import</scope> </dependency>2.2、將程序注入sentinel中
直接在配置文件中配置一下就可以了,其他什么都不需要添加,包括啟動程序都不需要添加任何東西。
server:port: 8401spring:application:name: sentinel-service # 當前工程名稱cloud:sentinel:transport:dashboard: localhost:8080 # sentinel地址port: 8719 # Sentinel api端口 ,默認8719,假如被占用了會自動從8719開始依次+1掃描。直至找到未被占用的端口management:endpoints:web:exposure:include: '*' # springboot 監控 Actuator 的端點暴露,* 為暴露所有端點。2.3、測試
首先啟動Sentinel,第一次啟動sentinel,在瀏覽器上訪問 IP:8080,你會發現什么都沒有,因為我們程序還沒有啟動。
在啟動我們程序,在刷新sentinel控制臺,依然沒有任何東西,因為我們要訪問接口了才有數據。啟動程序,訪問一次接口。
這樣就注入成功了。
三、流控規則
3.1、流控模式
直接
給/testA添加一個鏈路。
關聯
如果 /testA 關聯 /testB,這里只能通過一個QPS通過。那么如果當前 /testB每秒有 1一個以上的的請求在持續訪問,那么 /testA就不能訪問了。
- 創建關聯控流
- postman做連續發送請求
- 測試
現在的配置意思是,/testB每秒超過 1個QPS,那么 /testA就不能訪問。
鏈路
無
3.2、流控效果
預熱
預熱時間計算:單機閾值 / 3 = 剛開始閾值。
- 應用場景
秒殺系統,剛開始的時候,可能有很多數據在緩存哪里可能沒有,所以剛開始的時候放少量的QPS過來,過幾秒后沒問題了,緩存中說句豐富了。
排隊等待
勻速通過,不管來多少個,每次只能請求幾個。
四、降級規則
4.1、RT平均時長
上圖有誤,糾正
每秒中請求QPS大于 5 個,但是在200毫秒內沒有響應,那么就降級處理。1秒鐘后恢復。
4.2、異常比例(單位秒級)
4.3、異常數
五、熱點規則
5.1、普通配置
熱點規則,就是控制某個接口上的某個參數每秒中可以正常訪問多少個QPS。需要使用到 com.alibaba.csp.sentinel.annotation.SentinelResource注解。
配置好規則后,我執行以下請求
http://localhost:8401/ok?name=sadfa每秒中只能請求一次。
http://localhost:8401/ok隨便請求,不影響。
5.2、參數例外項
異常統一處理
目前我測試沒有效果
源碼地址:https://github.com/gl-stars/small-study-case/tree/master/nm-demo/SpringSecurityOAuth2-demo
總結
以上是生活随笔為你收集整理的Sentinel简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人民币(¥)符号在html中的显示
- 下一篇: Axios GET 不能设置Conten