微服务框架 SpringCloud微服务架构 微服务面试篇 54 微服务篇 54.8 Sentinel的限流与Gateway的限流有什么差别?

news2024/12/25 12:51:28

微服务框架

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

微服务面试篇

文章目录

      • 微服务框架
      • 微服务面试篇
      • 54 微服务篇
        • 54.8 Sentinel的限流与Gateway的限流有什么差别?
          • 54.8.1 限流与常见 限流算法
          • 54.8.2 固定窗口计数器算法
          • 54.8.3 滑动窗口计数器算法
          • 54.8.4 令牌桶算法
          • 54.8.5 漏桶算法
          • 54.8.6 限流算法对比

54 微服务篇

54.8 Sentinel的限流与Gateway的限流有什么差别?

54.8.1 限流与常见 限流算法

限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。

限流算法常见的包括两种:

  1. 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法

  2. 令牌桶算法(Token Bucket)

  3. 漏桶算法(Leaky Bucket)

54.8.2 固定窗口计数器算法

固定窗口计数器算法概念如下:

  • 将时间划分为多个窗口,窗口时间跨度称为Interval (中文意思:间隔),本例中为1000ms;

像下面这样

在这里插入图片描述

横坐标 → 时间,单位 ms

划分成窗口

在这里插入图片描述

纵坐标可以理解为 QPS 值,即每秒的请求数

  • 每个窗口维护一个计数器,每有一次请求就将计数器加一,限流就是设置计数器阈值,本例为3

在这里插入图片描述

QPS 超过3 ,就相当于超过 阈值 了

  • 如果计数器超过了限流阈值,则超出阈值的请求都被丢弃。

在这里插入图片描述

每个窗口分别 统计

这个样子 有些问题

在这里插入图片描述

这样就相当于这一秒钟 内 ,通过了 6 个请求,这样就很容易导致 服务宕机,因为在1 秒内已经超出阈值 了

【这个就是 固定窗口,但其实真正的时间是没有界限 的】

54.8.3 滑动窗口计数器算法

滑动窗口计数器算法会将一个窗口划分为n个更小的区间,例如

  • 窗口时间跨度Interval为1秒;区间数量 n = 2 ,则每个小区间时间跨度为500ms

在这里插入图片描述

这个时候就 相当于出现 了那么一些 更小 的区间

在这里插入图片描述

但这可不是 窗口,这只是 时间区间

  • 限流阈值依然为3,时间窗口(1秒)内请求超过阈值时,超出的请求被限流
  • 窗口会根据当前请求所在时间(currentTime)移动,窗口范围是从(currentTime-Interval)之后的第一个时区开始,到currentTime所在时区结束。

【举个栗子】

在这里插入图片描述

200 ms、 400 ms、900 ms 来的,所以前两个肯定在第一个时间区间,第三个请求 在第二个 时间区间

现在的滑动窗口 范围,是从当前时间 900ms, 900 - 1000 = -100,即从第一个 时区开始,到900 所在的时区【即前两个】

如果请求 当前时间为1250ms

在这里插入图片描述

滑动窗口 就是这个样子

计算这个范围内 总的请求量

在这里插入图片描述

这样就解决了固定 窗口的问题

但还是有有问题的 情况,比如下面这样

在这里插入图片描述

1250 - 2100 确实是 < 1s ,但是有4 个请求,但是滑动窗口 却只有两个,意思就是已经超出阈值了,但是并没有发现,这样就出事儿了

其实也可以通过把 窗口划分得更细,来解决。。

即窗口划分得越细,限流的效果就越准确【但是始终会出现“ 碰巧情况”,就是达不到 绝对准确】

54.8.4 令牌桶算法

令牌桶算法说明:

在这里插入图片描述

一个桶, 里面可以存储令牌

在这里插入图片描述

而且这个令牌是以固定速率 去生成 的

  • 以固定的速率【“限流的值”】生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃【即桶中令牌的数量不会超过 “阈值”】

  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理

在这里插入图片描述

“要过是吧,先拿令牌”

在这里插入图片描述

拿到令牌了 ,OK,放行

在这里插入图片描述

  • 如果令牌桶中没有令牌,则请求等待或丢弃

在这里插入图片描述

但是还是有个 “问题”,思考这样一个情况

如果每秒钟生成 5 个令牌,第1 秒钟生产 了5 个令牌进桶,但是第一秒内,一个请求也没有,这5 个令牌就会存起来,OK,第2 秒钟, 突然来了 10个请求

这样的话,前 5个请求瞬间就过去了,然后第2 秒还会生成 5个令牌,所以第二秒内, 10 个请求全过去了

好家伙, 这样就 超出阈值 了

  • 问题:超出了阈值
  • 优势:能 应对突发请求
54.8.5 漏桶算法

漏桶算法说明:

在这里插入图片描述

一个存请求的桶

  • 将每个请求视作"水滴"放入"漏桶"进行存储;

