SpringCloud無介紹快使用计螺,sentinel熔斷降級和限流的基本使用(二十一)

@TOC

問題背景

從零開始學springcloud微服務項目
注意事項:

  • 約定 > 配置 > 編碼
  • IDEA版本2021.1
  • 這個項目雕拼,我分了很多篇章曼尊,每篇文章一個操作步驟菲盾,目的是顯得更簡單明了
  • controller調(diào)service昏兆,service調(diào)dao
  • 默認安裝nginx
  • 項目源碼以及sentinel安裝包

sentinel

1 登錄github下載:https://github.com/alibaba/Sentinel/releases


2 在文件夾輸入cmd,啟動sentinel

java -jar sentinel-dashboard-1.8.4.jar

由于默認8080端口报强,可能被占用灸姊,可以自己更改端口

java -jar sentinel-dashboard-1.8.4.jar --server.port=8081

3 登錄sentinel:http://localhost:8080/ ,登錄賬號:sentinel 密碼:sentinel

4 新建cloudalibaba-sentinel-service8401微服務



5 選擇jdk1.8


6 輸入服務名:cloudalibaba-sentinel-service8401


7 引入pom依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud2022</artifactId>
        <groupId>com.yg</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloudalibaba-sentinel-service8401</artifactId>

    <dependencies>
        <!--SpringCloud ailibaba nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--SpringCloud ailibaba sentinel-datasource-nacos 后續(xù)做持久化用到-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!--SpringCloud ailibaba sentinel -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- SpringBoot整合Web組件+actuator -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--日常通用jar包配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.3</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

8 添加application.yml文件

server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        #Nacos服務注冊中心地址
        server-addr: localhost:8848
    sentinel:
      transport:
        #配置Sentinel dashboard地址
        dashboard: localhost:8080
        #默認8719端口秉溉,假如被占用會自動從8719開始依次+1掃描,直至找到未被占用的端口
        port: 8719

management:
  endpoints:
    web:
      exposure:
        include: '*'

9 添加啟動類

package com.yg.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @Author suolong
 * @Date 2022/6/21 16:08
 * @Version 2.0
 */
@EnableDiscoveryClient
@SpringBootApplication
public class MainApp8401 {

    public static void main(String[] args) {
        SpringApplication.run(MainApp8401.class, args);
    }

}

10 添加controller類

package com.yg.springcloud.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Author suolong
 * @Date 2022/6/21 16:10
 * @Version 2.0
 */
@RestController
public class FlowLimitController {

    @GetMapping("/testA")
    public String testA()
    {
        return "------testA";
    }

    @GetMapping("/testB")
    public String testB()
    {
        return "------testB";
    }

}

11 啟動微服務力惯,打開postman調(diào)用:http://localhost:8401/testA http://localhost:8401/testB

12 查看sentinel:http://localhost:8080/

13 基本概念


14 添加流控的兩種方式

  • 第一種碗誉,使用簇點鏈路



  • 第二種,流控規(guī)則


15 測試qps限流夯膀,超過一秒一次就進行限流


16 測試線程限流诗充,超過線程數(shù)就進行限流
更改controller代碼

    @GetMapping("/testA")
    public String testA()
    {
        try {
            TimeUnit.SECONDS.sleep(3);
        }catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "------testA";
    }

連續(xù)點兩次


17 當與A關(guān)聯(lián)的資源B達到閥值后,就限流A自己


postman模擬并發(fā)密集訪問testB诱建,新建collections

保存http://localhost:8401/testB 到集合


點擊Run


運行了B之后,去訪問A碟绑,可以看見A被限流了

18 預熱:閾值除以coldFactor(默認值為3),經(jīng)過預熱時長后才會達到閾值

  • 默認coldFactor為3俺猿,即請求 QPS 從 threshold / 3 開始,經(jīng)預熱時長逐漸升至設(shè)定的 QPS 閾值


  • 預熱意思就是格仲,系統(tǒng)初始化的閥值為5 / 3 約等于1, 即閥值剛開始為1押袍;然后過了3秒后閥值才慢慢升高恢復到5

