微服务保护-流控效果

news/2024/7/4 7:47:28 标签: 微服务, 架构, 云原生

请添加图片描述
个人名片:

博主:酒徒ᝰ.
个人简介沉醉在酒中,借着一股酒劲,去拼搏一个未来。
本篇励志三人行,必有我师焉。

请添加图片描述
本项目基于B站黑马程序员Java《SpringCloud微服务技术栈》,SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 点击观看

目录

  • 二、流量控制
    • 4. 流控效果

二、流量控制

雪崩问题虽然有四种方案,但是限流是避免服务因突发的流量而发生故障,是对微服务雪崩问题的预防。我们先学习这种模式。

4. 流控效果

在流控的高级选项中,还有一个流控效果选项:
流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

  • 快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式。
  • warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值。
  • 排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长
  1. warm up

阈值一般是一个微服务能承担的最大QPS,但是一个服务刚刚启动时,一切资源尚未初始化(冷启动),如果直接将QPS跑到最大值,可能导致服务瞬间宕机。

warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 maxThreshold / coldFactor,持续指定时长后,逐渐提高到maxThreshold值。而coldFactor的默认值是3.

案例

需求:给/order/{orderId}这个资源设置限流,最大QPS为10,利用warm up效果,预热时长为5秒

1)配置流控规则:

在这里插入图片描述

2)Jmeter测试

选择《流控效果,warm up》:

刚刚启动时,大部分请求失败,成功的只有3个,说明QPS被限定在3,随着时间推移,成功比例越来越高:
刚刚启动,大部分请求失败
在这里插入图片描述
一段时间后,成功的请求数目增多
在这里插入图片描述
最后请求全部成功
在这里插入图片描述

到Sentinel控制台查看实时监控:

在这里插入图片描述

  1. 排队等待

当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。

而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。
如果使用队列模式做流控,所有进入的请求都要排队,以固定的间隔执行,QPS会变的很平滑。
平滑的QPS曲线,对于服务器来说是更友好的。

案例

需求:给/order/{orderId}这个资源设置限流,最大QPS为10,利用排队的流控效果,超时时长设置为5s

1)添加流控规则
在这里插入图片描述

2)Jmeter测试

选择《流控效果,队列》:

QPS为15,已经超过了我们设定的10。
如果是之前的 快速失败、warmup模式,超出的请求应该会直接报错。
但是我们看看队列模式的运行结果:

在这里插入图片描述

全部都通过了。

再去sentinel查看实时监控的QPS曲线:

在这里插入图片描述

QPS非常平滑,一致保持在10,但是超出的请求没有被拒绝,而是放入队列。因此响应时间(等待时间)会越来越长。

当队列满了以后,才会有部分请求失败:

在这里插入图片描述

总结

流控效果有哪些?

  • 快速失败:QPS超过阈值时,拒绝新的请求
  • warm up: QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机。
  • 排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,直接拒绝

http://www.niftyadmin.cn/n/5031865.html

相关文章

nvue文件中@click.stop失效

在nvue文件中在子元素使用click.stop失效,父元素的事件触发了 在uniapp开发中nvue文件是跟vue文件是不一样的,就比如click.stop阻止点击事件继续传播就失效了,这时我们需要在子元素事件中添加条件编译,这样就会解决这个问题 // …

【超实用】教你生成GUID

oi,好久不见呀,最近又许久未更新了。大家也都在催更ERP的文章,可最近着实比较忙,趁今天有点小空隙,给大家分享个非常实用的代码,生成GUID。 我们先来看两个概念,在知道什么是GUID之前,必须要先…

29.单链表的C语言完整实现

主要包含&#xff1a; 单链表的数据结构&#xff0c;初始化&#xff0c;打印输出&#xff0c;建立单链表&#xff08;尾插法&#xff09;&#xff0c;元素按位插入&#xff0c;按位删除&#xff0c;按值查找。 #include<stdio.h> #include<stdlib.h> #include<…

pte初步认识学习

我们的时间的确很少&#xff0c;但是我们每天都乐意将珍贵的时间浪费在大量毫无意义的事情上 目录 pte介绍 PTE口语评分规则 pte架构 计算机科学23 QS排名 《芭比》 pte介绍 PTE口语评分规则 有抑扬顿挫 对于连读 不能回读 native pte对于个别单词没有读好&#xff0c…

「UG/NX」Block UI 指定轴SpecifyAxis

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

Python傅立叶变换

1. 什么是傅里叶变换&#xff1f; 在数学中&#xff0c;变换技术用于将函数映射到与其原始函数空间不同的函数空间。傅里叶变换时也是一种变换技术&#xff0c;它可以将函数从时域空间转换到频域空间。例如以音频波为例&#xff0c;傅里叶变换可以根据其音符的音量和频率来表示…

LeetCode 0213. 打家劫舍 II:动动态规划

【LetMeFly】213.打家劫舍 II&#xff1a;动动态规划 力扣题目链接&#xff1a;https://leetcode.cn/problems/house-robber-ii/ 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋&#xff0c;每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 &#xff0c;这意味…

xshell---git上传文件到gitee远程仓库配置

1.git下载 如果没有xshell下没有下载过git&#xff0c;可以参考这篇的教程&#xff1a;Linux配置安装 git 详细教程 下载后可以通过 git --version 查看git的版本号&#xff0c;验证是否安装成功 2.新建仓库 首先需要在gitee上注册一个账号 然后再主页面点击右上边框的 号…