博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
限流算法(记录cyc大佬的专栏)
阅读量:5952 次
发布时间:2019-06-19

本文共 580 字,大约阅读时间需要 1 分钟。

限流的必要性

如果一段时间内请求的数量过大,就会给服务器造成很大压力,可能导致服务器无法提供其它服务。

计数器算法

通过一个计数器 counter 来统计一段时间内请求的数量,并且在指定的时间之后重置计数器。
该方法实现简单,但是有临界问题。例如,允许一分钟内通过的请求数为 N,如果在重置计数器的前后一小段时间内分别请求 N 次,那么在这一小段时间内总共请求了 2N 次,超出了规定的 N 次。

滑动窗口算法

是计数器算法的一种改进,将原来的一个时间窗口划分成多个时间窗口,并且不断向右滑动该窗口。

在临界位置的突发请求都会被算到时间窗口内,因此可以解决计数器算法的临界问题。

漏桶算法

能够以恒定速率处理请求。

请求需要先放入缓存中,当缓存满了时,请求会被丢弃。

令牌桶算法

和漏桶算法的区别在于它是以恒定速率添加令牌,当一个请求到来时,先从令牌桶取出一个令牌,如果能取到令牌那么就可以处理该请求。

令牌桶的大小有限,超过一定的令牌之后再添加进来的令牌会被丢弃。

令牌桶算法允许突发请求,因为令牌桶存放了很多令牌,那么大量的突发请求会被执行。但是它不会出现临界问题,在令牌用完之后,令牌是以一个恒定的速率添加到令牌桶中的,因此不能再次发送大量突发请求。

转载于:https://juejin.im/post/5caa099d6fb9a05e5b2adfac

你可能感兴趣的文章