chenyahui / chenyahui.github.io

My blog
http://www.cyhone.com
0 stars 2 forks source link

uber-go 漏桶限流器使用与原理分析 | 编程沉思录 #34

Open chenyahui opened 4 years ago

chenyahui commented 4 years ago

https://www.cyhone.com/articles/analysis-of-uber-go-ratelimit/

uber 在 Github 上开源了一套用于服务限流的 go 语言库 ratelimit, 该组件基于 Leaky Bucket(漏桶) 实现。 我在之前写过 《Golang 限流器 time/rate 实现剖析》,讲了 Golang 标准库中提供的基于 Token Bucket 实现限流组件的 time/rate 原理,同时也讲了限流的一些背景。 相比于 TokenBucket,只要桶内还有剩余

jiekun commented 3 years ago

newState的sleepFor属性除了在Sleep()方法中被使用到以外,还有其他地方被调用做累加吗?因为看代码每次for循环内都会生成新的newState,他们的sleepFor都是初始化的,老的newState也不会被使用到。如果只用于sleepFor方法的话,为何要求这个值不小于maxSlack呢?因为貌似Sleep(-100)和Sleep(-10)效果都是一样的?https://github.com/uber-go/ratelimit/blob/master/limiter_atomic.go