高并发

系统保护措施:缓存,降级和限流

缓存

提高系统吞吐量

缓存穿透

是一种攻击手段,查询数据库里根本不存在的数据,每次都不命中,导致每次都会触发无效的数据库读请求

解决方案:

  1. 布隆过滤器发现没有就快速返回
  2. 同样缓存空结果,将请求挡到数据库外

缓存雪崩

设置缓存的有效时间相同,导致同时失效后 DB 不堪重负

解决方案:失效时间随机分散

缓存击穿

某一个 key 过时失效导致DB不堪重负 不立即去 DB 取数据,而是先 SET 一个互斥锁(redis 中的 SETNX)并在返回成功的情况下再去取数据,然后回设缓存。再进行重新获取

降级

影响核心流程的请求暂时屏蔽

限流

达到限制速率则可以拒绝服务,降级 可以从数据库的连接池和线程池开始着手 网关(nginx)限制瞬时并发数 RPC调用速率,MQ消费速率

令牌桶

令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌 桶满了就丢弃或拒绝令牌,令牌不足就不会删除,数据被丢弃或者等待

漏桶算法

用于流量整形和流量控制 固定速率流出请求,请求积累过桶的容量时就拒绝

计数器限流

主要用来限制总并发数,比如数据库连接池、线程池、秒杀的并发数 可以通过 cache 来存储计数器和过期时间,可以限制每秒钟的调用次数

分布式限流

redis或者nginx 负载均衡,一致性哈希分流