在开发高并发系统时,有三把利器用来保护系统:缓存、降级和限流:
缓存:缓存的目的是提升系统访问速度和增大系统处理容量
降级:降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开
限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务、排队或等待、降级等处理
常见算法:
1、计时器限流
2、滑动窗口
3、漏桶算法
4、令牌桶算法
计时器限流
计时器是限流算法中比较简单的一种算法,比如:限制一个接口1分钟内不能超过100次请求,可以在一开始设置一个计数器,每当接收到请求时,将计数器加1,如果计数器的值大于100并且当前请求与第一个请求的执行时间间隔还在1分钟内的,那就说明请求过多;如果当前请求与第一次请求的时间间隔超过1分钟,并且请求次数没有超限的,那么重置计数器
import org.springframework.data.redis.core.RedisTemplate;
/**
* 计数器限流
* 限制1分钟内请求100次
* 弊端:
* 1、当前窗口100个请求全部集中到结束点,下个窗口100个请求全部集中到起始点,临界点就会出现请求暴增的情况,可能瞬间压垮应用
* 2、只适用于单机应用,分布式环境中无法满足
*
* @author lile
* @date 201