19 勻速排隊,閾值必須設(shè)置為QPS


  • 勻速排隊凯肋,讓請求以均勻的速度通過谊惭,閥值類型必須設(shè)成QPS,否則無效
  • 設(shè)置含義:/testA每秒1次請求侮东,超過的話就排隊等待圈盔,等待的超時時間為20000毫秒


sentinel熔斷降級

1 Sentinel 熔斷降級會在調(diào)用鏈路中某個資源出現(xiàn)不穩(wěn)定狀態(tài)時(例如調(diào)用超時或異常比例升高),對這個資源的調(diào)用進行限制悄雅,讓請求快速失敗驱敲,避免影響到其它的資源而導致級聯(lián)錯誤
2 當資源被降級后,在接下來的降級時間窗口之內(nèi)宽闲,對該資源的調(diào)用都自動熔斷(默認行為是拋出 DegradeException)
3 參數(shù)說明


  • RT(平均響應時間众眨,秒級)
    平均響應時間 超出閾值 且 在時間窗口內(nèi)通過的請求>=5,兩個條件同時滿足后觸發(fā)降級
    窗口期過后關(guān)閉斷路器
    RT最大4900(更大的需要通過-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)

  • 異常比列(秒級)
    QPS >= 5 且異常比例(秒級統(tǒng)計)超過閾值時容诬,觸發(fā)降級娩梨;時間窗口結(jié)束后,關(guān)閉降級

  • 異常數(shù)(分鐘級)
    異常數(shù)(分鐘統(tǒng)計)超過閾值時览徒,觸發(fā)降級狈定;時間窗口結(jié)束后,關(guān)閉降級

4 平均響應時間




5 添加測試testD方法

@GetMapping("/testD")
public String testD()
{
    //暫停幾秒鐘線程
    try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
    log.info("testD 測試RT");
    return "------testD";
}

6 使用jmeter壓測


  • 永遠一秒鐘打進來10個線程(大于5個了)調(diào)用testD吱殉,希望200毫秒處理完本次任務掸冤,如果超過200毫秒還沒處理完,在未來1秒鐘的時間窗口內(nèi)友雳,斷路器打開(保險絲跳閘)微服務不可用稿湿,保險絲跳閘斷電了
  • 后續(xù)停止jmeter,沒有這么大的訪問量了押赊,斷路器關(guān)閉(保險絲恢復)饺藤,微服務恢復OK

7 異常比例包斑,同時滿足QPS和異常比例兩個條件



8 異常測試代碼

@GetMapping("/testD")
public String testD()
{
    log.info("testD 測試RT");
    int age = 10/0;
    return "------testD";
}

10 設(shè)置熔斷


11 jmeter測試


  • 單獨訪問一次,必然來一次報錯一次(int age = 10/0)涕俗,調(diào)一次錯一次
  • 開啟jmeter后罗丰,直接高并發(fā)發(fā)送請求,多次調(diào)用達到我們的配置條件了再姑。斷路器開啟(保險絲跳閘)萌抵,微服務不可用了,不再報錯error而是服務降級了元镀。

12 異常數(shù)绍填,時間窗口一定要大于等于60秒



13 新增測試代碼

@GetMapping("/testE")
public String testE()
{
    log.info("testE 測試異常比例");
    int age = 10/0;
    return "------testE 測試異常比例";
}

14 設(shè)置熔斷降級


  • 使用postman:http://localhost:8401/testE,第一次訪問絕對報錯栖疑,因為除數(shù)不能為零讨永,可以看到error窗口,但是達到5次報錯后遇革,進入熔斷后降級

