3. Alibaba Sentinel Dashboard 流控规则

Sentinel流控规则

流控规则基本介绍

名词解释

  • 资源名 : 唯一名称,默认请求路径
  • 针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
  • 阈值类型/单机阈值:
    • QPS(每秒钟的请求数量):当调用该API的QPS达到阈值的时候,进行限流
    • 线程数:当调用该API的线程数量达到阈值的时候,进行限流
  • 是否集群:当前不需要集群
  • 流控模式:
    • 直接:API达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)(API级别的针对来源)
  • 流控效果:
    • 快速失败:直接失败,抛异常
    • Wam Up:根据codeFactor(冷加载因子,默认3)的值,从阈值/codeFacotor,经过预热时长,才达到设置的QPS阈值
    • 排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效

新增流控

QPS直接失败案例

  1. 添加有两种方式,可以直接在流控规则选项中添加,也可以在簇点链路中添加,一般会采取第二种方式

  2. 现在我们给"/testA"添加流控。

  3. 这里的意思就是我们现在单机阈值设定为1,代表的是当前这个接口只能被1秒访问一次,超过这个阈值,就会被Sentinel阻塞,现在默认为直接失败,也就是会在前台有一个体现

线程数直接失败案例

  1. 刚才我们可以的设置是通过QPS(每秒钟请求的数量)来设置的限流规则,但是我们这里其实还有一个线程数,是什么意思那?

  2. QPS和并发线程数规则详解

    QPS: 每秒请求数,如果超过这个数量,则被流控

    并发线程数: 同时在这个资源上执行的线程数,如果超过这个线程数量,则被流控

  3. 那我们要演示这种效果,就需要让超过一个线程同时在该业务上运行, 我可以让业务执行时间长一些。 让其在执行的时候,第二个线程还能进来,那么进来的第二个线程就会被流控到。

@GetMapping("/testA")
public String testA(){
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "-----testA";
}
  1. 这个时候我们重启项目,然后重新通过访问testA接口,通过两个网页(线程)来快速访问,这个时候我们来看效果,这里要注意,要重新添加流控规则。

    注意:这个时候虽然效果一致,但是是两种完全不同的规则,一种是QPS,一种是并发线程,这点大家一定要分清!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基于YAML文件的Sentinel规则持久化配置示例: 1. 首先,在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>x.y.z</version> </dependency> ``` 其中,`x.y.z`为Sentinel版本号。 2. 在应用程序的`application.yml`文件中,添加以下配置项: ``` spring: cloud: sentinel: transport: dashboard: localhost:8080 # Sentinel制台地址 datasource: ds1: nacos: server-addr: localhost:8848 # Nacos服务器地址 namespace: sentinel dataId: ${spring.application.name}-flow-rules # 规则文件ID groupId: DEFAULT_GROUP data-type: json ``` 其中,`ds1`为数据源名称,`nacos`表示使用Nacos作为规则的持久化方式。`server-addr`表示Nacos服务器的地址,`namespace`表示Nacos的命名空间,`dataId`表示规则文件的ID,这里使用了`${spring.application.name}-flow-rules`作为规则文件ID,`${spring.application.name}`表示应用程序的名称。`groupId`表示规则文件所属的分组,默认为`DEFAULT_GROUP`。`data-type`表示持久化文件的格式,这里使用了JSON格式。 3. 在规则文件中添加规则规则文件的默认位置为Nacos服务器上的`dataId`所指定的规则文件路径。 ``` [ { "resource": "com.example.demo.DemoController:helloSentinel", // 资源名 "limitApp": "default", // 针对的调用来源,若为default则不区分调用来源 "grade": 1, // 限阈值类型,0表示线程数,1表示QPS "count": 10, // 限阈值 "strategy": 0, // 限制行为,0表示直接拒绝,1表示Warm Up,2表示排队等待 "controlBehavior": 0, // 效果,0表示快速失败,1表示Warm Up,2表示排队等待 "clusterMode": false // 是否集群限 } ] ``` 以上就是一个基于YAML文件的Sentinel规则持久化的配置示例。需要注意的是,在实际应用中,可以根据实际需求选择不同的持久化方式。同时,还需要根据实际业务场景设置合理的规则,以保证系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值