Token Bucket: 令牌桶限流

令牌桶(token bucket)是最常用的限流算法。它用两个数描述一条规则:令牌补充的速度,和桶最多能存多少个令牌。它要解决的问题是:既把长期的平均速度压住,又允许短时间内的一阵突发。 限流、熔断、降级三者的关系见 限流、熔断与降级,这篇只讲令牌桶。 原理 想象一个桶: 系统以恒定速度 r 往桶里放令牌,比如每秒 5 个; 桶最多装 b 个令牌,比如 60 个,满了再放的令牌直接丢掉; 每个请求进来先从桶里取一个令牌,取到就放行,桶空了就拒绝(或者排队等)。 所以 r 管的是长期平均速度,b 管的是一次最多能连发多少。b 也叫突发容量(burst)。 用 r = 5/s、b = 60 走一遍: 时刻 发生了什么 桶里的令牌 0 秒 用户闲了很久,桶是满的 60 0 秒 一口气发了 40 个请求,全部放行 20 0~4 秒 没有请求,每秒补 5 个 40 4 秒 又连发 50 个:前 40 个放行,后 10 个被拒 0 4 秒之后 每 0.2 秒补 1 个,只能按每秒 5 个的速度继续 0~1 停 12 秒 补满 60 规律: ...

Created 16166-10-16 · Updated 16166-10-16 · 3 min · 595 words · -