本文总结常见的三种限流算法:时间窗口,令牌桶与漏桶算法。对算法思想进行介绍并且分析其异同。 时间窗口限流 固定时间窗口 所谓时间窗口限流,是指在一定的时间内,维护一个访问总量的数值,当其超过阈值时,拒绝后续所有的请求,直到进入下一个时间窗口。 上图横轴的每个时间节点都是一个时间窗口,我们可以看到,当请求没有超过阈值以前,请求为蓝色,可以正常进行,超过阈值的请求会被抛弃。 但是,这种算法有一个很明显的 临界问题 :假设限流阀值为 5 个请求,单位时间窗口是 1s,如果我们在单位时间内的前 0.8-1s 和 1-1.2s,分别并发 5 个请求。虽然都没有超过阀值,但是如果算 0.8-1.2s,则并发数高达 10,已经超过单位时间 1s 不超过 5 阀值的定义了。 滑动时间窗口 滑动窗口限流可以解决固定窗口临界值的问题。它将单位时间周期分为n个小周期,分别记录每个小周期内接口的访问次数,并且根据时间滑动删除过期...