在这里插入图片描述

  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;

在这里插入图片描述

  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。

在这里插入图片描述

  • 可以理解成请求在桶内排队等待

  • 优势:可以应对突发请求

  • 相对于 令牌桶 更加平滑

Sentinel在实现漏桶时,采用了排队等待模式:

让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。并发的多个请求必须等待,预期的等待时长 =最近一次请求的预期等待时间 + 允许的间隔。如果请求预期的等待时间超出最大时长,则会被拒绝。

例如:QPS = 5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常

在这里插入图片描述

如果同一时刻 第12 个请求也来了,它的预期等待时长 就会超过2000ms,它会被拒绝

在这里插入图片描述

在这里插入图片描述

令牌桶 和 漏桶对比

54.8.6 限流算法对比

因为计数器算法一般都会采用滑动窗口计数器,所以这里我们对比三种算法:

对比项滑动时间窗口令牌桶漏桶
能否保证流量曲线平滑不能,但窗口内区间越小,流量控制越平滑基本能,在请求量持续高于令牌生成速度时,流量平滑。 但请求量在令牌生成速率上下波动时,无法保证曲线平滑能,所有请求进入桶内,以恒定速率放行,绝对平滑
能否应对突增流量不能,徒增流量,只要高出限流阈值都会被拒绝。能,桶内积累的令牌可以应对突增流量能,请求可以暂存在桶内
流量控制精确度低,窗口区间越小,精度越高

在这里插入图片描述

OK,现在来回答我们的问题

Sentinel的限流与Gateway的限流有什么差别?

问题说明:考察对限流算法的掌握情况

难易程度:难

参考话术

限流算法常见的有三种实现:滑动时间窗口、令牌桶算法、漏桶算法。Gateway则采用了基于Redis实现的令牌桶算法。

而Sentinel内部却比较复杂:

  • 默认限流模式是基于滑动时间窗口算法
  • 排队等待的限流模式则基于漏桶算法
  • 而热点参数限流则是基于令牌桶算法

此时,如果面试官追问滑动时间窗口、令牌桶、漏桶算法原理,则根据上一节内容来回答。【妙啊】

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

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

相关文章

dlib实现人脸识别+活体检测

目录&#xff1a; 一&#xff1a;dlib的shape_predictor_68_face_landmarks模型 二、眨眼检测 三、张口检测 四、眨眼检测张口检测 五、人脸识别 六、人脸识别活体检测 七、人脸识别破解方法 八、参考资料及下载 一&#xff1a;dlib的shape_predictor_68_face_landmarks模型 …

二、导入文献

导入文献 1.导入文献的方式 2.直接检索方式 &#xff08;1&#xff09;增加检索条件&#xff08;最右侧&#xff09;&#xff1a; &#xff08;2&#xff09;设置逻辑关系&#xff08;最左侧&#xff09;&#xff1a; &#xff08;3&#xff09;跨年度检索&#xff1a; 3.英…

Web3中文|美前总统特朗普发布NFT,数千美元“换取”一顿晚餐

本周三&#xff0c;特朗普在他的社交媒体网站上开玩笑说他将发布“重大公告”&#xff0c;随后他于周四在Truth social上宣布推出45,000个NFT。 根据网站介绍&#xff0c;这些特朗普数字交易卡以类似于可收藏棒球卡的风格来展现这位美国前总统的形象。 这些NFT在Polygon上铸造…

(附源码)ssm心理咨询服务平台 毕业设计 324615

ssm心理咨询服务平台 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对心理咨询服务平台等问…

FDDB roc验证工具使用方法

官方提供的是cpp的代码 环境&#xff1a;vs&#xff0c;opencv 1.配置opencv 首先在vs中新建个项目&#xff0c;把下载到的tgz文件解压&#xff0c;然后把hpp的放到头文件&#xff0c;cpp文件放到原文件&#xff0c;然后调整项目的属性&#xff0c;引入opencv。 参考https://…

编程学习简谈

如果你想知道怎么有效自学编程&#xff0c;欢迎继续往下看。我会和你分享这几年总结下来的5大绝招&#xff0c;让你少走一些弯路&#xff0c;以最快的速度上手编程。最近有很多朋友都在问我&#xff0c;究竟能不能自学编程呢&#xff1f;以我多年的经验&#xff0c;我可以负责任…

Python自动化运维—Paramiko实验(思科)

Paramiko实验——&#xff08;思科&#xff09;网络搭建 小白网工的python之路 【Python-自动化】paramiko模块 paramiko介绍 paramiko是基于Python实现的SSH2远程安全连接&#xff0c;支持认证及密钥方式。可以实现远程命令执行、文件传输、中间SSH代理等功能&#xff0c;相对…

网站seo优化到底该怎么做呢

