限流的常见算法

计数器法

计数器算法,也成固定窗口法。可以控制在固定的时间窗口内,允许通过的最大的请求数。

例如,我们设定时间间隔窗口为1分钟,该窗口内的最大请求数max为100。当第1个请求到来时,我们记录下当前窗口内的第一个请求的时间firstReqTime,那么之后的请求到来时,先判断是否进入下一个窗口。

如果进入,则直接重置firstReqTime为当前时间,该请求通过。如果没进入,再判断是否超过max。

计数器法的缺点
该算法无法应对突发的流量,因为计数器法是固定窗口的。

例如第一个请求10:00:00到来,那么第一个时间窗口为10:00:00-10:01:00。之后在10:00:59时,突然来了99个请求,又在下一个时间窗口的10:01:01来了100个请求。

也就是说,在10:00:59-10:01:01的短短几秒内,共有199个请求到来,可能会瞬间压垮我们的应用。

滑动窗口法

滑动窗口法可以解决计数器在固定窗口法下无法应对突发流量的问题

固定窗口法是以第一个请求为窗口开始期,并向后截取intervalWindow长度,只有当窗口时间流逝完,才开辟新的窗口。

滑动窗口法以每一个请求为窗口结束期,向前截取intervalWindow长度,检查该范围内的请求总和,相当于会为每个请求开辟一个新窗口。

漏桶法

水龙头可以通过松紧来控制出水的速率,下方有一个储蓄桶来保存当前的水。储蓄通底部有一个出口,内部的水会以恒定的速率从出口漏掉。
如果储蓄桶满了之后,再进来的水会全部溢出。只有当出水速率和漏水速率相同时,储蓄桶才会在不漏水的前提下达到最大的吞吐量。
我们把水比作请求,水龙头就是客户端。请求产生的速率肯定不是恒定的,但处理请求的速率是恒定的。当储蓄桶满了之后,请求产生的速率必须要和处理请求的速率一致。
漏桶法的缺点
使用漏桶法去做限流,在业务平稳期其实已经够用了。但是在业务高峰期,我们又希望动态地去调整处理请求的速率,而不是一成不变的速率。
我们大可以动态地去改变参数leakRate的值,不过在计算剩余水量的时候,将会十分复杂。
因此,如果要考虑到对突发流量的控制,就不太推荐漏桶法了。

令牌桶法

首先有一个令牌桶,然后系统以一个恒定的速率向桶中放入令牌。当桶满时,会丢弃生成的令牌。

每有一个请求过来时,拿到令牌就可以执行,否则阻塞获取或者被直接丢弃。
漏桶是以一个恒定速率的出水,即处理请求的速率是恒定的。而令牌桶则是以一个恒定的速率往桶中放入令牌,在桶中令牌用完之前,并不限制处理请求的速率。
令牌桶的一个优势在于,可以允许短时间内的一次突发流量。但不会允许在短时间内的多次突发流量,因为令牌的填充也是需要时间的。

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

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

相关文章

文件系统 与 软硬链接

目录 一、文件系统 认识磁盘 磁盘存储的逻辑抽象结构 块组的内容 inode Table Data blocks inode Bitmap Block Bitmap Group Descriptor Table Super Block 理解目录 二、软硬链接 软链接​ 硬链接 硬链接数 一、文件系统 之前的博客主题叫做"进程打开文…

Winform编程详解十五:ProgressBar 进度条控件

一、属性介绍 1. (Name) 控件的对象标识符ID 2. BackColor 控件的背景颜色 3. Cursor 鼠标移过该控件显示的光标样式 4. ForeColor 控件的文本颜色 5. UseWaitCursor 使用鼠标的等待光标 6. Enabled 控件激活状态 7. Maximum 进度条的最大值 8. Minimum 进度条的最小…

【物联网应用】基于云计算的智能化温室种植一体化平台

目录 第一章 作品概述 1.1. 作品名称 1.2. 应用领域 1.3.主要功能 1.4.创新性说明 第二章 需求分析 2.1 现实背景 2.2 用户群体及系统功能 2.3 竞品分析 第三章 技术方案 3.1. 硬件组成与来源 3.2. 硬件设计合理性 3.3. 硬件系统设计图 3.4. 接口的通用性与可扩展性 3.5. 代码规…

vue中判断是否使用自定义插槽

在封装自定义组件时&#xff0c;需要判断使用者是否使用了插槽<slot"aaa">&#xff0c;如果没有则使用一个组件中默认的值&#xff0c;反之就用传入的内容<template name"aaa"></template>,实现如下&#xff1a; <div class"lin…

苍穹外卖-day06:HttpClient、微信小程序开发、微信登录(业务流程)、导入商品浏览功能代码(业务逻辑)

苍穹外卖-day06 课程内容 HttpClient微信小程序开发微信登录导入商品浏览功能代码 功能实现&#xff1a;微信登录、商品浏览 微信登录效果图&#xff1a; 商品浏览效果图&#xff1a; 1. HttpClient 1.1 介绍 HttpClient 是Apache Jakarta Common 下的子项目&#xff0c;…