SpringCloud無介紹快使用卿闹,Seata處理分布式事務(二十五)
SpringCloud無介紹快使用,sentinel服務熔斷功能(二十四)
SpringCloud無介紹快使用萝快,sentinel注解@SentinelResource的基本使用(二十三)
SpringCloud無介紹快使用锻霎,sentinel熱點key限流與系統(tǒng)規(guī)則的基本使用(二十二)
SpringCloud無介紹快使用,sentinel熔斷降級和限流的基本使用(二十一)
SpringCloud無介紹快使用杠巡,Nacos集群和Nginx代理(二十)
SpringCloud無介紹快使用量窘,nacos配置中心的基本使用(十九)
SpringCloud無介紹快使用,nacos注冊中心的基本使用(十八)
SpringCloud無介紹快使用氢拥,gateway通過微服務名實現(xiàn)動態(tài)路由(十七)
SpringCloud無介紹快使用蚌铜,gateway的基本使用(十六)
SpringCloud無介紹快使用,Ribbon負載均衡工具與OpenFeign的使用(十五)
SpringCloud無介紹快使用嫩海,使用Zookeeper替換Eureka服務注冊與發(fā)現(xiàn)(十四)
SpringCloud無介紹快使用冬殃,服務發(fā)現(xiàn)Discovery和Eureka自我保護(十三)
SpringCloud無介紹快使用,集群cloud-provider-payment8002搭建(十二)
SpringCloud無介紹快使用叁怪,集群Eureka服務注冊中心cloud-eureka-server7002搭建(十一)
SpringCloud無介紹快使用审葬,單機Eureka服務注冊中心cloud-eureka-server7001搭建(十)
SpringCloud無介紹快使用,新建cloud-api-commons公共模塊module(九)
SpringCloud無介紹快使用奕谭,新建子module消費者訂單模塊(八)
SpringCloud無介紹快使用涣觉,熱部署devtools配置(七)
SpringCloud無介紹快使用,子module提供者支付微服務業(yè)務開發(fā)(六)
SpringCloud無介紹快使用血柳,新建子module提供者支付微服務yml整合和新建啟動類(五)
SpringCloud無介紹快使用官册,新建子module提供者支付微服務pom整合(四)
SpringCloud無介紹快使用,springcloud父工程pom文件整理(三)
SpringCloud無介紹快使用难捌,IDEA新建springcloud父工程(二)
SpringCloud無介紹快使用膝宁,與Spingboot之間的兼容版本選擇(一)




作為程序員第 188 篇文章鸦难,每次寫一句歌詞記錄一下,看看人生有幾首歌的時間员淫,wahahaha ...

Lyric: 我寫的舞曲也可以很有音樂性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末合蔽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子介返,更是在濱河造成了極大的恐慌拴事,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件映皆,死亡現(xiàn)場離奇詭異挤聘,居然都是意外死亡,警方通過查閱死者的電腦和手機捅彻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鞍陨,“玉大人步淹,你說我怎么就攤上這事〕夏欤” “怎么了缭裆?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寿烟。 經(jīng)常有香客問我澈驼,道長,這世上最難降的妖魔是什么筛武? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任缝其,我火速辦了婚禮,結(jié)果婚禮上徘六,老公的妹妹穿的比我還像新娘内边。我一直安慰自己,他們只是感情好待锈,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布漠其。 她就那樣靜靜地躺著,像睡著了一般竿音。 火紅的嫁衣襯著肌膚如雪和屎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天春瞬,我揣著相機與錄音柴信,去河邊找鬼。 笑死快鱼,一個胖子當著我的面吹牛颠印,可吹牛的內(nèi)容都是我干的纲岭。 我是一名探鬼主播,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼线罕,長吁一口氣:“原來是場噩夢啊……” “哼止潮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钞楼,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤喇闸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后询件,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體燃乍,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年宛琅,在試婚紗的時候發(fā)現(xiàn)自己被綠了刻蟹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘿辟,死狀恐怖舆瘪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情红伦,我是刑警寧澤英古,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站昙读,受9級特大地震影響召调,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛮浑,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一唠叛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陵吸,春花似錦玻墅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至囚似,卻和暖如春剩拢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背饶唤。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工徐伐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人募狂。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓办素,卻偏偏與公主長得像角雷,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子性穿,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容