怎么解决“雪崩”问题?
怎么解决“雪崩”问题?
提示
**题眼:**缓存大批量过期
**缓存雪崩:**是指缓存由于某些原因无法提供服务( 例如,缓存挂掉了 ),所有请求全部达到 DB 中,导致 DB 负荷大增,最终挂掉的情况。预防和解决缓存雪崩的问题,可以从以下多个方面进行共同着手。
解决方案:
- 缓存高可用:通过搭建缓存的高可用,避免缓存挂掉导致无法提供服务的情况,从而降低出现缓存雪崩的情况。假设我们使用 Redis 作为缓存,则可以使用 Redis Sentinel 或 Redis Cluster 实现高可用。
- 本地缓存:如果使用本地缓存时,即使分布式缓存挂了,也可以将 DB 查询到的结果缓存到本地,避免后续请求全部到达 DB 中。如果我们使用 JVM ,则可以使用 Ehcache、Guava Cache 实现本地缓存的功能。
重要
参考答案:
缓存雪崩就是说,缓存里的数据大面积过期了,然后很多请求没有走缓存,直接打在了DB上,把DB拖垮了。常见的情况就是,给所有的缓存都设置了同一个过期时间,然后导致某个瞬间,缓存基本上都过期了。
常见的解决办法也很多,首先就是把缓存改为一个随机值,不要让大多数缓存在同一时间都过期。但是,缓存雪崩还有一种情况就是整个缓存瘫痪了,比如说服务器挂了或者性能到达瓶颈了等等。这种情况很显然就得用其他办法了,常见得话主要有两种,第一种是增加一个备机,从单机模式变成一主一备,当主机出问题得时候,切到备机上这样可以最大限度得降低雪崩的危害。还有一种方法是说,在原有的基础上加一层。比如在我们的本机里加一层本地缓存,这样形成了一种多级缓存的方式,然后就算缓存雪崩了,还能挡住部分流量,不至于拖累整个服务。
最后的话,缓存雪崩主要还是的靠主备架构和快速重启来解决。备机肯定也不是万能的,要是备机也挂了,那这个整个服务还是会挂。所以,启动备机的时候,就要准备将主机重启,然后尽快做好缓存预热,实现主备切换。