深度解析大模型:概念、架构与应用价值

大模型&#xff0c;作为一种前沿的人工智能技术&#xff0c;已经成为深度学习领域的研究热点和发展趋势。这一概念主要指代那些规模庞大、参数数量众多、结构复杂的机器学习模型&#xff0c;尤其是深度神经网络模型。以下是对大模型的详细介绍&#xff1a; 基本概念 规模参数量…

文件系统I/O FATFS RW 源码分析

文件系统I/O FATFS RW 源码分析 0 参考 FatFs 是用于小型嵌入式系统的通用 FAT/exFAT 文件系统模块。FatFs 整个项目都按照 ANSI C (C89) 编写。与存储器 I/O 解耦良好&#xff0c;便于移植到 8051、PIC、AVR、ARM、Z80、RX 等小型微控制器中。 下面是关于 FAT 文件系统格式…

20.回文链表

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为 回文链表 。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;head …

linux 安装常用软件

文件传输工具 sudo yum install –y lrzsz vim编辑器 sudo yum install -y vimDNS 查询 sudo yum install bind-utils用法可以参考文章 《掌握 DNS 查询技巧&#xff0c;dig 命令基本用法》 net-tools包 yum install net-tools -y简单用法&#xff1a; # 查看端口占用情况…

浮点数加法

浮点数有时候计算结果会出现长尾小数&#xff0c;例如0.10.110.21000000000002&#xff0c;这种结果很麻烦。用包装类就可以轻松的解决这个问题&#xff0c;不过想着很久没写加法了&#xff0c;高精度加法也不咋写了&#xff0c;自己造下轮子熟悉一下算法&#xff0c;于是就写了…

【学习学习】学习金字塔

学习金字塔&#xff08;Cone of Learning&#xff09;&#xff0c;全称学习吸收率金字塔&#xff0c;是一种现代学习方式的理论。网上流传它是美国缅因州的国家训练实验室&#xff08;National Training Laboratories&#xff09;研究成果&#xff0c;用数字形式形象显示了采用…

音视频实战---音频重采样

1、使用swr_alloc()创建重采样实例 2、使用av_opt_set_int函数设置重采样输入输出参数 3、使用swr_init函数初始化重采样器 4、使用av_get_channel_layout_nb_channels函数计算输入源的通道数 5、给输入源分配内存空间–av_samples_alloc_array_and_samples 6、计算输出采…

【重温设计模式】观察者模式及其Java示例

观察者模式的概念和原理 在编程世界中&#xff0c;设计模式作为一种解决问题的策略&#xff0c;它的存在就如同人类语言中的成语&#xff0c;是一种经过时间考验的有效解决方案。 观察者模式就是其中一种重要的设计模式&#xff0c;它在很多场景中都有着广泛的应用。那么&…

外包干了5天,技术退步明显。。。。

说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&a…

Java项目:63 ssm网上花店设计+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统具备友好性且功能完善。管理员登录进入后台之后&#xff0c;主要完成花材选择管理&#xff0c;用户管理&#xff0c;鲜花管理&#xff0c;鲜花出入…

【数据结构与算法】(16):桶除了能装饭还能排序?

&#x1f921;博客主页&#xff1a;Code_文晓 &#x1f970;本文专栏&#xff1a;数据结构与算法 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&…

面试题 整理

第1题&#xff1a;常见数据类型大小 这边以64位计算机系统&#xff0c;环境而言。 类型 存储大小 值范围 char 1 字节 -128 到 127 或 0 到 255 unsigned char 1 字节 0 到 255 signed char 1 字节 -128 到 127 int 4 字节 -32,768 到 32,767 或 -2,147,483,648…

Python写猜数游戏

猜数游戏大家都玩过吧 规则&#xff1a;想一个数&#xff0c;然后去猜 所需用的库 作用是用来取随机数的 import random 然后定义机会和正确答案变量 answer random.randint(1, 100) opportunity 6 接下来定义规则逻辑 while opportunity > 0:print(f"| 还…

源神,启动!马斯克开源史上最大模型Grok,参数高达3140亿,可商用!

马斯克真不愧是源神&#xff0c;自开源X的推荐算法以及特斯拉智能驾驶算法后&#xff0c;又说到做到&#xff0c;开源旗下大模型Grok&#xff01; 代码和模型权重已上线GitHub。官方信息显示&#xff0c;此次开源的Grok-1是一个3140亿参数的混合专家模型&#xff0c;远超OpenAI…

C语言之判断浮点数

目录 一 简介 二 代码实现 A.方法一 B.方法二 二 时空复杂度 A.方法一 B.方法二 一 简介 在C语言中&#xff0c;判断浮点数的算法通常涉及到比较两个浮点数是否相等或比较它们的大小。由于浮点数运算存在精度误差问题&#xff0c;直接使用 或 ! 进行比较可能会导致不准…