您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

常用的限流算法有哪些?

时间:2019-08-20 09:15:10  来源:  作者:

为什么要做限流呢?举一个生活中的例子,大家早上上班都要挤地铁吧,地铁站在早高峰的时候经常要限制客流,为什么呢?有人会觉得这是人为添堵。真是这样吗?如果不执行客流控制,大家想想会是什么场景呢?站台到处都挤满了乘客,就算你使出洪荒之力也不一定能顺利上车,且非常容易引发肢体碰撞,造成冲突。有了客流控制之后,地铁站才能变得秩序井然,大家才能安全上地铁。

一个系统的处理能力是有上限的,当服务请求量超过处理能力,通常会引起排队,造成响应时间迅速提升。如果对服务占用的资源量没有约束,还可能因为系统资源占用过多而宕机。因此,为了保证系统在遭遇突发流量时,能够正常运行,需要为你的服务加上限流。

常见的限流算法有:漏桶、令牌桶、滑动窗口计数。

分类

按照计数范围,可以分为:单机限流、全局限流。单机限流,一般是为了应对突发流量,而全局限流,通常是为了给有限资源进行流量配额。

按照计数周期,可以分为:QPS、并发(连接数)。

按照阈值设定方式的不同,可以分为:固定阈值、动态阈值。

漏桶算法

下面这张图,是漏桶的示意图。漏桶算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水,当水流入速度过大时,会直接溢出,可以看出漏桶算法能强行限制数据的传输速率。漏桶算法(Leaky Bucket)是网络世界中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。

常用的限流算法有哪些?

漏桶算法原理

漏桶算法可以使用 redis 队列来实现,生产者发送消息前先检查队列长度是否超过阈值,超过阈值则丢弃消息,否则发送消息到 Redis 队列中;消费者以固定速率从 Redis 队列中取消息。Redis 队列在这里起到了一个缓冲池的作用,起到削峰填谷、流量整形的作用。

令牌桶算法

对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。桶里能够存放令牌的最高数量,就是允许的突发传输量。

常用的限流算法有哪些?

令牌桶算法原理

Guava 中的限流工具 RateLimiter,其原理就是令牌桶算法。

滑动窗口计数法

计数法是限流算法里最容易理解的一种,该方法统计最近一段时间的请求量,如果超过一定的阈值,就开始限流。在 TCP 网络协议中,也用到了滑动窗口来限制数据传输速率。

常用的限流算法有哪些?

滑动窗口计数原理

滑动窗口计数有两个关键的因素:窗口时长、滚动时间间隔。滚动时间间隔一般等于上图中的一个桶 bucket,窗口时长除以滚动时间间隔,就是一个窗口所包含的 bucket 数目。

滑动窗口计数算法的实现,可以查看这篇文章:降级熔断框架 Hystrix 源码解析:滑动窗口统计。

动态限流

一般情况下的限流,都需要我们手动设定限流阈值,不仅繁琐,而且容易因系统的发布升级而过时。为此,我们考虑根据系统负载来动态决定是否限流,动态计算限流阈值。可以参考的系统负载参数有:Load、CPU、接口响应时间等。

常用的限流算法有哪些?

动态限流

作者:albon

链接:https://www.jianshu.com/p/7a8cae9d3ea5

来源:简书



