计数器
计数器算法,是在一个时间间隔内,比如一分钟内,对请求进行计数,然后将计数值和设置的最大值进行比较,如果超过了最大值,进行限流处理,拒绝请求。
他的优点是:算法简单,易于理解。
缺点是:在时间窗口临界点,如果突然请求增加,会对系统造成一定的压力,而且如果在一段时间内,如果时间窗口前段已经消耗完了计数,那么后一段时间将无法处理请求。
滑动窗口
滑动窗口是对计数器算法的一种改进,滑动窗口将时间窗口划分为多个小周期
例子
假设1分钟可以接收请求100
将1分钟分为10个滑动窗口,那么每个窗口代表6s,每个滑动窗口可以承载的请求数是10。
然后当时间线向前推进6s,我滑动窗口向前推进一格,我的可接收请求将+10,封顶100。
滑动窗口较好的解决了计数器模式中存在的问题,但是相对需要更多的计算资源和空间来维护多个滑动窗口。
漏桶
漏桶的主要作用是流量整形和速率限制,可以平滑突发流量。
在漏桶中,流量可以以任意速率接收请求,如果桶满了,则会拒绝请求。
在漏桶中,会以恒定的速率允许处理请求。
令牌桶
令牌桶的作用是流量整形和限制速率,和漏桶不同,允许再一定程度上处理突发流量。
在令牌桶中,会以恒定的速率产生令牌,进入到桶中。
请求需要去获取令牌,才能执行请求。
桶的大小是固定的。因此,突发流量最大可执行的速率和桶的最大容积有关。
在消耗完令牌后,只能以发令牌的速率执行。