为了避免突发性高并发造成服务器宕机,导致整个系统不可用,可以做服务降级,限流和熔断
限流
为保证大部分用户正常使用系统,损失一部分用户的可用性,比如系统当前能够处理的并发数是10万,此时来了12万用户,限流机制会保证 10 万用户提供正常服务
-------------------------------------------------
限流算法
-------------------------------------------------
计数器算法
统计指定时间周期内的累计访问次数,超过阈值就启动限流
临界问题
比如一分钟100次,如果第一分钟的最后30s访问60次,第二分钟的前30s访问60次,加在一起就120了
-------------------------------------------------
滑动窗口算法
把固定窗口拆分成多个小的时间窗口,每个小的时间窗口单独统计访问次数,根据时间往前滑动并删除过期的小时间窗口,最终统计小时间窗口总的计数
-------------------------------------------------
令牌桶限流算法
系统以恒定的速率往令牌桶里放入令牌,请求来了要先从令牌桶拿到令牌获取访问资格,
如果请求速度大于令牌生成速度,那么令牌总会被取完,后续请求会被限流,
如果请求速度等于令牌生成速度,那么请求平稳
如果请求速度小于令牌生成速度,那么令牌桶总会被填满
令牌桶可以处理突发流量
replenishRate 令牌填充速度,代表允许每秒通过的请求数
burstCapacity 令牌桶的容量,代表每秒用户最大能执