什么是缓存雪崩
缓存雪崩是指在缓存系统中,大量缓存数据在同一时间内过期或者清空,导致大量的请求直接访问后端数据源。
如下图所示:
缓存雪崩,会造成数据库负载激增,可能引起系统性能下降,甚至崩溃的场景。
缓存雪崩的原因
缓存雪崩通常由以下原因引起:
1.大规模缓存失效
当多个缓存键在同一时间过期或被清空,导致大量请求直接访问后端数据库。
如下图所示:
过程如下:
1)缓存失效,但依然大量请求访问缓存服务redis;
2)redis大量失效后,大量请求转向到mysql数据库;
3)mysql的调用量暴增,很快就扛不住了,甚至直接宕机;
4)由于大量的应用服务依赖mysql和redis的服务,这个时候很快会演变成各服务器集群的雪崩,最后网站彻底崩溃。
2.缓存层故障
如果缓存层,比如:如缓存服务器出现故障,导致无法使用缓存,所有请求都必须访问后端数据源。
3.热点数据集中
某些热门数据集中在一些缓存键上,如果这些缓存键失效,会导致大量请求涌入后端数据库。
缓存雪崩解决方法
缓存雪崩可能会对系统性能和可用性产生严重影响,因此需要采取一些解决方法:
1.合理设置缓存过期时间
避免大规模缓存同时过期,可以为缓存数据设置随机的过期时间,以分散缓存失效的时间点。
2.缓存层多级缓存
引入多级缓存架构,将缓存分为多个层次,比如:本地缓存、分布式缓存、CDN等。
这样即使某个缓存层出现问题,其他缓存层仍然可以提供服务。
3.缓存的高可用性
缓存层设计成高可用,防止缓存大面积故障,即使个别节点、个别机器、甚至是机房宕掉,依然可以提供服务。
例如: Redis Sentinel 和 Redis Cluster, 都实现了高可用。
4.缓存数据永不过期
对于一些热门数据,可以设置缓存数据永不过期,只在数据发生变化时手动刷新缓存,这样可以避免缓存失效导致雪崩。
5.降级
当访问量剧增、服务出现问题仍然需要保证服务还是可用的。
系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降
6.限流和熔断
实施请求限流和熔断策略,以防止大规模请求冲击后端系统。
通过综合使用这些方法,可以有效地防止缓存雪崩问题的发生,提高系统的可用性和稳定性。
陈睿mikechen
十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》