关于限流组件,令牌桶和漏桶 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
badboy17
V2EX    Java

关于限流组件,令牌桶和漏桶

  •  
  •   badboy17 2022-09-15 19:20:40 +08:00 3015 次点击
    这是一个创建于 1171 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前有疑问,令牌桶可以允许突然的并发流量,但是漏桶不行,然后看了一些资料,也是云里雾里,感觉并没有理解透彻,后来看 guava 的 ratelimiter ,用的令牌桶算法,代码里其实并没有维护一个’桶‘的概念,现在比较好奇,怎么实现一个漏桶算法呢,用代码,或者伪代码,有大佬有相关的资料吗

    8 条回复    2022-09-23 17:18:06 +08:00
    chevalier
        1
    chevalier  
       2022-09-15 19:29:33 +08:00
    漏桶是匀速处理请求的,突发请求可以进桶(相当于进了一个队列)但是并不会立即处理,还是按照原来的速度一个个匀速处理
    gaodq
        2
    gaodq  
       2022-09-15 23:00:53 +08:00   1
    可以搜一下 golang time/rate 包的实现文章
    zmal
        3
    zmal  
       2022-09-15 23:54:45 +08:00
    漏桶就是一个定长队列,入队列时无限制可以猛入,下游慢慢消费。请求峰值时队列写满,后续请求被丢弃,表现为服务不可用。
    令牌桶也有最大容量,可以理解为每秒增加 m 个直到达到桶的最大值 n 。和漏桶的区别主要是两点: 1.即使桶未满,qps 超过令牌入桶流速时部分丢弃,表现为服务限流,达到了类似滑动窗口的限流功能。2.桶的最大值起到一个蓄水池效果,和漏桶一个意思。
    xuanbg
        4
    xuanbg  
       2022-09-16 09:10:54 +08:00   1
    漏桶这个名字真是最贴切不过了。一个漏水的桶,只要有注水(进数据)就会不断漏出(处理数据),但桶被水注满(最大缓冲数据)了,就会溢出(被限流的数据)。
    令牌桶其实也好理解,就是一个桶里面装满了令牌,你拿到令牌就可以处理数据,系统会以固定的速率往桶里面装新的令牌,保证桶里总有令牌可以让你拿。当然,装满了就不会再往里装。正常情况下桶里总有令牌可以拿,但大伙一拥而上的时候,桶里的令牌就会被抢个精光,在没有新的令牌放进桶里之前,你就木得令牌可拿了,就被限流了。
    badboy17
        5
    badboy17  
    OP
       2022-09-16 20:17:02 +08:00
    这个文章挺好的,分享给大家,用 go 实现了漏桶算法 https://zhuanlan.zhihu.com/p/441005648
    leon0318
        6
    leon0318  
       2022-09-17 22:01:46 +08:00
    "令牌桶可以允许突然的并发流量,但是漏桶不行"
    -----------------------------------------------------------
    没太理解这句话?
    badboy17
        7
    badboy17  
    OP
       2022-09-18 10:33:12 +08:00
    @leonme 令牌桶允许一段时间得突发流量,也就是令牌缓存得比较多得时候,允许超过限流得流量,但是漏桶强行的限定了水流出的速率
    CantSee
        8
    CantSee  
       2022-09-23 17:18:06 +08:00
    令牌桶可以解决突刺的情况,漏洞一定是匀速的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2275 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:10 PVG 09:10 LAX 17:10 JFK 20:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86