在双十一等大促环节,系统需要限流,外部需要在我制定的速率限制来调用(超出的流量直接挡掉,系统不进行处理),有没有理论依据呢?这里看了两个算法
约定访问速率是流量管理中比较常用的方法之一,令牌桶算法,是目前最常用的流量限制的方法。
什么是令牌桶算法?
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
令牌桶:网络设备中的内部存储池
令牌:给定速率填充令牌桶的虚拟信息包
通俗的理解,令牌桶是一个水桶,而令牌是通过一根水管流到水桶中的水
令牌桶的填满时间,是由桶的自身容量、令牌漏出速率(桶下面的水管)、超过平均速率的突发流量持续的时间三个方面共同决定的。如果突发流量的时间比较短,令牌桶不会溢出,在通信流上不会受到影响,如果突发流量比较大,时间比较长,那令牌桶就会溢出,多余的通信流就会被限制。
什么是漏桶算法?
主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。
令牌桶算法和漏桶算法的区别在哪里?
主要区别在于“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输速率外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,因此它适合于具有突发特性的流量。
如何利用令牌桶算法来实现互联网系统的限流呢?
这里大体YY了一下组件,大体可以分为计数器、限流器、阀值配置、阀值更新、令牌桶检验几个组件。
计数器:实时的统计接口的调用速率,例如时间单位是秒,那就是一秒调用多少次
阀值配置:配置一下时间窗口(就是统计信息和限流的时间周期,可以是1秒,也可以是1毫秒),平均速率以及突发情况下允许的最大速率
阀值更新:这里为啥要单独拿出来说一下呢,因为阀值的配置不可能是写死的,需要实时更新,有一个组件去获取最新的配置,然后在系统中做更新
限流器:当令牌桶中令牌已经无法放入,也就是溢出了,需要限流,采取怎么样的限流策略,需要限流器去做处理
令牌桶处理:需要有一个类,根据配置的时间窗口、平均速率、突发最大速率来模拟向桶中放置令牌的操作,如果溢出了,则触发限流器做相应的操作
这里受到的启发是啥?
相当于用传统网络流量限制中的一个算法,来解决互联网流量控制的一个问题,具体的实现可能有多种。这里打开了一个思路,以前觉得互联网中的问题是新鲜的,但是可能就是遇到的问题是相通的,也许在多年前已经有理论存在并且有实际应用了,例如传统的一个行业中,或者一个书本中存在已久的算法,再或者一个物流现象。
程序员也需要关注除了程序本身之外的世界,有些可能会影响到程序哦。
这里再补充一篇文章,关于流控的:http://iamzhongyong.iteye.com/blog/1742829
参考文章:
http://blog.163.com/liu_sheng_han/blog/static/190591372201241563016108/
相关推荐
本文重点讨论了三种限流算法:令牌桶算法、漏桶算法和计数器算法,并深入解析了Google Guava库中的RateLimiter类,它是基于令牌桶算法的实现。 1. **令牌桶算法**: - 令牌桶算法的核心思想是系统以恒定速率向桶中...
系统在运行过程中,如遇上某些活动,访问的人数会在一瞬间内爆增,导致服务器瞬间压力飙升,使系统超...本文介绍php基于redis,使用令牌桶算法,实现访问流量的控制,提供完整算法说明及演示实例,方便大家学习使用。
基于令牌桶算法的Java限流实现是指使用令牌桶算法来控制系统的流量,使得系统的流量不超过设定的阈值。该算法的核心思想是将流量看作是一种资源,每个请求都需要消耗一定数量的资源,而令牌桶中存储的资源数量是有限...
`ratelimit`库是一个实现了令牌桶算法和漏桶算法的Golang库,帮助开发者在应用中有效地实施流量控制。下面将详细探讨这两个算法及其在Golang中的实现。 ### 令牌桶算法 令牌桶算法是一种允许突发流量的流量整形和...
令牌桶算法是一种网络流量整形和速率限制机制,它的基本原理是通过一种叫做“令牌桶”的虚构桶来控制数据包的发送速率。令牌在令牌桶中定期生成,数据包发送时需消耗令牌,从而将数据发送的平均速率限制在令牌生成...
无论是单速率还是双速率的三色标记算法,都能根据不同的应用场景灵活调整,实现高效的流量管理和控制。随着网络技术的不断发展,令牌桶算法将继续发挥其重要作用,支持更加复杂多变的网络环境。
**标准令牌漏桶算法**是网络流量管理中用于流量整形和速率限制的一种策略。它的核心思想是通过模拟一个带有恒定泄流速率的容器(即“漏桶”),来限制数据流入网络的速度,从而平滑突发流量,确保网络稳定。 在**漏...
**令牌桶算法**(Token Bucket Algorithm)是一种流量控制算法,在网络通信领域被广泛应用于实现服务质量(QoS)策略中的流量监管和整形功能。其核心思想是通过一个虚拟的“令牌桶”来监控和管理数据包的发送速度,以...
令牌桶算法是一种常见的流量控制策略,它在许多网络应用和协议中都有所应用,如TCP/IP的拥塞控制、路由器的速率限制等。在这个"流量控制令牌桶封装库实例"中,我们将深入探讨令牌桶的工作原理以及如何通过编程实现这...
Bucket4j是一个强大的Java速率限制库,它基于令牌桶算法(Token Bucket Algorithm)来实现流量控制和资源调度。令牌桶算法是一种在网络流量管理和流量整形中广泛使用的策略,它允许系统在限定的速率内发送数据,并能...
令牌桶算法是一种网络流量整形机制,用于控制数据传输的速率和突发流量。在计算机网络中,为了防止网络拥塞和保证网络传输的平滑性,对数据包的发送速率需要进行限制。令牌桶算法可以限制数据包的发送速率,同时允许...
play-guard, 基于令牌桶算法的速率限制反馈模块 电子邮件保护模块 用于阻塞和抑制滥用请求的Play2模块。基于请求属性的节流特定操作( 比如 。 IP地址)基于请求属性的节流特定操作( 比如 。 IP地址) 和失败率( 比如 ...
通过使用令牌桶算法进行流量控制,可以在一定程度上防止DOS攻击的发生,保障网络资源的合理利用。此外,还可以结合其他技术如ACL、URPF等,进一步增强网络的安全性。对于企业网络而言,了解并掌握这些流量管理技术至...
令牌桶算法的精髓在于通过令牌的有无控制数据包发送的节奏,保证网络流量在长期平均速率和短期突发速率之间达到平衡,既避免了网络拥塞,又提高了网络资源利用率,使得网络服务在确保关键业务优先级的同时,也能够...
本项目是一款基于令牌桶算法的限流工具设计源码,包含218个文件,涵盖75个GIF动画、71个Java源文件、26个JavaScript文件、10个XML配置文件、5个CSS样式文件、4个Git忽略文件、4个属性文件以及3个命令行文件。...
bucket4j, 基于令牌桶算法的Java速率限制库 Bucket4j - 基于令牌桶算法的Java速率限制库。 的优点在已经知算法的基础上实现,它是in行业的速率限制的实际标准。有效的锁自由实现,Bucket4j可以用于多线程处理。绝对...
在ATM(Asynchronous Transfer Mode)和IP(Internet Protocol)网络中,流量控制通常采用虚调度算法、令牌桶等机制。虚调度算法是一种有效的方式,它能够在多条连接之间公平地分配带宽,确保每个连接都能得到合理的...
这意味着设置 1000 毫秒的interval和 10 个请求的maxInInterval将以每秒 10 个令牌(每 0.1 秒 1 个令牌)的速率填充令牌。 因此,如果存储桶已满,可以立即发出 10 个请求,然后每 0.1 秒再发出 1 个请求,因此,...