Sentinel实战(三)、流控规则之流控效果及流控小结

news2025/4/6 9:38:34

spring cloud Alibaba-Sentinel实战(三)、流控效果+流控小结

  • 一、流控规则:流控效果
    • 一)、流控效果:预热
      • 1、概念含义
      • 2、案例
        • 流控规则设置
        • 测试结果
    • 二)、流控效果:排队等待
      • 1、概念含义
      • 2、案例
        • 流控规则设置
        • 测试及结果
  • 二、流控规则实际使用总结
    • 一)、阈值类型、流控模式、流控效果组合及适用场景
      • 1、阈值为QPS 、流控模式为直接、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 2、阈值为QPS 、流控模式为关联、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 3、阈值为QPS 、流控模式为链路、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 4、阈值为QPS 、流控模式为直接、Warm Up[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 5、阈值为QPS 、流控模式为直接、排队[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
      • 6、阈值为线程数 、流控模式为直接、快速失败[的流控效果]
        • 1)规则适用的业务特点
        • 2)适用场景
        • 3)配置时要注意的事项
    • 二)、配置注意事项总结
      • 1、阈值评估
      • 2、规则要动态调整
      • 3、监控与报警
      • 4、规则持久化
      • 5、测试及验证
    • 小结:

一、流控规则:流控效果

流控效果有当前支持三种:直接失败、预热(warm up)、排队等待。
直接失败没什么可说的,下面主要围绕预热和排队等待展开。

一)、流控效果:预热

主要针对开启活动之前,系统流量是比较低的,比如秒杀活动即将开始后,系统访问量突增,可能把系统压垮,增加预热流控规则,是个比较好的方案。

1、概念含义

预热就是下图流控效果里,Warm Up ;即 预热/冷启动方式;这种方式用于系统长期处于低流量的情况,当流量突然激增,由于流量的突然激增可能瞬间会把系统压垮。通过这种“冷启动”的方式,让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给系统一个缓冲的时间,通过这种冷启动的方式避免系统被压垮。
预热公式为 单机阈值/coldFactor(预热因子,默认为3),经过预热时间后,才会达到阈值。
在这里插入图片描述
设置参数后的具体含义通过案例阐述。

2、案例

这种预热流控的设置,通常的场景类如 秒杀,主要是为了防止瞬间激增的流量打垮系统。关于设置秒杀的代码及配置如下:

端口9101服务,秒杀接口代码段:

   /**
     * 秒杀活动,设置预热的流控规则
     */
    @GetMapping("/secKill")
    public String secKill() throws InterruptedException {
        log.info("---secKill---流控模式为 预热");
        Thread.sleep(200);
        return "ok";
    }

yaml文件配置内容如下:

server:
  port: 9101
spring:
  application:
    name: nacos-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.0.101:80

    sentinel:
      transport:
        dashboard: localhost:8080   
        port: 8720   
      web-context-unify: false
    
management:
  endpoint:
    web:
      exposure:
        include:'*'
service-url:
  nacos-user-service: http://nacos-provider

主启动类添加服务发现注解:


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumer9101Application {

    public static void main(String[] args) {
        SpringApplication.run(NacosConsumer9101Application.class, args);
    }

}

启动服务访问,初始化sentinel的簇点链路,访问链接:http://localhost:9101/secKill

在资源 /secKill添加流控规则。

流控规则设置

该流控规则设置含义:当单机 QPS达到10,预热时长是5秒。
在这 5s内流量有个流量突增的过程,预热因子默认是3,根据预热公式,当QPS超过单机阈值的三分之一,即超过3时,就开始限流,随着5s的推移,第一秒可能是3,第二秒是4,第5s是10。这个预热的流控效果,其实指的就是系统处理流量突增的过程。

在这里插入图片描述

测试结果

流控规则设置完之后,并发线程数设置为10,持续2min,开始进行压测【工具jmeter】:
在这里插入图片描述
观察资源流量的实时监控情况,可看出QPS超过10 之后,拒绝QPS那列有了数值,说明被限流了。再看下压测接口响应失败jmeter的显示内容,提示被限流了:
在这里插入图片描述

二)、流控效果:排队等待

1、概念含义