Tags:限流算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。 限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1、计...【详细内容】
2023-02-20  Tags: 限流算法  点击:(5)  评论:(0)  加入收藏
最近,我们的业务系统引入了Guava的RateLimiter限流组件,它是基于令牌桶算法实现的,而令牌桶是非常经典的限流算法。本文将跟大家一起学习几种经典的限流算法。 限流是什么?维...【详细内容】
2021-08-06  Tags: 限流算法  点击:(259)  评论:(0)  加入收藏
前言在一个高并发系统中对流量的把控是非常重要的,当巨大的流量直接请求到我们的服务器上没多久就可能造成接口不可用,不处理的话甚至会造成整个应用不可用。那么何为限流呢?顾...【详细内容】
2020-12-15  Tags: 限流算法  点击:(247)  评论:(0)  加入收藏
作为热点频出的电商系统,经常遇到高并发,热点秒杀的场景。我们在开发设计高并发海量业务请求的系统时,通常利用三板斧:缓存、降级和限流来保障系统稳定性。...【详细内容】
2020-09-27  Tags: 限流算法  点击:(141)  评论:(0)  加入收藏
限流又称为流量控制(流控),通常是指限制到达系统的并发请求数。我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为 8 万人;沙河地铁站早高峰通过站外排队逐一放行的方式限制同一时间进入车站的旅...【详细内容】
2020-09-17  Tags: 限流算法  点击:(169)  评论:(0)  加入收藏
前言分布式环境下应对高并发保证服务稳定几招,按照个人理解,优先级从高到低分别为缓存、限流、降级、熔断,每招都有它的作用,本文重点就讲讲限流这部分。坦白讲,其实上面的说法也...【详细内容】
2020-02-10  Tags: 限流算法  点击:(176)  评论:(0)  加入收藏
为什么要做限流呢?举一个生活中的例子,大家早上上班都要挤地铁吧,地铁站在早高峰的时候经常要限制客流,为什么呢?有人会觉得这是人为添堵。真是这样吗?如果不执行客流控制,大家想想...【详细内容】
2019-08-20  Tags: 限流算法  点击:(422)  评论:(0)  加入收藏
限流每个API接口都是有访问上限的,当访问频率或者并发量超过其承受范围时候,我们就必须考虑限流来保证接口的可用性或者降级,即接口也需要安装上保险丝,以防止非预期的请求对系...【详细内容】
2019-07-09  Tags: 限流算法  点击:(779)  评论:(0)  加入收藏
▌简易百科推荐
限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。 限流的实现算法有很多,但常见的限流算法有三种:计数器算法、漏桶算法和令牌桶算法。1、计...【详细内容】
2023-02-20  磊哥  51CTO  Tags:算法   点击:(5)  评论:(0)  加入收藏
特斯拉是一个典型的AI公司,过去一年训练了75000个神经网络,意味着每8分钟就要出一个新的模型,共有281个模型用到了特斯拉的车上。接下来我们分几个方面来解读特斯拉FSD的算法和...【详细内容】
2023-02-13    51CTO  Tags:算法   点击:(13)  评论:(0)  加入收藏
写在前面 因为本次文章篇幅较长,所以为了便利大家查看今日最新职位信息,所以将内容上移至顶部,忘各位大大海涵 算法思想是解决问题的核心,万丈高楼起于平地,在算法中也是如此...【详细内容】
2023-02-13  Freemen聊技术    Tags:算法   点击:(4)  评论:(0)  加入收藏
随着现代计算机技术的飞速进步,计算机图形、图像处理、辅助设计多媒体技术越来越广泛深入地应用于广告、游戏、工业、医学,影视业等各个领域。人们经常需要能迅速地获得物体...【详细内容】
2023-02-09  砍柴网  搜狐号  Tags:算法   点击:(11)  评论:(0)  加入收藏
导语 | 开发者工作中,研究代码逻辑常需要思考这个问题:数组变更后,具体变更了哪一些元素?变更的位置如何?本文作者陈碧松解析并覆写了针对数组变化的diff算法逻辑。希望本文对你...【详细内容】
2023-01-08  闪现基因  今日头条  Tags:算法   点击:(17)  评论:(0)  加入收藏
摘要Raft 是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系...【详细内容】
2022-12-29  互联网资讯看板   网易号  Tags:算法   点击:(28)  评论:(0)  加入收藏
选择排序pub fn selection_sort<T:Ord>(arr:&mut [T]) { let len = arr.len(); for left in 0..len { let mut smallest = left; for right in (left+...【详细内容】
2022-12-02  麦花香里说丰年    Tags:算法   点击:(38)  评论:(0)  加入收藏
B 树和 B+ 树是两种数据结构,构建了磁盘中的高速索引结构,因此不仅 MySQL 在用,MongoDB、Oracle 等也在用,基本属于数据库的标配常规操作。数据库要经常和磁盘与内存打交道,为了...【详细内容】
2022-11-25  java小悠  今日头条  Tags:B 树   点击:(64)  评论:(0)  加入收藏
本文主要内容如下: 前言最近生产环境遇到一个问题:现象:创建工单、订单等地方,全都创建数据失败。初步排查:报错信息为duplicate key,意思是保存数据的时候,报主键 id 重复,而这些...【详细内容】
2022-11-15  架构师之道  今日头条  Tags:雪花算法   点击:(40)  评论:(0)  加入收藏
算法最开始是数学概念,我国古代称之为“术”,最早出现在《周髀算经》和《九章算术》中。而现代计算机中的算法的定义,则是在阿朗佐&middot;丘奇 和他的学生艾伦&middot;图灵的...【详细内容】
2022-11-09  异步社区  今日头条  Tags:算法   点击:(53)  评论:(0)  加入收藏
站内最新
站内热门
站内头条