时间窗口算法
指在一定的时间内,维护一个访问总量的数值,当其超过阈值时,拒绝后续所有的请求,直到进入下一个时间窗口。滑动窗口限流可以解决固定窗口临界值的问题。它将单位时间周期分为n个小周期,分别记录每个小周期内接口的访问次数,并且根据时间滑动删除过期的小周期。
令牌桶算法
想象有一个虚拟的桶,桶里面放有一定数量的Token,请求访问资源之前,需要从桶里拿到令牌,拿不到令牌的请求会被拒绝掉,这就是令牌桶的思想。令牌桶算法的实现很轻量级,我们并不需要一个真正的桶,只需要维护以下几个数值,就能在请求到来时计算出是否有足够的Token分配给请求:
- 上一次发出令牌的时间
- 令牌的生产速度
- 上次剩下的令牌数
- 桶的容量
漏桶算法
漏桶算法的算法原理是,设置一个漏桶,每次请求都将请求放入到漏桶当中,若漏桶已满则拒绝请求,漏桶按照一定速率将已放入漏桶的请求流出,流出的请求将被正常处理。漏桶算法面对限流时,可以缓存一定的请求,不用直接拒绝。