`
iamzhongyong
  • 浏览: 805349 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

令牌桶算法和漏桶算法以及流量控制浅谈

 
阅读更多

    ​    ​在双十一等大促环节,系统需要限流,外部需要在我制定的速率限制来调用(超出的流量直接挡掉,系统不进行处理),有没有理论依据呢?这里看了两个算法

约定访问速率是流量管理中比较常用的方法之一,令牌桶算法,是目前最常用的流量限制的方法。

    ​  

        ​​什么是令牌桶算法?

    ​    ​令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。

    ​    ​令牌桶:网络设备中的内部存储池

    ​    ​令牌:给定速率填充令牌桶的虚拟信息包

    ​    ​通俗的理解,令牌桶是一个水桶,而令牌是通过一根水管流到水桶中的水

    ​    ​令牌桶的填满时间,是由桶的自身容量、令牌漏出速率(桶下面的水管)、超过平均速率的突发流量持续的时间三个方面共同决定的。如果突发流量的时间比较短,令牌桶不会溢出,在通信流上不会受到影响,如果突发流量比较大,时间比较长,那令牌桶就会溢出,多余的通信流就会被限制。

    ​    

        ​什么是漏桶算法?

    ​    ​主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。

    ​  

        ​令牌桶算法和漏桶算法的区别在哪里?

    ​    ​主要区别在于“漏桶算法”能够强行限制数据的传输速率,而“令牌桶算法”在能够限制数据的平均传输速率外,还允许某种程度的突发传输。在“令牌桶算法”中,只要令牌桶中存在令牌,那么就允许突发地传输数据直到达到用户配置的门限,因此它适合于具有突发特性的流量。

    ​  

       ​如何利用令牌桶算法来实现互联网系统的限流呢?

    ​    ​这里大体YY了一下组件,大体可以分为计数器、限流器、阀值配置、阀值更新、令牌桶检验几个组件。

    ​    ​计数器:实时的统计接口的调用速率,例如时间单位是秒,那就是一秒调用多少次

    ​    ​阀值配置:配置一下时间窗口(就是统计信息和限流的时间周期,可以是1秒,也可以是1毫秒),平均速率以及突发情况下允许的最大速率

    ​    ​阀值更新:这里为啥要单独拿出来说一下呢,因为阀值的配置不可能是写死的,需要实时更新,有一个组件去获取最新的配置,然后在系统中做更新

    ​    ​限流器:当令牌桶中令牌已经无法放入,也就是溢出了,需要限流,采取怎么样的限流策略,需要限流器去做处理

    ​    ​令牌桶处理:需要有一个类,根据配置的时间窗口、平均速率、突发最大速率来模拟向桶中放置令牌的操作,如果溢出了,则触发限流器做相应的操作

    ​    ​

        这里受到的启发是啥?

    ​    ​相当于用传统网络流量限制中的一个算法,来解决互联网流量控制的一个问题,具体的实现可能有多种。这里打开了一个思路,以前觉得互联网中的问题是新鲜的,但是可能就是遇到的问题是相通的,也许在多年前已经有理论存在并且有实际应用了,例如传统的一个行业中,或者一个书本中存在已久的算法,再或者一个物流现象。

    ​    ​程序员也需要关注除了程序本身之外的世界,有些可能会影响到程序哦。

    ​    ​

        这里再补充一篇文章,关于流控的:http://iamzhongyong.iteye.com/blog/1742829 

 

       参考文章:

http://blog.163.com/liu_sheng_han/blog/static/190591372201241563016108/

0
0
分享到:
评论

相关推荐

    基于令牌桶算法的Java限流实现

    基于令牌桶算法的Java限流实现是指使用令牌桶算法来控制系统的流量,使得系统的流量不超过设定的阈值。该算法的核心思想是将流量看作是一种资源,每个请求都需要消耗一定数量的资源,而令牌桶中存储的资源数量是有限...

    QoS技术中令牌桶算法实现方式比较

    在QoS技术中,令牌桶算法是一种常用的流量监管机制,主要用于对数据流的速率和带宽进行控制。 令牌桶算法的核心思想是通过一种虚拟的“令牌桶”来控制数据包的发送速率和突发传输量。基本工作原理是:系统以恒定的...

    令牌桶算法研究

    无论是单速率还是双速率的三色标记算法,都能根据不同的应用场景灵活调整,实现高效的流量管理和控制。随着网络技术的不断发展,令牌桶算法将继续发挥其重要作用,支持更加复杂多变的网络环境。

    令牌桶算法c实现

    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 ...

    令牌桶算法(token bucket)

    该算法通过控制令牌的生成和消费来实现流量控制,确保网络中的流量不超过设定的速率。 在 IETF RFC 中,建议了两种令牌桟算法:单速率三色标记算法和双速率三色标记算法。这两种算法都是基于令牌桟的概念,通过评估...

    令牌桶算法的基本过程

    令牌桶算法是网络流量整形(Traffic Shaping)和速率限制(Rate Limiting)中最常用的算法之一。它通过控制数据接收和转发的速率来平滑网络数据流,并有效地实现突发数据流的传输。令牌桶算法在各种网络场景中被广泛应用...

    QoS令牌桶算法.doc

    DiffServ模型通过数据包分类、拥塞管理、拥挤避免、速率限制和流量整形技术来实现服务质量控制,在其速率限制和流量整形中,主要使用了令牌桶算法来评估流量速率是否超过规定值。 DiffServ模型的主要特点是可以根据...

    令牌桶算法(token bucket algorithm)

    **令牌桶算法**(Token Bucket Algorithm)是一种流量控制算法,在网络通信领域被广泛应用于实现服务质量(QoS)策略中的流量监管和整形功能。其核心思想是通过一个虚拟的“令牌桶”来监控和管理数据包的发送速度,以...

    基于RateLimiter的令牌桶算法实现限速控制和计算法实现限流控制

    本文将深入探讨基于RateLimiter的令牌桶算法实现限速控制以及基于计数器算法的限量控制,这两种方法常用于中小型项目的流量管理。 首先,我们来看基于RateLimiter的令牌桶算法。RateLimiter是Google Guava库提供的...

    流量控制令牌桶封装库实例

    令牌桶算法是一种常见的流量控制策略,它在许多网络应用和协议中都有所应用,如TCP/IP的拥塞控制、路由器的速率限制等。在这个"流量控制令牌桶封装库实例"中,我们将深入探讨令牌桶的工作原理以及如何通过编程实现这...

    接口限流——令牌桶算法2

    令牌桶算法是实现限流的一种有效方法,尤其适用于有突发流量需求的服务。 **令牌桶算法** 令牌桶算法由两部分组成:一个容量有限的桶和一个不断向桶内添加令牌的源头。桶的容量限制了最大并发请求的数量,而令牌...

    令牌桶Java实现

    令牌桶算法是一种流量整形和流量控制的算法,广泛应用于网络数据传输、服务器限流等领域。在Java编程中,实现令牌桶算法可以帮助我们有效地管理系统的资源,防止过载,并确保服务的稳定性和可靠性。下面我们将详细...

    15行Python代码带你轻松理解令牌桶算法

    令牌桶算法是一种网络流量整形机制,用于控制数据传输的速率和突发流量。在计算机网络中,为了防止网络拥塞和保证网络传输的平滑性,对数据包的发送速率需要进行限制。令牌桶算法可以限制数据包的发送速率,同时允许...

    令牌桶资料

    令牌桶算法是一种常用的流量控制算法,主要用于在网络传输过程中对数据流进行整形或速率限制,确保网络传输的稳定性与公平性。 #### 1.2 基本概念 - **令牌**: 代表发送数据的权利,每个令牌允许发送一定量的数据。...

    play-guard, 基于令牌桶算法的速率限制反馈模块.zip

    play-guard, 基于令牌桶算法的速率限制反馈模块 电子邮件保护模块 用于阻塞和抑制滥用请求的Play2模块。基于请求属性的节流特定操作( 比如 。 IP地址)基于请求属性的节流特定操作( 比如 。 IP地址) 和失败率( 比如 ...

    流量策略及令牌桶的工作原理

    通过使用令牌桶算法进行流量控制,可以在一定程度上防止DOS攻击的发生,保障网络资源的合理利用。此外,还可以结合其他技术如ACL、URPF等,进一步增强网络的安全性。对于企业网络而言,了解并掌握这些流量管理技术至...

    bucket4j, 基于令牌桶算法的Java速率限制库.zip

    bucket4j, 基于令牌桶算法的Java速率限制库 Bucket4j - 基于令牌桶算法的Java速率限制库。 的优点在已经知算法的基础上实现,它是in行业的速率限制的实际标准。有效的锁自由实现,Bucket4j可以用于多线程处理。绝对...

    HIMAC协处理器流量控制设计与实现.pdf

    算法的关键参数包括令牌桶容量、令牌生成速度以及最大突发流量尺寸,通过调整这些参数,可以灵活地控制每个端口的带宽使用。 【HIMAC协处理器的流量控制设计】文章详细描述了基于HIMAC协处理器的流量控制设计方案。...

Global site tag (gtag.js) - Google Analytics