SpringCloudAlibaba——Sentinel

SpringCloudAlibaba——Sentinel

什么是Sentinel

一个轻量级的面向云原生微服务的流量控制,熔断降级组件。
在这里插入图片描述
在这里插入图片描述
Sentinel主要分为两个部分

  • 核心库:Java客户端,不依赖任何框架,能够运行所有Java运行时环境,同时对Dubbo/SpringCloud等框架
    也有较好的支持。

  • 控制台:Dashboard基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

Sentinel的下载与安装

下载地址:
https://github.com/alibaba/Sentinel/releases
选择版本
在这里插入图片描述
下载的是一个jar包,只要电脑上有java运行环境就可以运行
启动Sentinel
在这里插入图片描述

构建演示案例

新建cloudalibaba-sentinel-service8401 model

  1. 新建model
    在这里插入图片描述

  2. 改pom

    <dependencies>
        <!--SpringCloud alibaba sentinel-datasource-nacos:后续做持久化用到-->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!--SpringCloud alibaba 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>
        <!--spring cloud alibaba nacos-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--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>
        <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>
    
  3. 改yml

    server:
      port: 8401
    
    spring:
      application:
        name: cloudalibaba-sentinel-service
      cloud:
        nacos:
          discovery:
            # Nacos服务注册中心地址
            server-addr: xxxxxx:8848
        sentinel:
          transport:
            # 配置Sentinel dashboard地址
            dashboard: localhost:8080
            # 默认8719端口,假如被占用会自动从8719开始一次+1扫描,直至找到被占用的端口。
            port: 8719
    
    management:
      endpoints:
        web:
          exposure:
            include: "*"
    
  4. 业务类
    在这里插入图片描述

  5. 启动Sentinel和演示model并测试

  • 要在Sentinel可视化界面中显示启动的演示类,必须先访问一次controller业务才能显示(懒加载机制)
    在这里插入图片描述

流控规则

在这里插入图片描述
名词解析
在这里插入图片描述
测试效果
QPS+直接+快速失败
在这里插入图片描述
在这里插入图片描述
当每秒访问的次数大于2时直接显示该失败页面

线程数 = 1
在这里插入图片描述
线程数1:一次只能处理一个该api:/testA请求,当调用该api的线程数达到阈值的时候,进行限流

流控模式——关联
在这里插入图片描述
testA关联的资源testB达到阈值后,就限流testA自己

流控模式——链路
在这里插入图片描述链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流

流控效果
在这里插入图片描述

  • 快速失败: 直接失败,抛出异常:Blocked by Sentinel(flow limiting)

  • Warm Up: 预热,即突然间有大量的请求打过来,会给一个缓冲时间
    在这里插入图片描述
    即预热5s ,在这5s内的阈值为 阈值除以coldFactor(默认是3)= 3,经过预热时长后才会达到真正的阈值

  • 排队等待
    当阈值超出时,不要直接拒绝,让其排队
    在这里插入图片描述
    当排队超过超时时间才失败

降级规则

在这里插入图片描述

  • RT:超出阈值且在时间窗口设定的时间内,且通过的请求>=5,两个条件同时满足后触发降级。

在这里插入图片描述

  • 异常比例
    当资源的每秒请求量 >=5,并且每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态。

在这里插入图片描述

  • 异常数:当资源近1分钟的异常数目超过阈值后会进行熔断
    注意:时间窗口一定要大于60s,如果小于60s,熔断结束后仍可能在进入熔断状态
    在这里插入图片描述
    服务降级小结:这里的降级指的是熔断,即直接断开,1.72版没有半开状态,熔断后就只能等过了时间窗口期才能访问

热点key规则在这里插入图片描述

对访问链接中的某个参数进行限制
实例
在controller中添加如下代码

 @GetMapping("/testHotKey") //这个代表rest请求地址
    @SentinelResource(value = "testHotKeyabc001", blockHandler = "del_testHotKey")
    public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
                             @RequestParam(value = "p1", required = false) String p2){

        return "------testHotKey";
    }
    public String del_testHotKey(String p1, String p2, BlockException e){

        return "这次不用默认的兜底提示Blocked by Sentinel(flow limiting),自定义提示:del_testHotKeyo(╥﹏╥)o...";
    }

在Sentinel控制台添加规则
在这里插入图片描述
在这里插入图片描述
测试:快速访问多次
在这里插入图片描述

参数例外项在这里插入图片描述

测试
在这里插入图片描述

系统规则

对整个系统进行的规则配置,触发后整个系统限流,类似全局配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值