SpringCloudAlibaba Sentinel概念及简单应用

本文详细介绍了Sentinel的下载安装、监控、流控规则、降级规则、热点Key限流、系统规则配置等内容。Sentinel提供直观的Web界面,方便对微服务进行细粒度的监控和配置,包括QPS限流、线程数限流、关联限流、预热限流、排队限流等。此外,还展示了如何进行服务熔断降级,以及Sentinel与 Ribbon、OpenFeign的整合。文章还讨论了Sentinel规则的持久化,确保服务重启后规则依然有效。
摘要由CSDN通过智能技术生成


参考尚硅谷

1.为什么要有Sentinel?

之前我们对微服务进行监控,速率控制,服务熔断,服务降级等等都是通过Hystrix来进行的,而Hystrix需要我们程序员自己手工搭建监控平台没有一套Web界面来给我们进行更加细粒度化的配置流控速率控制,服务熔断,服务降级。。。。。现在Sentinel的出现解决了这些问题,它提供了直接界面化的细粒度统一配置。

在这里插入图片描述

2.Sentinel下载安装运行

到他的官网github上下载,https://github.com/alibaba/Sentinel/releases/tag/1.7.0,找到那个jar包,下载到本地,然后在命令行中输入java -jar sentinel-dashboard-1.7.0.jar,运行

在这里插入图片描述

然后再浏览器中输入http://localhost:8080

在这里插入图片描述

看到这个说明安装运行成功。输入用户名密码(sentinel,sentinel)即可登录

3.Sentinel监控

3.1初始化

首先我们新建一个Module,新开一个微服务,并且把这个微服务注册到Nacos中,然后用Sentinel监控他。

在pom中必须导入这三个依赖

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

新建yml

server:
  port: 8401

spring:
  application:
    name: cloudalibaba-sentinel-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
    sentinel:
      transport:
        dashboard: localhost:8080 #配置Sentinel dashboard地址
        port: 8719
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            dataId: ${
   spring.application.name}
            groupId: DEFAULT_GROUP
            data-type: json
            rule-type: flow

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

这个微服务的端口号是8401,然后我要把他注册进Nacos中,所以要配一个nacos,然后将它用Sentinel进行监控,所以要配一个sentinel的配置。最后那段management是暴露监控端点的。

然后新建主启动类

@EnableDiscoveryClient
@SpringBootApplication
public class CloudalibabaSentinelService8401Application {
   

    public static void main(String[] args) {
   
        SpringApplication.run(CloudalibabaSentinelService8401Application.class, args);
        System.out.println("启动成功");
    }

}

controller

@RestController
@Slf4j
public class FlowLimitController {
   
    @GetMapping("/testA")
    public String testA() {
   
        return "------testA";
    }
    @GetMapping("/testB")
    public String testB() {
   
        return "------testB";
    }

}

然后启动这个微服务,启动之后登录Nacos查看服务管理能看到这个服务已经被注册到Nacos中

在这里插入图片描述

然后看看他能不能被Sentinel监控到登录Sentinel

在这里插入图片描述

发现空空如也,这是因为Sentinel采用了懒加载,你访问一下接口他就会出来

在这里插入图片描述

在这里插入图片描述

然后我们就能在Web界面上看到这个接口的监控效果。

3.2 Sentinel流控规则

3.2.1 QPS直接限流

在这里插入图片描述

在这里插入图片描述

这个流控模式有三种

1.直接:api达到限流条件直接限流

2.关联:当关联的阈值达到阈值时就限流自己

3.链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)。

资源名就是那个接口的地址,QPS是每秒点击的次数,我配的是1说明我每秒钟最多访问1次,超过了这个阈值就会被限流(如下图所示)。

在这里插入图片描述

3.2.2线程数直接限流

我们在流控配置界面里选择的阈值类型改成线程数,然后阈值改为1,当调用api的线程数达到阈值的时候,进行限流。为了测试我们可以在那个接口中加一些延迟。

    @GetMapping("/testA")
    public String testA() {
   
        // 测试阈值类型:线程数
        try {
   
            TimeUnit.MILLISECONDS.sleep(2000);
        } catch (InterruptedException e) {
   
            e.printStackTrace();
        }
        return "------testA";
    }

在这里插入图片描述

我们先点一下这个接口然后他会阻塞,在这个过程中我们另起一个访问该接口这就意味着有两个线程同时访问了这个接口,我们配置的阈值数是1现在有两个线程所以就是有一个能访问一个被限流。

3.2.3流控模式之关联

首先一点何为关联当流控达到阈值的时候就限流自己, 这个就相当于连坐,比如说你和你同桌打架,明明这事儿不赖你,其实是赖他,但是呢老师在认定责任的时候会认定为这是一起互殴的“刑事案件”,你也得跟着挨说,就相当于B惹事A挂了。这个主要应用在这样一种情形,有一个支付接口它挂了,下订单接口跟着一块挂。

然后我们在sentinel的web界面上配置一下关联模式的流控。

在这里插入图片描述

这个说明当B资源每秒钟点击数大于1A就会被限流。一会我们密集访问B,最后你会发现A居然挂了。我们用postman来模拟这个过程,

首先新建一个collection输上url,然后配置一下具体几个线程多长时间访问一次。

在这里插入图片描述

在这里插入图片描述

这里我们设置成20个线程每隔0.3秒访问一次。然后我们看一下结果

在这里插入图片描述

B满了A就挂了。

3.2.4流控效果之预热

Warm up方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能把整个系统压垮。通过冷启动,让通过的流量缓慢增加,在一定时间内增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。来看一个例子

在这里插入图片描述

Warm up有一个默认的coldFactor为3,即请求QPS从(threshold/3)开始,这个案例就是阈值为10预热时长设置为5s,系统初始化的阈值就是3࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温JZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值