概念
指的是原本发送到缓存的大量请求由于缓存失效/缓存宕机导致无法到达,继而请求全部打到数据库上,由于这两者处理数据的吞吐量是有量级上的区别的,因此数据库很容易因此宕机。导致缓存雪崩的原因一般是缓存同时间大批量过期或者缓存实例宕机。
防范手段:
对于键值不设置统一的过期时间,而是在过期时间中加上随机数(1~3分钟),防止缓存数据同时间大量过期,并且随机数的设置不应该影响业务功能,加上一个短的随机时间即可。对于实例宕机的问题,可以采用主从节点集群部署的方式,主节点挂壁了从节点可以顶上来,不至于长时间的大量请求打到数据库上。
发生了缓存雪崩后降低影响的手段:
对于缓存大规模失效情况,首先考虑服务降级,将非核心的业务对缓存的请求暂时不给予正确响应,而是返回预设值或者空值,对于核心业务正常处理,这样可以尽量减少请求的数量,尽可能避免数据库因此宕机,这种手段类似于电商大促期间对于确认收货/评论功能的暂时关闭。
对于缓存宕机的情况,首先考虑服务限流,比如原来允许通过的流量是1w,其中有9k会在缓存中得到响应,只有1k会到数据库,那么现在发生了缓存雪崩,意味着最大可能1w的请求会到数据库,因此我们可以减小允许通过的请求数,即限制流量在1k,这样就可以保证最大也只有1k的流量会到数据库上。最坏的情况下可以考虑服务熔断,即切断该服务的提供,拒绝服务相关请求,避免影响到其他业务的正常运行。