匀速排队的方式,可以严格控制请求通过的时间间隔,就是让请求匀速通过,对应算法为漏桶算法。
这种方式主要用来处理间隔性突发流量,类似消息队列,在某一秒大量请求袭来,而后处于空闲状态,可以让空闲时间处理先前这大批量的请求,而不是第一时间拒绝多余的请求。
类似一个匀速器,在固定时间间隔让请求通过:

  • 若当前请求距离上个通过的请求通过的时间间隔大于预设值,则请求通过。
  • 否则,若当前请求的预期时间<规则预设的超时时间,那当前请求就要等待直到大于预设值则请求通过。
  • 若预期的通过时间超过最大排队时长,则直接拒绝这个请求。

Sentinel的匀速排队等待流控效果,是基于漏桶算法结合虚拟队列等待机制实现的。
注意⚠️:匀速排队模式暂时不支持QPS超过1000的场景。

2、案例

比如这个例子:QPS单机阈值超过5,则进行排队等待,在15s内 ,1s处理5个,超过15s 还没处理完的其他请求,则视为超时。

流控规则设置

在这里插入图片描述

测试及结果

压测并发量10,持续2min,访问链接:http://localhost:9101/waiting
观察Sentinel流量监控平台的变化以及指标统计情况:

前半段超时时间设置的15s ,可以看到没有被限流的请求。
后半段蓝色折线图,流控规则排队等待的超时时间调整为1s,观察图表可以看到超过1s的请求视为超时,还没处理的请求都被限流了:
在这里插入图片描述

查看响应失败的接口响应信息展示:
在这里插入图片描述

二、流控规则实际使用总结

关于流控规则,主要围绕 :阈值类型,流控模式,流控效果这三个维度,做的测试以及释义,当然最主要还是实际应用场景,下面是具体阐述这三个维度组合起来,分别适合哪些特点的场景,以及实际对应的业务场景案例, 还有配置时注意事项。

一)、阈值类型、流控模式、流控效果组合及适用场景

其实在上一篇和本文都已陆续说过,但比较零散,还是需要单独梳理一下,算是巩固加强印象了,希望能对读者在工作中有帮助;组合使用大致梳理出6个点。

1、阈值为QPS 、流控模式为直接、快速失败[的流控效果]

1)规则适用的业务特点

直接限制单个资源每秒请求量,超出的请求会被立即拒绝。这种规则可快速响应流量突发状况,能有效保护资源不被过度请求。

2)适用场景
  • 验证码发送,防止恶意刷验证码的行为,可设置QPS阈值,同样超出阈值则直接拒绝。
3)配置时要注意的事项

具体设置的值要参考日常流量以及历史高峰流量倍数作压测指标,进行摸底压测,大促期间可以此摸底性能为阈值上限,进行设置,注意⚠️,绝不能高于摸底上限,否则无法起到保护作用,也不能太低,否则会影响正常业务。

2、阈值为QPS 、流控模式为关联、快速失败[的流控效果]

1)规则适用的业务特点

根据关联资源的QPS阈值,来控制当前资源的访问。当关联资源达到阈值,则对当前资源进行限流,通过关联关系间接保护关联资源不被压垮。

2)适用场景
  • 创单和支付,创单之后,会调用支付接口,可以创建流控规则,关联资源为支付,设置关联资源阈值,当支付达到该阈值,则对创单接口进行限流。
  • 订单系统中,创单和扣减库存也是一样的道理,避免卖超的方案之一,可以将扣减库存设为关联资源,当其QPS过高,超过阈值,依然要对创单接口进行限流。
  • 支付系统中,支付接口和用户的资金账户 同理,可将用户的资金账户设为关联资源,当QPS过高,超过其实际承载流量的阈值,这时支付的性能会受到影响,此时可对支付接口进行流控。
3)配置时要注意的事项

要准确识别到关联资源,确保关联的合理性,另外还要注意的点是,关联资源的阈值设置要考虑两个资源之间的业务逻辑关系。

一般作为关联资源的,可以是公共服务等设置为关联资源 或者 特点是业务链路的后置服务,如果该资源实际性能较差且不在核心链路上,可以设置为关联资源,以此来保护该资源不被压垮。
如果该资源在核心链路上,除了让其成为关联资源,还要进行优化,优化性能指标至少要跟核心链路起始资源性能对齐,如果内部涉及到第三方接口调用,无法提升性能,则要考虑技术方案的调整,比如看哪些业务数据可以前置操作,串行调用调整为并发编程,同步改为异步方式实现。具体还是要结合实际业务作技术方案调整的决策。
而且,被设置为关联的资源,通常是该资源容易遇到性能瓶颈,就是性能不足与当前系统流量高峰或历史高峰时的需求相匹配,所以要设置为关联资源以此来保护其功能保持在正常水平。

3、阈值为QPS 、流控模式为链路、快速失败[的流控效果]

1)规则适用的业务特点

只对指定链路的资源请求进行QPS限制,即当链路入口资源达到阈值,则对其进行限流。能精确控制特定调用链路流量,有效避免因该链路流量过大影响系统性能。

2)适用场景
  • 微服务架构中,某个服务可能涉及多个调用链路,若其中一条调用链路过大,可对该链路进行流控。场景比如 商品详情服务调用 加车服务,再调用结算服务这条调用链路,可以设置链路QPS阈值,超过则拒绝请求。
  • 某个接口有不同的调用来源,可对该特定来源的调用链路进行流控,比如结算创单资源接口,可以是普通商品调用链路的一个节点,也可以是促销如秒杀调用链路的一个节点,为了保护系统资源能正常服务,可以对秒杀等其他大流量的调用链路做链路流控配置。
3)配置时要注意的事项

明确要配置的链路规则,指定受流控的链路。同时,考虑链路阈值的动态变化,做出及时调控。

4、阈值为QPS 、流控模式为直接、Warm Up[的流控效果]

1)规则适用的业务特点

系统启动初期QPS较低,随时间推移,阈值逐渐增加到日常流量最大值,流控效果为预热模式,启动阶段可让系统有个流量适应过程。

2)适用场景

新上线服务,系统初始化阶段性能不稳定,可通过设置预热流控效果,能有效避免大量流量短时间涌入系统造成崩溃;比如服务版本升级重启,防止大量请求在瞬间击垮系统,可设置流控效果为预热模式。

促销活动,在活动开始之前,就会有一个流量持续增加的过程,比如秒杀前,系统流量会在段时间内迅速增加,所以要设置预热,即提前限流,会超过系统负载导致崩溃无法正常工作,对此场景,可设置QPS阈值,超出直接拒绝。

3)配置时要注意的事项

要合理设置预热时间和初始阈值,预热时间过短无法起到预热效果,过长则影响系统响应速度。

5、阈值为QPS 、流控模式为直接、排队[的流控效果]

1)规则适用的业务特点

请求超过QPS阈值,会进入排队等待, 从队列中匀速取出请求进行处理,可保证请求有序处理。此流控效果,适合非核心业务,比如某些营销类(不是全部哈,根据当前阶段业务重要程度,杠精请口下留情哈),对实时性要求不高,甚至可以滞后或降级处理的业务。

2)适用场景
  • 文件上传接口,对该操作的响应时间要求相对较低,可接受一定时间内的等待。当上传请求过多时,超出阈值的请求进入队列进行排队等待,然后按顺序匀速处理(类比mq的削峰填谷)。
  • 处理批量任务的时候,比如批量导入商品数据,可采用排队等待的流控效果,保证数据处理的有序性。
3)配置时要注意的事项

设置合理队列长度和超时时间,队列长度过长占用系统大量资源,超时时间设置过长会导致用户等待时间过长。
其实根源还是在接口本身的性能上要有所提升,如果时间允许,还是需要提升这种批量操作的性能,从而提升用户体验。

6、阈值为线程数 、流控模式为直接、快速失败[的流控效果]

1)规则适用的业务特点

设置当前资源线程数量的阈值,当线程数达到阈值则后续线程会被直接拒绝,防止系统因线程过多导致资源耗尽。

2)适用场景

比如一些计算密集型的服务,像大数据分析任务处理接口,一定程度上要限制线程数来避免cpu出现资源过度占用的情况。
还有就是数据库的连接数,我们通常在配置连库信息时会设置,但是粒度不够细,可以通过限制请求库连接的线程数,来规避过多线程竞争数据库连接的情况,比如查库接口。

3)配置时要注意的事项

根据系统硬件资源和业务需求合理进行设置线程数阈值,避免过低影响系统正常并发处理能力,阈值过高那么流控规则就形同虚设了。

二)、配置注意事项总结

1、阈值评估

结合系统硬件资源(如cpu ,磁盘,内存,网络等)、资源重要度(业务的核心程度级别)以及历史流量峰值【大促期间和日常流量】,准确预估阈值,作为摸底性能测试基础数据,在此基础上,中小厂2到3倍,大厂10-20倍,留足余量,以此标准作压力测试期望指标,以系统实际性能指标,作为阈值依据。

若接口性能不达标:
对于核心流程资源接口,则要进行优化,不能一味去做限流处理。
对于非核心资源接口,则要根据当前项目周期紧急程度,评估是否作限流或降级处理。

2、规则要动态调整

随着时间的推移,业务在不停的迭代,用户体量以及系统的流量也会因此发生变化,以往的规则不足以恒久满足对系统性能的要求,所以要基于当前对系统性能的要求,对规则作动态调整。

3、监控与报警

结合Sentinel控制台或其他监控工具(如阿里云的arms监控),实时监控系统流量以及性能,cpu,磁盘,内存,网络等指标,合理设置报警的阈值,当流量接近或超过阈值时,及时通知相关人员。

4、规则持久化

使用Nacos、Zookeeper等配置中心存储流控规则,确保规则在服务重启后不会丢失,且可实现动态调整。

这个会在本栏目Sentinel文章的最后通过案例形式落地

5、测试及验证

在正式环境使用新的流控规则前,要在测试环境充分测试,验证规则的有效性以及合理性,避免影响正式环境
的业务。

看到这的小伙伴,你真的很棒!但是要坚持奥。

小结:

在保障核心业务稳定性的同时,最大化利用系统资源,满足不同业务场景的需求。实际应用中需结合压测数据、监控指标和业务特性动态调整规则。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2327639.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PP-ChatOCRv3新升级:多页PDF信息抽取支持自定义提示词工程,拓展大语言模型功能边界

文本图像信息抽取技术在自动化办公、建筑工程、教育科研、金融风控、医疗健康等行业领域具有广泛应用场景。2024年9月&#xff0c;飞桨低代码开发工具PaddleX中新增文本图像智能产线PP-ChatOCRv3&#xff0c;充分结合PaddleOCR的文本图像版面解析能力和文心一言语言理解优势&am…

《二叉树:二叉树的顺序结构->堆》

二叉树一般可以使用两种结构存储&#xff0c;一种是顺序结构&#xff0c;一种是链式结构。 顺序存储 顺序结构存储是使用数组来存储&#xff0c;一般使用数组只适合表示完全二叉树&#xff0c;因为不是完全二叉树会有空间的浪费。实际上使用中只有堆才会使用数组来存储。二叉…

OpenLayers:封装Overlay的方法

平时在使用OpenLayers的Overlay时常感觉不便&#xff0c;于是最近我便封装了一些Overlay增删改查的方法&#xff0c;以提高可用性。这边文章中我会介绍我封装的方法&#xff0c;同时记录这个过程中踩的一些坑。 添加Overlay /*** abstract 添加overlay* param {*} map* param…

软件重构与项目进度的矛盾如何解决

软件重构与项目进度之间的矛盾可以通过明确重构目标与范围、采用渐进式重构策略、优化项目管理流程、提高团队沟通效率、建立重构意识文化等方式解决。其中&#xff0c;采用渐进式重构策略尤为关键。渐进式重构是指在日常开发过程中&#xff0c;以小步骤持续进行重构&#xff0…

数智化时代下开源AI大模型驱动的新型商业生态构建——基于AI智能名片与S2B2C商城小程序的融合创新研究

摘要 数字技术的指数级发展推动物理世界向数智化网状结构加速转型&#xff0c;传统商业逻辑面临系统性重构。本文以"开源AI大模型AI智能名片S2B2C商城小程序"为研究主体&#xff0c;采用案例分析与技术验证相结合的方法&#xff0c;揭示技术融合对商业生态的重塑机制…

Spring Cloud Alibaba 技术全景与实战指南

简介&#xff1a; Spring Cloud Alibaba 是阿里巴巴开源的微服务解决方案&#xff0c;基于 Spring Cloud 标准构建&#xff0c;提供了一站式分布式系统开发能力。它深度整合阿里云生态组件&#xff0c;为企业级微服务架构提供高可用、高性能的技术支撑。 核心特性 全栈微服务能…

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测

回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测 目录 回归预测 | Matlab实现NRBO-Transformer-BiLSTM多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【JCR一区级】Matlab实现NRBO-Transformer-BiLSTM多变量回归预测&#xf…

Git的基础使用方法

