SpringCloudAlibaba——Sentinel(流控规则)

SpringCloudAlibaba——Sentinel(流控规则)

什么是Sentinel

一个轻量级的面向云原生微服务的流量控制,熔断降级组件。
SpringCloudAlibaba——Sentinel(流控规则)
SpringCloudAlibaba——Sentinel(流控规则)
Sentinel主要分为两个部分

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

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

Sentinel的下载与安装

下载地址:
https://github.com/alibaba/Sentinel/releases
选择版本
SpringCloudAlibaba——Sentinel(流控规则)
下载的是一个jar包,只要电脑上有java运行环境就可以运行
启动Sentinel
SpringCloudAlibaba——Sentinel(流控规则)

构建演示案例

新建cloudalibaba-sentinel-service8401 model

  1. 新建model
    SpringCloudAlibaba——Sentinel(流控规则)

  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. 业务类
    SpringCloudAlibaba——Sentinel(流控规则)

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

  • 要在Sentinel可视化界面中显示启动的演示类,必须先访问一次controller业务才能显示(懒加载机制)
    SpringCloudAlibaba——Sentinel(流控规则)

流控规则

SpringCloudAlibaba——Sentinel(流控规则)
名词解析
SpringCloudAlibaba——Sentinel(流控规则)
测试效果
QPS+直接+快速失败
SpringCloudAlibaba——Sentinel(流控规则)
SpringCloudAlibaba——Sentinel(流控规则)
当每秒访问的次数大于2时直接显示该失败页面

线程数 = 1
SpringCloudAlibaba——Sentinel(流控规则)
线程数1:一次只能处理一个该api:/testA请求,当调用该api的线程数达到阈值的时候,进行限流

流控模式——关联
SpringCloudAlibaba——Sentinel(流控规则)
testA关联的资源testB达到阈值后,就限流testA自己

流控模式——链路
SpringCloudAlibaba——Sentinel(流控规则)链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流

流控效果
SpringCloudAlibaba——Sentinel(流控规则)

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

  • Warm Up: 预热,即突然间有大量的请求打过来,会给一个缓冲时间
    SpringCloudAlibaba——Sentinel(流控规则)
    即预热5s ,在这5s内的阈值为 阈值除以coldFactor(默认是3)= 3,经过预热时长后才会达到真正的阈值

  • 排队等待
    当阈值超出时,不要直接拒绝,让其排队
    SpringCloudAlibaba——Sentinel(流控规则)
    当排队超过超时时间才失败

上一篇:SpringCloudAlibaba完整章节三(创建服务消费者)


下一篇:SpringCloudAlibaba集成Gateway动态路由Nacos服务