Sentinel控制台的功能主要包括:流量控制、降級控制、熱點配置、系統規則和授權規則等
# 安裝sentinel的控制台
## 下載地址
Sentinel控制台下載地址:
https://github.com/alibaba/Sentinel/releases
版本自己選擇
# 啟動控制台
到sentinel所在的目錄運行下面的命令:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-版本號.jar
啟動之后訪問localhost:8080;登錄即可用戶名和密碼默認是sentinel
登錄之后看到左側的菜單只有默認的一個;因為現在sentinel還沒有發現其他機器
# 客戶端搭建--sc
基於spring-cloud的項目來搭建一個sentinel客戶端
1、加入spring-cloud的sentinel依賴

``` <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ```
2、建立一個controller

package com.shadow.web; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @GetMapping("login") public String login() throws InterruptedException { System.out.println("login----"); return "success"; } @GetMapping("log") public String log(){ System.out.println("log----"); return "success"; } }
3、yml配置

```
server:
port: 9000
spring:
application:
name: register-server
sentinel:
transport:
port: 8719 #如果加了客戶端他就會開啟一個 http server 為了dashboard 能夠發過來
dashboard: localhost:8080
```
spring.cloud.sentinel.transport.dashboard——sentinel控制台的ip和端口地址
spring.cloud.sentinel.transport.port——sentinel客戶端和控制台通信的端口
然后啟動項目;繼而訪問localhost:8080/login;跟着刷新sentinel的控制台可以看到sentinel已經發現了我們的項目server-register
並且可以在簇點鏈路中看到剛剛那個請求
接下來就對這個請求進行流控、降級、授權、熱點等配置等等配置了;先來介紹如何添加流控吧;點擊+流控的按鈕
怎么配置呢?首先了解這概念吧
# sentinel 術語
1、資源:標識資源的唯一名稱,springboot項目默認為controller當中的請求路徑,也可以在客戶端中使用SentinelResource配置;比如你有個service當中的xx方法;你想對這個xx方法進行流控那么這個xx方法必須是一個資源;
2、針對來源:Sentinel可以針對服務調用者進行限流,填寫微服務名稱即spring.application.name,默認為default,不區分來源
3、閾值類型、單機閾值
QPS——每秒鍾的請求數量,當調用該資源的QPS達到閾值的時候,進行限流;
線程數——當調用該資源的線程數達到閾值的時候,進行限流
4、是否集群:默認不集群;
5、流控模式:
直接:當資源調用達到限流條件的時,直接限流;
關聯:當關聯的資源請求達到閾值的時候,限流自己;
鏈路:下節課說
6、流控效果:
快速失敗:直接失敗;
Warm Up:根據冷加載因子默認值為3的值,從閾值/3,經過預熱時長,才達到設置的QPS閾值;
排隊等待:勻速排隊,讓請求勻速通過,閾值類型必須設置為QPS,否則無效
# QPS直接失敗
上面設置的效果是,1秒鍾內請求/login資源的次數達到1次以上的時候,進行限流
## 效果演示
首先一秒請求一次login沒有問題;然后發揮你手速;一秒超過一次之后頁面返回Blocked by Sentinel (flow limiting);如果手速不夠多練練吧——總歸有辦法的
....
# 線程數直接失敗
把login方法讓其睡眠一秒;因為無論你單身多少年;你的手速不可能超過計算機;所以在刷新的情況下永遠只有一個線程;如果讓他睡眠1秒;這樣就能模擬出來服務器這邊開多個線程來處理的場景了;

``` @GetMapping("login") public String login() throws InterruptedException { System.out.println("login----"); Thread.sleep(1000); return "success"; } ```
改完之后重啟你的項目,然后先訪問一次login;因為你重啟之后sentinel控制台這邊就檢測不到了;需要重新訪問一次;跟着添加流控規則
## 效果演示
首先慢慢刷新login請求;——等睡眠時間過;服務器永遠只有一個線程,發覺沒問題;但是你瘋狂在地址欄里面點擊回車(注意不要去刷新,因為刷新是會等到服務器返回之后才能點擊;所以效果演示不出來,最好是點擊回車在地址欄)就會失敗
...
# 流控模式關聯
首先把login方法當中的睡眠刪除;然后重啟項目,訪問一下login;繼而去配置流控規則
上述配置當1秒內訪問/log的次數大於2的時候,限流/login
效果演示使用postman來密集訪問/log(QPS=3),然后我們手動瀏覽器請求/login,看看效果...。postman的如下圖
## 效果演示
在外面沒有啟動postman的時候 訪問login沒有問題;當我們啟動postman之后 log的qps達到了閾值;這個時候再去訪問login 被限流了、、、
# 預熱Warm Up
Warm Up——預熱/冷啟動方式。當系統長期處於低訪問量的情況下,流量突然增加時,可能瞬間把系統壓垮。通過warm up方式,讓通過的流量緩慢增加,在一定時間內逐漸增加到閾值上限,給冷系統一個預熱的時間,避免問題
即請求QPS從 閾值 10/ 3 開始,經預熱時長(10s)逐漸升至設定的QPS閾值(10)
## 效果演示
假設一開始我們瘋狂刷新(讓QPS大於3) 講道理一般人的手速可以達到;你會看到被限流了;但是經過10s之后再也不會出錯了;因為人的極限不可能1秒點到10次;如果哪位兄弟10s之后還能點擊出現限流;請你私聊我。。。
限流效果圖: