SpringCloud学习笔记 - 流控规则 - Sentinel

news2024/11/25 6:42:11

1. Sentinel流控规则简介

在这里插入图片描述

这里的流控指的是“流量控制”,进一步解释说明:

  • 资源名:唯一名称,默认请求路径。

  • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)。

  • 阈值类型/单机阈值:

    • QPS(每秒钟的请求数量)︰当调用该API的QPS达到阈值的时候,进行限流。
    • 线程数:当调用该API的线程数达到阈值的时候,进行限流。
  • 是否集群:不需要集群

  • 流控模式:

    • 直接:API达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流当前资源
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【API级别的针对来源】。
  • 流控效果:

    • 快速失败:直接失败,抛出异常
    • Warm up:根据Code Factor的值(冷加载因子,默认3),从阈值/code Factor,经过预热时长,才达到设置的QPS阈值。
    • 排队等待:匀速排队,让请求以匀速通过,阈值类型必须设置为QPS,否则无效。

2. Sentinel流控规则介绍

2.1. 模式一:QPS直接快速失败

规则设置: QPS -> 直接 -> 快速失败 (sentinel的默认设置)
在这里插入图片描述

配置说明: 以上设置表示是对/testA进行访问流量监控,1秒钟内允许最多查询1次,若超过次数1,则直接->快速失败,抛出默认错误。

测试流控效果: 可以在浏览器快速多次访问请求地址http://localhost:8401/testA,返回页面 Blocked by Sentinel (flow limiting),访问量下降后自动恢复访问。
在这里插入图片描述

2.2. 模式二:并发线程数直接失败

线程数:当调用该API的线程数达到阈值的时候,进行限流。可以用JMeter进行并发线程测试
在这里插入图片描述

2.3. 模式三:QPS关联快速失败

流控模式-关联:当前资源可以将一个服务访问接口作为关联资源,当被关联的资源达到预定的阈值时,对自身进行限流。这样设计的目的是为了在testA/B在争抢资源时,保证B可以正常运行。

1. 设置testA的流控规则,将testB设置为testA的关联资源。
以下设置表示:testB为testA的关联资源,当关联资源testB的QPS(每秒的访问量)大于1时,testA就会进行流控,效果为快速失败。
在这里插入图片描述

2. 使用Postman进行并发测试,密集访问testB

2.1. 新建一个多线程集合,并添加testB请求。
在这里插入图片描述在这里插入图片描述
2.2. 请求添加完成后,为请求集合添加一个访问迭代器,循环调用testB请求。
在这里插入图片描述
在这里插入图片描述

3. 启动postman循环调用,此时再访问/testA,发现服务中断了。
在这里插入图片描述

3. Sentinel流控-链路

NodeSelectorSlot 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点,调用链的入口都是这个虚节点的子节点。
一棵典型的调用树如下图所示:
在这里插入图片描述

上图中来自入口 Entrance1Entrance2 的请求都调用到了资源 NodeASentinel 允许只根据某个入口的统计信息对资源限流。比如我们可以设置 FlowRule.strategyRuleConstant.CHAIN,同时设置 FlowRule.ref_identityEntrance1 来表示只有从入口 Entrance1 的调用才会记录到 NodeA 的限流统计当中,而对来自 Entrance2 的调用漠不关心。调用链的入口是通过 API 方法 ContextUtil.enter(name) 定义的。

4. Sentinel流控-预热

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

通常冷启动的过程系统允许通过的 QPS 曲线如下图所示:
在这里插入图片描述

默认coldFactor为3,即请求QPS 从 threshold / 3开始,经预热时长逐渐升至设定的QPS阈值。
源码可以查看: com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController

流控规则测试:QPS-直接-WarmUp
在这里插入图片描述

以上配置表示:
系统在开始的时候会将单机阈值控制在3(10 设置的单机阈值/3 默认的冷却因子),等经过预热时长5秒后,再将单机阈值提高到10。当前5秒每秒的请求大于3时,系统会直接抛出异常,后5秒则变为10.

5. Sentinel流控-排队等待

匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。详细文档可以参考 流量控制 - 匀速器模式,具体的例子可以参见 PaceFlowDemo。
在这里插入图片描述
这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

5.1. 模式一:QPS直接排队等待

匀速排队,让请求以均匀的速度通过,阀值类型必须设成QPS,否则无效。
在这里插入图片描述

以上设置表示:/testB每秒允许1次请求,超过的话就排队等待,等待的超时时间为20000毫秒。

5.2. 使用postman进行测试

postman压测设置:
因为portman不能进行并发测试,我们这里只测试下,排队等待的匀速通过情况。超时请求失败可以使用jmeter进行并发请求测试。
设置请求集合的迭代请求为20次,每100毫秒请求一次。也就是说20次请求会在2秒内执行完成。
在这里插入图片描述

5.3. 启动迭代请求,观察后台打印:

我们可以看到本应失败的请求,在排队等待策略下,全部已1秒一次的匀速方式,成功访问。
在这里插入图片描述

注意:匀速排队模式暂时不支持 QPS > 1000 的场景。

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

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

相关文章

爬虫解析模块(bs4,selenium)

bs4文档 from bs4 import BeautifulSoupBeautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。 解析器 解析器使用方法优势劣势Python标准库BeautifulS…

Dubbo——入门介绍

目录1.概述1.1.什么是 Dubbo ?1.2.Dubbo 架构2.Dubbo 快速入门2.1.Zookeeper 安装2.2.创建项目2.3.代码实现2.3.1.dubbo-service 模块2.3.2.dubbo-web 模块2.4.本地启动2.5.使用 Dubbo 实现 PRC2.5.1.修改 dubbo-service 模块2.5.2.修改 dubbo-web 模块2.5.3.启动 d…

可免费编辑 PDF 内容的 7 大 PDF 编辑工具

有时您可能希望编辑 PDF 文档中的敏感信息,例如财务帐号和 ID 号,以便在不泄露隐私的情况下共享 PDF。编辑 PDF 是从 PDF 中删除私有内容。使用PDF 编辑工具可以轻松完成编辑。市场上有这么多工具,您需要选择最好的一种。 7 大 PDF 编辑工具 …

data analysis and predict

data anlysis and predict 谢邀,本人正在崩溃和兴奋间反复横跳(崩溃居多),anyway, 我心态超好的!besides, 仅供个人学习查阅,不具任何参考价值!!! (小边不想努…

路由信息协议RIP

文章目录路由信息协议RIP一、Routing Information Protocol的定义二、RIP的基本工作过程三、“坏消息传播得慢”的问题四、总结路由信息协议RIP 一、Routing Information Protocol的定义 RIP是分布式的基于距离向量的路由选择协议 协议RIP的特点是: 仅和相邻路由…

Java数据结构(泛型)

1、集合框架 Java 集合框架Java Collection Framework ,又被称为容器container ,是定义在 java.util 包下的一组接口interfaces 和其实现类classes 。 其主要表现为将多个元素element 置于一个单元中,用于对这些元素进行快速、便捷的存储sto…

【XML了解】xml与hxml 标记语言学习

XML与HXML的区别 XML 被设计用来传输和存储数据,结构化、存储以及传输信息(如:数据包) XML 被设计用来传输和存储数据,其焦点是数据的内容 XML 标签没有被预定义, 需要自行定义标签 HTML 被设计用来表现和展示数据&…

数组常用方法总结 (7) :copyWithin / fill / reduce / reduceRight

copyWithin 将指定位置的元素复制到数组的其他位置。返回值为移动后数组。原始数组的内容会被改变,原始数组的长度不会改变。arr.copyWithin(index, startIndex, endIndex)第一个参数为,期望被复制的内容将要插入的位置。第二个参数为,数组中…

SpringBoot 参数接收只看这一篇文章就够了

好久没有写过接口了,最近在写一些基础接口,在写参数接口接收参数的时候居然想不起来,会有那么一丝丝的怀疑,虽然并不会影响编码,但是说明一个问题,没有系统的总结知识,没有温故知新,…

PMP真的有用吗?

作为一个考了PMP的前辈来说,是有用的。PMP 含金量,PMP有没有用,这类问题一直是大家关注的重点,知乎上几个相关问题热度也一直很高。友情提示一句:PMP 就是一个证书,能起到加分和门槛的作用,技术…

Diazo Biotin-PEG3-DBCO,二苯并环辛炔PEG3重氮生物素,无铜 Click Chemistry

Diazo Biotin-PEG3-DBCO反应原理:Diazo Biotin-PEG3-DBCO 是一种点击化学标记生物素,可通过无铜 Click Chemistry 与叠氮化物发生反应。重氮允许使用连二亚硫酸钠 (Na2S2O4) 从链霉亲和素中有效释放捕获的生物素化分子。点击化学生物素标记试剂包含各种点…

基于麻雀算法优化的深度极限学习机DLM的预测算法(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于SpringBoot的SSMP整合(业务层表现层)

基于SpringBoot的SSMP整合(数据层)https://blog.csdn.net/weixin_51882166/article/details/128693739?spm1001.2014.3001.5502 标准CRUD Service层接口定义与数据层接口定义具有较大差距。 定义Service接口: package com.example.ssmp_…

蓝桥杯STM32G431RBT6学习——LCD

蓝桥杯STM32G431RBT6学习——LCD 前言 作为在开发板上最显眼的LCD屏幕,自然而然也是每年的必考考点。国信长天开发板使用的是一块2.4寸(240*320)的TFT-LCD液晶屏,其引脚占用如下: 其中,CS为片选信号引脚…

【Netty】实现IM聊天室案例Demo

文章目录1、WebSocket链接建立2、实现用户上线功能3、私聊发送消息注意: 该文章不会详细介绍Netty相关概念和原理,主要目的是介绍如何快速构建聊天室Demo 不会在文章主体过多说明代码流程,文章中的代码已经配备了详细的注释 1、WebSocket链接…

网站建设 之 用js写wasm

为什么要这么做?编译js比解释js更快是必然的wasm是什么?我期望是一个二进制文件WebAssembly(又名wasm)是一种高效的,低级别的编程语言。 它让我们能够使用JavaScript以外的语言(例如C,C &#x…

【Linux】进度条小程序

目录一.\r && \n二.行缓存区概念问题:解答:检测:三.进度条1.进度动态条2.进度百分比3.小装饰4.颜色该篇博客会主要按步骤推导出一个在Linux上运行的进度条小程序,会用到vim编辑器和gcc编译器,如果对这两个软件…

Centos7安装、卸载nginx及配置,配置成系统服务(一步到位)

目录 前言 一、下载安装解压 1.进入临时文件夹里(随便一个都行) 2.下载并安装nginx压缩包 3.解压该压缩包 4.创建目标文件夹 5.(默认会安装在/usr/local/nginx)这里通过configure命令指定安装目录 6.编译安装 7.最后生成的…

一、初始Numpy

1、numpy简介 简介 Numpy(Numerical Python)是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库 Numpy的前身Numeric最早是有Jim Hugunin与其他协作者共同开发,20…

十五天学会Autodesk Inventor,看完这一系列就够了(九),主题/色彩/单位设置

众所周知,Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad,所以再学习Inventor&…