本文最终功能&#xff1a; 1.从终端直接传输代码给仓库 2.用终端从仓库克隆文件 基本概念 我们先来理解下 Git 工作区、暂存区和版本库概念&#xff1a; 工作区&#xff1a;就是你在电脑里能看到的目录。 暂存区&#xff1a;英文叫 stage 或 index。一般存放在 .git 目录下的…

Java常用异步方式总结

使用建议 完整代码见https://gitee.com/pinetree-cpu/parent-demon 提供了postMan调试json文件于security-demo/src/main/resources/test_file/java-async.postman_collection.json 可导入postMan中进行调试 Java异步方式以及使用场景 继承Thread类 新建三个类继承Thread&…

苍穹外卖day12

课程内容 工作台 Apache POI 导出运营数据Excel报表 功能实现&#xff1a;工作台、数据导出 工作台效果图&#xff1a; 数据导出效果图&#xff1a; 在数据统计页面点击数据导出&#xff1a;生成Excel报表 1. 工作台 1.1 需求分析和设计 1.1.1 产品原型 工作台是系统运…

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…

Linux中动静态库的制作

1.什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复⽤的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个⼈的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是⼀种可执⾏代码的⼆进制形式&#xff0c;可以被操作系统…

forms实现连连看

说明&#xff1a; forms实现连连看 效果图&#xff1a; step1:C:\Users\wangrusheng\RiderProjects\WinFormsApp2\WinFormsApp2\Form1.cs using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Windows.Forms;namespace …

鸿蒙开发踩坑记录 - 2024S2

wrapBuilder如果想View和ObservedV2做绑定 必须要用 ComponentV2 Param 和 区别 退出两层循环 Builder的传入的参数及时是Trace修饰的也无法刷新组件 折叠屏展开后键盘无法点击 vm是公用的&#xff0c;组件生命周期问题导致 监听键盘高度变化失效 原因&#xff1a;分享面…

0基础入门scrapy 框架,获取豆瓣top250存入mysql

一、基础教程 创建项目命令 scrapy startproject mySpider --项目名称 创建爬虫文件 scrapy genspider itcast "itcast.cn" --自动生成 itcast.py 文件 爬虫名称 爬虫网址 运行爬虫 scrapy crawl baidu(爬虫名&#xff09; 使用终端运行太麻烦了&#xff0c;而且…

鸿蒙NEXT小游戏开发:井字棋

1. 引言 井字棋是一款经典的两人对战游戏&#xff0c;简单易懂&#xff0c;适合各个年龄段的玩家。本文将介绍如何使用鸿蒙NEXT框架开发一个井字棋游戏&#xff0c;涵盖游戏逻辑、界面设计及AI对战功能。 2. 开发环境准备 电脑系统&#xff1a;windows 10 开发工具&#xff1a;…

deep-sync开源程序插件导出您的 DeepSeek 与 public 聊天

一、软件介绍 文末提供下载 deep-sync开源程序插件导出您的 DeepSeek 与 public 聊天&#xff0c;这是一个浏览器扩展&#xff0c;它允许用户公开、私下分享他们的聊天对话&#xff0c;并使用密码或过期链接来增强 Deepseek Web UI。该扩展程序在 Deepseek 界面中添加了一个 “…

4. 理解Prompt Engineering:如何让模型听懂你的需求

引言:当模型变成“实习生” 想象一下,你新招的实习生总把“帮我写份报告”理解为“做PPT”或“整理数据表”——这正是开发者与大模型对话的日常困境。某金融公司优化提示词后,合同审查准确率从72%飙升至94%。本文将用3个核心法则+5个行业案例,教你用Prompt Engineering让…

网络编程—网络概念

目录 1 网络分类 1.1 局域网 1.2 广域网 2 常见网络概念 2.1 交换机 2.2 路由器 2.3 集线器 2.4 IP地址 2.5 端口号 2.6 协议 3 网络协议模型 3.1 OSI七层模型 3.2 TCP/IP五层模型 3.3 每层中常见的协议和作用 3.3.1 应用层 3.3.2 传输层 3.3.3 网络层 3.3.4…

SELinux

一、selinux技术详解 SELinux 概述 SELinux&#xff0c;即 Security-Enhanced Linux&#xff0c;意为安全强化的 Linux&#xff0c;由美国国家安全局&#xff08;NSA&#xff09;主导开发。开发初衷是防止系统资源被误用。在 Linux 系统中&#xff0c;系统资源的访问均通过程…