SpringCloud sentinel流控规则

831 阅读3分钟

sentinel介绍

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

Sentinel 具有以下特征:

  • 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。
  • 完备的实时监控: Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态: Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点: Sentinel 提供简单易用、完善的 SPI 扩展点。您可以通过实现扩展点,快速的定制逻辑。例如定制规则管理、适配数据源等。

如何在项目中引用sentinel

如果要在您的项目中引入 Sentinel,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

这是摘抄于sentinel在github官网上的对于sentinel的介绍

这次记录的是关于sentinel的流控介绍

1、在github上下载相应的jar包

2、执行jar包

java -jar xxx.jar

3、新建一个工程,并配置sentinel相关配置

我是配置在nacos服务注册中心的动态配置中

如图:

  sentinel:
      transport:
        dashboard: localhost:8080

4、将动态配置文件加载到对应的工程的配置文件中

server.port=9001
# 这里的应用名对应 Nacos Config 中的 Data ID,实际应用名称以配置中心的配置为准
spring.application.name=nacos-provider-config
# 指定查找名为 nacos-provider-config.yaml 的配置文件
spring.cloud.nacos.config.file-extension=yaml
# Nacos Server 的地址
spring.cloud.nacos.config.server-addr=127.0.0.1:8848

spring.cloud.nacos.config.group=DEV_GROUP
spring.cloud.nacos.config.namespace=71d72c8d-0641-427f-8757-188cf06bd57a

5、配置成功后进行测试,随便写个controller进行测试

测试成功的现象

1、在nacos注册中心的状态

我们会将服务注册到nacos注册平台

2、在sentinel的平台上的现象

3、我们的controller也是正常访问

流控规则

1、对QPS的限制进行流量控制

比如我限制每秒点击量只能是一次 在sentinel平台中配置

出现的效果就是当我一秒中连续点击多次时,会出现以下效果

这就是我破坏我所设置的规则,就会起到限流的作用。

2、对线程数的限制进行流量控制 只能接受一个线程(请求),当一个线程未完成时,另一个线程直接返回失败

出现的现象

对于QPS和限制线程数来说

QPS就是在外部限制请求数量,而限制线程数就是将请求全部放入,但是在内部限制流量。

3、关联 限制流量

当A服务因为请求过多挂掉时,服务提供者B会进行限流

设置

打个比方:设想一下支付接口和订单接口,当支付接口挂了时,订单接口就会限流,减少流量。

4、warm up 预热

公式: 阀值除以coldFactor(默认值为3),经过预热时长后才会达到阀值

默认coldFactor 为3,即请求QPS从threshold/3开始,经过预热时长后才会达到阀值。

我这么设置意思就是QPS达到10/3 = 3,经过5秒预热后达到阀值,就会正常启动。

在5秒前连续点击超过三次,就会部分请求就会直接失败,但是经过5秒达到阀值,就不会出现直接失败的请求,除非每秒点击次数超过阀值。

5、排队等待

6、链路限流