1、限流作用;
当API访问激增时,导致接口占用过多服务器资源,甚至导致服务器宕机
限流:当接口请求数100次/s,多余的丢弃掉或者响应失败;
单节点仅能保护好自身的请求,
限流:
1、应对热点业务带来突发请求;
2、外部的恶意请求;
3、突发BUG导致的恶意请求
2、几种常见的限流算法
1、固定窗口计数器算法:
划分多个时间窗口,当请求到达请求数加一,如请求数量到达限制数量,则所有多余请求全部丢弃,时间到下一个窗口,重新计数请求
但是会有一个问题是:当前窗口的时间内的后半段时间请求突然剧增,下个窗口的前半段请求突然剧增,则存在这前一个窗口的后半段和后一个窗口的前半段请求数量大于限流值,
2、滑动窗口计数器算法:
划分时间窗口,当请求过来请求数加一,并且限制请求数,当时间到达下一个时间窗口,重新计数,按照时间保持窗口的滑动,解决了固定窗口的前后窗口请求剧增问题;
3、漏桶算法:
所有请求进入桶内,当桶满了之后其他请求全部丢弃,消费方一定的速度消费桶内请求,类似于队列结构方式,请求全部排队进来,当消费方消费。
存在的问题是:当桶内为空时,突然所有请求都进来桶内,会存在请求响应延迟的状态,因为需要排队等候。
4、令牌桶算法:
以固定的速度生成令牌放入桶中,当请求到来获取桶内令牌,如果没有获取到令牌则请求丢弃,
解决了请求排队问题。