后端
带你快速了解:限流中的漏桶和令牌桶算法
Posts on 煎é±0 次浏览
在前文 《限流熔断是什么,怎么做,不做行不行?》中针对 “限流” 动作,有提到流量控制其内部对应着两种常用的限流算法,分别是漏桶算法和令牌桶算法。因此会有的读者会好奇,这都是些啥? 为了更进一步的了解 WHY,本文来快速探索一下,看看限流下的一些 “算法” 们到底有何作用,是为何成为流量控制的基石的? 前言 理论上每一个对外/内提供功能的资源点,都需要进行一定的流量控制,否则在业务的持续迭代中,是有可能出现突发性流量的场景(就像年初所带来的一些行业突发转变,导致业务流量突然暴增): 若没有进行限流,就会出现一些奇奇怪怪的问题点,实则就是系统无法承受这波流量,逐渐崩溃,走向系统假死。 现实场景 最常见的现实场景就是日常随处可见的排插、插座,其内置的保险丝,也被称为电流保险丝,其主要是起过载保护作用,保险丝会在电流异常升高到一定的高度和热度的时候,自身熔断切断电流,从而起到保护电路安全运行的作用。 因此真实世界中有许多与软件工程中的限流熔断的场景有异曲同工之处,也是为了控制量,超量就切断。你也可以想想现实生活中是否有遇到其他类似的例子呢? 漏桶算法(Leaky Bucket) 漏桶算法(Leaky Bucket)是网络中流量整形(Traffic Shaping)或速率限制(Rate Limiting)时常用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。 漏桶算法通过其算法调控了流量访问,使得突发流量可以被整形,去毛刺,变成一个相对缓和,以便为网络提供一个稳定的流量。 漏桶算法的存储桶主要由三个参数定义,分别是:桶的容量、水从桶中流出的速率、桶的初始充满度。 其核心理念就如字面意思:一个会漏水的桶。 Bursty Flow 在上图中,水龙头代表着突发流量(Bursty Flow)。当网络中存在突发流量,且无任何调控时,就会出现像 Bursty Data 处类似的场景。主机以 12 Mbps 的速率发送数据,时间持续 2s,总计 24 Mbits 数据。随后主机暂停发送 5s,然后再以 2 Mbps 的速率发送数据 3s,最终总共发送了 6 Mbits 的数据。
原文:https://eddycjy.com/posts/microservice/leaky-token-buckets/
