Sentinel使用


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>
 ```
View Code


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";
        }
    
    }
View Code

3、yml配置

```
server:
  port: 9000
spring:
  application:
    name: register-server
    sentinel:
      transport:
        port: 8719  #如果加了客戶端他就會開啟一個 http server  為了dashboard 能夠發過來
        dashboard: localhost:8080
```
View Code

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";
    }
```
View Code

改完之后重啟你的項目,然后先訪問一次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之后還能點擊出現限流;請你私聊我。。。

限流效果圖:

 


免責聲明!

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



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