企业网站seo优化到底该怎么做?”,今天为大家分享这个问题,推广做得好不好,全看你知不知道这些神技巧。 话不多说,一起来看看网站seo优化到底该怎么做吧! 企业网站seo优化到底该怎么做? 首先我们先思考SEO到底从哪几个方面入手。其实在做网站的时候,已经做过最基础的SEO…

Contest2800 - 【在线编程平台】2022年计算机类数据结构作业9.20221110-1115

问题 BW: 将邻接矩阵存储的图转换为邻接表存储的图&#xff0c;附加代码模式 内存限制&#xff1a;128 MB时间限制&#xff1a;1.000 S 评测方式&#xff1a;文本比较命题人&#xff1a;liuyong 提交&#xff1a;906解决&#xff1a;652 返回比赛提交提交记录侧边提交 题目…

Clickhouse表引擎探究-ReplacingMergeTree

作者&#xff1a;耿宏宇 1 表引擎简述 1.1 官方描述 MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入&#xff0c;数据片段在后台按照一定的规则进行合并。相比在插入时不断修改&#xff08;重写&#xff09;…

(1)Linux搭建 zookeeper+kafka集群

因为之前公司业务都是使用mqtt接收数据&#xff0c;随着设备的增加&#xff0c;公司觉得用kafka集群来实现会更好 下面是我写一个demo 仅供参考 一、安装jdk 没有安装的可以百度去看看怎么安装的 不行的话在私聊我&#xff01;&#xff01;&#xff01;&#xff01; 二、搭建…

【Python】用turtle绘制“混沌皮”

画的不好看&#xff0c;不喜勿喷。 目录 展示​ 设置界面 绘制全身 绘制眼睛 全部代码 展示 我用的是turtle绘制的&#xff0c;不会的可以看这篇文章&#xff1a;【Python】turtle库的介绍及使用&#xff08;计算机二级常考&#xff09;_刘佳皓_Leo的博客-CSDN博客_t…

肝了一周总结的SpringBoot常用注解大全,一目了然!

平时使用SpringBoot开发项目&#xff0c;少不了要使用到它的注解。这些注解让我们摆脱了繁琐的传统Spring XML配置&#xff0c;让我们开发项目更加高效&#xff0c;今天我们就来聊聊SpringBoot中常用的注解&#xff01; SpringBoot实战电商项目mall&#xff08;50kstar&#xf…

aardio工程实例——MIDI音乐盒(源码)

前段时间&#xff0c;aardio增强了midiOut库相关功能&#xff0c;我结合这个库写了个程序&#xff0c;一方面自娱自乐&#xff0c;同时也给新接触aardio的朋友做个参考。 主要界面&#xff1a; 奉送两个乐谱&#xff1a; 外婆的澎湖湾 ________, 晚风轻拂澎湖湾 3,__,5,__,5,_…

车载以太网DoIP测试专栏 - 总纲

本专栏的目的&#xff1a;无论你是刚入行的小白还是对DoIP有一定工作经验的从业人员&#xff0c;保证在你完成这块的讲解后&#xff0c;首先让你了解DoIP要测试哪些&#xff1f;再者为何要测试这些是否还有更多的内容需要去测试&#xff0c;最后如何实现DoIP协议的测试&#xf…

智能制造工业互联简述

智能制造系统架构通过生命周期、系统层级和智能功能三个维度构建完成&#xff0c;主要解决智能制造标准体系结构和框架的建模研究 生命周期是由设计、生产、物流、销售、服务等一系列相互联系的价值创造活动组成的链式集合。生命周期中各项活动相互关联、相互影响。不同行业的生…

构造函数、原型和实例的关系

构造函数、原型和实例的关系&#xff1a; 每个构造函数都有一个原型对象&#xff0c;原型有一个属性指回构造函数&#xff0c;而实例有一个内部指针指向原型。如果原型是另一个类型的实例呢&#xff1f;那就意味着这个原型本身有一个内部指针指向另一个原型&#xff0c;相应地另…

[附源码]计算机毕业设计Python第三方游戏零售平台(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

Unity实战篇 |Unity 打包exe 实现隐藏窗口标题栏、隐藏最小化最大化关闭按钮

&#x1f3ac; 博客主页&#xff1a;https://xiaoy.blog.csdn.net &#x1f3a5; 本文由 呆呆敲代码的小Y 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f384; 学习专栏推荐&#xff1a;Unity系统学习专栏 &#x1f332; 游戏制作专栏推荐&#xff1a;游戏制作 &…

【疾病分类】模糊逻辑分类叶病严重程度分级系统【含GUI Matlab源码 194期】

⛄一、模糊逻辑(Fuzzy Logic)简介 理论知识参考&#xff1a;模糊逻辑(Fuzzy Logic) ⛄二、部分源代码 function varargout LeafDiseaseGradingSystemGUI(varargin) % LeafDiseaseGradingSystemGUI MATLAB code for LeafDiseaseGradingSystemGUI.fig % LeafDiseaseGradingSy…