限流算法:漏桶算法和令牌桶算法

0. 限流的目的

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据)。简单讲,就是通过限流,防止流量过载,造成系统崩溃不可用,起到系统“保险丝”的作用。

1. 漏桶算法

1.1 简述

漏桶算法:水(请求)先进入到漏桶里,漏桶以一定的速度出水(处理请求),当流出速度远远小于流入速度时,达到桶的容量(桶满了),就会溢出桶(放弃的请求)。 可以看出漏桶算法能强行限制数据的传输速率。

漏桶算法

流程:

  1. 当请求来了的时候,将请求放入到桶中

  2. 恒定的速度,消费同种的请求

  3. 桶满的状态下,就丢弃请求

2. 令牌桶算法

令牌桶算法:会以一个恒定的速率向桶里放入令牌,如果有新的请求进来希望进行处理,则必须要先从桶内拿到一个可用的令牌,才能继续被处理。若桶内无令牌可取时,则拒绝请求/排队等待。

令牌捅算法

过程:

  1. 系统以恒定的速度产生令牌,然后将令牌放入令牌桶中

  2. 零牌桶有一个容量,当令牌同满了的时候,再向其中放入的令牌就会丢弃

  3. 每次一个请求过来,需要从令牌桶中获取一个令牌,令牌获取成功,则处理请求,提供服务;没有令牌,拒绝提供服务

3. 两种算法的对比

在漏桶算法中,总量控制,桶容量的大小设置是关键,即不能设置过大,服务不可能了桶还没满,或是服务还有很大的冗余,桶已经满了,这两种情况下,桶的意义就已经不存在了。而且动态调整桶的容量比较困难,也无法精确控制流的速度,突发流量时,可能丢弃的请求数量较多。

在令牌桶的算法中,令牌的产生速度是一个关键因素,可以控制令牌的产生速度,从而控制请求的处理速度。相对于对于漏桶算法,实现相对复杂。

在某些情况下,漏桶算法不能够有效地使用网络资源。因为漏桶的漏出速率是固定的,所以即使网络中没有发生拥塞,漏桶算法也不能使某一个单独的数据流达到端口速率。因此,漏桶算法对于存在突发特性的流量来说缺乏效率。而令牌桶算法则能够满足这些具有突发特性的流量。

看一个实际场景,为什么令牌桶算法可以防止一定程度的突发流量呢?可以这么理解,假设我们想要的速率是2000Qps,那么往桶中放令牌的速度就是2000个/s,桶的容量为2000。假设第1秒只有1800个请求,那么意味着第2秒可以容许2200个请求,这就是一定程度突发流量的意思,反之我们看漏桶算法,第1秒只要1800个请求,那么全部放过,第2秒这2200个请求将会被打回200个。

4. 总结:

如果要让自己的系统不被流量打垮,使用令牌桶。如果要保证别人的系统不被打垮,用漏桶算法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容