首页 > 其他分享 >Sentinel系列之(四)流控规则

Sentinel系列之(四)流控规则

时间:2024-02-28 11:14:50浏览次数:49  
标签:系列 流控 阈值 接口 限流 线程 Sentinel QPS

流控规则

流量控制

官网:https://github.com/alibaba/Sentinel/wiki/流量控制

1. 基本介绍

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

默认模式,到达QPS或线程数直接限流,给出默认的错误提示页面。

线程数指的是用于处理请求的线程个数,当设置阈值的线程数不足以处理目前的请求时就会限流。

线程数阈值就相当于银行坐台的工作人员,最多有几个,当所有工作人员都被占用了,此时还有请求要进行处理时就会进行限流。

2.2 关联

A接口关联了B接口,当B接口的调用达到限流条件时,A接口就被限流了

场景:下订单接口关联了支付接口,当支付接口的调用达到限流条件时,下订单接口就被限流了

通过Apifox对testB接口进行压测

参考:https://blog.csdn.net/run_boy_2022/article/details/130134823

发现A接口被限流。

3. 流控效果
3.1 快速失败

默认的流控效果,直接抛出错误页面。

源码:com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController

3.2 Warm Up
  • 理论

    ​ Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP)方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。

    来源:https://github.com/alibaba/Sentinel/wiki/流量控制#warm-up

    来源2:https://github.com/alibaba/Sentinel/wiki/限流---冷启动

  • 源码:com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController

  • 使用

    ​ 按照如上设置,流控规则是这样的:QPS的初始值为阈值(10)/冷加载因子(默认为3)的值开始,在预热时长(5秒)内达到我们设置的阈值(10),也就是QPS的阈值会在5秒内从3逐渐达到10。

  • 应用场景

    如:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是把为了保护系统,可慢慢的把流量放进来,慢慢的把阀值增长到设置的阀值。

3.3 匀速排队
  • 理论

    ​ 匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。

    ​ 这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

  • 源码:com.alibaba.csp.sentinel.slots.block.flow.controller.RateLimiterController

  • 使用

标签:系列,流控,阈值,接口,限流,线程,Sentinel,QPS
From: https://www.cnblogs.com/wzzzj/p/18039346

相关文章

  • Sentinel系列之(三)初始化演示工程
    初始化演示工程1.构建cloudalibaba-sentinel-service8401建Module【cloudalibaba-sentinel-service8401】改POM<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="ht......
  • Sentinel系列之(二)安装Sentinel控制台
    安装Sentinel控制台Sentinel分为两个部分:核心库(ava客户端)不依赖任何框架/库,能够运行于所有Java运行时环境,同时对Dubbo/SpringCloud等框架也有较好的支持。【后台的监控程序】控制台(Dashboard)基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。【前......
  • Sentinel系列之(一)简介
    简介SpringCloudAlibabaSentinel实现熔断与限流1.官网https://github.com/alibaba/Sentinelhttps://github.com/alibaba/Sentinel/wiki/介绍https://sentinelguard.io/zh-cn/docs/introduction.html2.是什么面向云原生微服务的流量控制、熔断降级组件。阿里版的Hystri......
  • Nacos系列之(一)简介
    简介SpringCloudAlibabaNacos服务注册和配置中心1.为什么叫NacosNamingConfigurationService2.是什么官网:一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心Nacos=Eureka+Config+Bus疑问:Bus是服务总线,为什么也包含在Nacos里3.能干嘛替代Eureka做服......
  • Nacos系列之(五)Nacos集群和持久化配置
    Nacos集群和持久化配置......
  • Nacos系列之(四)Nacos作为服务配置中心
    Nacos作为服务配置中心以前我们使用配置中心:我们把配置放到Github上,Config作配置中心,Bus实现配置动态刷新现在使用配置中心:配置放到Nacos中,Nacos作配置中心,Nacos实现配置动态刷新1.Nacos作为配置中心-基础配置建Module【cloudalibaba-config-nacos-client3377】改POM......
  • Nacos系列之(三)Nacos作为服务注册中心
    Nacos作为服务注册中心1.官网文档https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery2.基于Nacos的服务提供者父POM加入如下依赖<!--springcloudalibaba2.1.0.RELEASE--><depende......
  • Nacos系列之(二)安装并运行Nacos
    安装并运行Nacos环境要求:Java8+Maven1.选用版本及下载选用版本:1.1.4下载地址:https://github.com/alibaba/nacos/releases/tag/1.1.42.运行2.1Linux下载后得到nacos-server-1.1.4.tar.gz解压后启动startup.sh-mstandalone注:不要直接执行startup.sh,因为默认会以集群......
  • SpringCloud系列之(十三)FAQ
    关于一些可能出现的报错1.DruidDataSource:testWhileIdleistrue,validationQuerynotset工程启动时可能会报如下错误,这是DruidDataSource保持链接的测试,不影响我们的应用。2.idea未监测到yml文件出现这种情况会造成文件内写配置的时候没有提示正常应该是这样的......
  • SpringCloud系列之(十二)SpringCloud Sleuth分布式请求链路追踪
    SpringCloudSleuth分布式请求链路追踪一、概述1.应用场景​ 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请......