在双十一等大促环节,系统需要限流,外部需要在我制定的速率限制来调用(超出的流量直接挡掉,系统不进行处理),有没有理论依据呢?这里看了两个算法
约定访问速率是流量管理中比较常用的方法之一,令牌桶算法,是目前最常用的流量限制的方法。
什么是令牌桶算法?
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。
令牌桶:网络设备中的内部存储池
令牌:给定速率填充令牌桶的虚拟信息包
通俗的理解,令牌桶是一个水桶,而令牌是通过一根水管流到水桶中的水
令牌桶的填满时间,是由桶的自身容量、令牌漏出速率(桶下面的水管)、超过平均速率的突发流量持续的时间三个方面共同决定的。如果突发流量的时间比较短,令牌桶不会溢出,在通信流上不会受到影响,如果突发流量比较大,时间比较长,那令牌桶就会溢出,多余的通信流就会被限制。
什么是漏桶算法?
主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。
令牌桶算法和漏桶算法的区别在哪里?
主要区别在于“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输速率外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,因此它适合于具有突发特性的流量。
如何利用令牌桶算法来实现互联网系统的限流呢?
这里大体YY了一下组件,大体可以分为计数器、限流器、阀值配置、阀值更新、令牌桶检验几个组件。
计数器:实时的统计接口的调用速率,例如时间单位是秒,那就是一秒调用多少次
阀值配置:配置一下时间窗口(就是统计信息和限流的时间周期,可以是1秒,也可以是1毫秒),平均速率以及突发情况下允许的最大速率
阀值更新:这里为啥要单独拿出来说一下呢,因为阀值的配置不可能是写死的,需要实时更新,有一个组件去获取最新的配置,然后在系统中做更新
限流器:当令牌桶中令牌已经无法放入,也就是溢出了,需要限流,采取怎么样的限流策略,需要限流器去做处理
令牌桶处理:需要有一个类,根据配置的时间窗口、平均速率、突发最大速率来模拟向桶中放置令牌的操作,如果溢出了,则触发限流器做相应的操作
这里受到的启发是啥?
相当于用传统网络流量限制中的一个算法,来解决互联网流量控制的一个问题,具体的实现可能有多种。这里打开了一个思路,以前觉得互联网中的问题是新鲜的,但是可能就是遇到的问题是相通的,也许在多年前已经有理论存在并且有实际应用了,例如传统的一个行业中,或者一个书本中存在已久的算法,再或者一个物流现象。
程序员也需要关注除了程序本身之外的世界,有些可能会影响到程序哦。
这里再补充一篇文章,关于流控的:http://iamzhongyong.iteye.com/blog/1742829
参考文章:
http://blog.163.com/liu_sheng_han/blog/static/190591372201241563016108/
相关推荐
基于令牌桶算法的Java限流实现是指使用令牌桶算法来控制系统的流量,使得系统的流量不超过设定的阈值。该算法的核心思想是将流量看作是一种资源,每个请求都需要消耗一定数量的资源,而令牌桶中存储的资源数量是有限...
在QoS技术中,令牌桶算法是一种常用的流量监管机制,主要用于对数据流的速率和带宽进行控制。 令牌桶算法的核心思想是通过一种虚拟的“令牌桶”来控制数据包的发送速率和突发传输量。基本工作原理是:系统以恒定的...
无论是单速率还是双速率的三色标记算法,都能根据不同的应用场景灵活调整,实现高效的流量管理和控制。随着网络技术的不断发展,令牌桶算法将继续发挥其重要作用,支持更加复杂多变的网络环境。
Token Bucket Emulation in C using Multithreading This project involved emulation of the Token Bucket algorithm using POSIX threads in C. The aim was to simulate a traffic shaper that receives and ...
该算法通过控制令牌的生成和消费来实现流量控制,确保网络中的流量不超过设定的速率。 在 IETF RFC 中,建议了两种令牌桟算法:单速率三色标记算法和双速率三色标记算法。这两种算法都是基于令牌桟的概念,通过评估...
令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常用的算法之一。它通过控制数据接收和转发的速率来平滑网络数据流,并有效地实现突发数据流的传输。令牌桶算法在各种网络场景中被广泛应用...
DiffServ模型通过数据包分类、拥塞管理、拥挤避免、速率限制和流量整形技术来实现服务质量控制,在其速率限制和流量整形中,主要使用了令牌桶算法来评估流量速率是否超过规定值。 DiffServ模型的主要特点是可以根据...
**令牌桶算法**(Token Bucket Algorithm)是一种流量控制算法,在网络通信领域被广泛应用于实现服务质量(QoS)策略中的流量监管和整形功能。其核心思想是通过一个虚拟的“令牌桶”来监控和管理数据包的发送速度,以...
本文将深入探讨基于RateLimiter的令牌桶算法实现限速控制以及基于计数器算法的限量控制,这两种方法常用于中小型项目的流量管理。 首先,我们来看基于RateLimiter的令牌桶算法。RateLimiter是Google Guava库提供的...
令牌桶算法是一种常见的流量控制策略,它在许多网络应用和协议中都有所应用,如TCP/IP的拥塞控制、路由器的速率限制等。在这个"流量控制令牌桶封装库实例"中,我们将深入探讨令牌桶的工作原理以及如何通过编程实现这...
令牌桶算法是一种流量整形和流量控制的算法,广泛应用于网络数据传输、服务器限流等领域。在Java编程中,实现令牌桶算法可以帮助我们有效地管理系统的资源,防止过载,并确保服务的稳定性和可靠性。下面我们将详细...
令牌桶算法是一种常用的流量控制算法,主要用于在网络传输过程中对数据流进行整形或速率限制,确保网络传输的稳定性与公平性。 #### 1.2 基本概念 - **令牌**: 代表发送数据的权利,每个令牌允许发送一定量的数据。...
play-guard, 基于令牌桶算法的速率限制反馈模块 电子邮件保护模块 用于阻塞和抑制滥用请求的Play2模块。基于请求属性的节流特定操作( 比如 。 IP地址)基于请求属性的节流特定操作( 比如 。 IP地址) 和失败率( 比如 ...
通过使用令牌桶算法进行流量控制,可以在一定程度上防止DOS攻击的发生,保障网络资源的合理利用。此外,还可以结合其他技术如ACL、URPF等,进一步增强网络的安全性。对于企业网络而言,了解并掌握这些流量管理技术至...
bucket4j, 基于令牌桶算法的Java速率限制库 Bucket4j - 基于令牌桶算法的Java速率限制库。 的优点在已经知算法的基础上实现,它是in行业的速率限制的实际标准。有效的锁自由实现,Bucket4j可以用于多线程处理。绝对...
流量控制算法(限流算法)主要有:漏桶算法:平滑输入流量,控制进入网络的流量令牌桶算法:当大的突发流量到来时,输出也能有适当响应漏桶算法漏桶算法思路很简单,请求先
在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法就实现了这个功能, 可控制发送到网络上数据的数目,并允许突发数据的发送。 什么是令牌 从名字上看令牌...
算法的关键参数包括令牌桶容量、令牌生成速度以及最大突发流量尺寸,通过调整这些参数,可以灵活地控制每个端口的带宽使用。 【HIMAC协处理器的流量控制设计】文章详细描述了基于HIMAC协处理器的流量控制设计方案。...
限流是对某一时间窗口内的请求数进行限制,保持...常用的限流算法有令牌桶和和漏桶,而Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流