针对大量请求进来时的限流,常用的限流策略包括:
- 固定窗口计数器限流:在固定时间窗口内,允许通过的请求数是固定的。如果请求数超出限制,则返回一个错误或者直接拒绝请求。
- 滑动窗口计数器限流:将时间窗口分成若干小块,每个小块内允许通过的请求数是固定的。随着时间的推移,当前窗口的大小向后移动,最早的小块被丢弃。这种方式可以更加平滑地限制请求。
- 漏桶算法:将请求视为水滴,使用一个固定大小的桶来存储请求。当请求到来时,将其放入桶中。如果桶已经满了,则拒绝请求。请求以恒定速率从桶中流出,以保证请求的处理速度不超过预定的速度。
- 令牌桶算法:类似于漏桶算法,但是令牌桶算法允许在一定时间内突发请求,而漏桶算法不允许。令牌桶中有一定数量的令牌,当请求到来时,需要先从桶中获取令牌,只有获取到令牌后才能处理请求。如果桶中没有足够的令牌,则拒绝请求。每隔一段时间向桶中添加一定数量的令牌,以保证请求的处理速度不超过预定的速度。