MST

星途 面试题库

面试题:分布式系统中缓存雪崩问题产生的原因及常见预防措施

请详细阐述分布式缓存中缓存雪崩问题是如何产生的?针对该问题,常见的预防措施有哪些?
39.7万 热度难度
后端开发分布式系统

知识考点

AI 面试

面试题答案

一键面试

缓存雪崩产生原因

  1. 大量缓存同时过期:在分布式系统中,若大量缓存数据设置了相同或相近的过期时间,当这些缓存同时过期时,大量原本可从缓存获取的数据请求会瞬间直接落到后端数据库上。数据库可能因无法承受突然的高并发请求而性能下降甚至崩溃,进而导致整个系统不可用。例如电商大促活动前,为了预热提前将大量商品信息存入缓存,并设置了相近的过期时间,活动开始时缓存集中过期,大量请求冲向数据库。
  2. 缓存服务器故障:分布式缓存通常由多个缓存节点组成,若某个关键的缓存服务器或大量缓存服务器节点同时发生故障,导致缓存服务大面积不可用,所有依赖这些缓存的请求也会直接访问后端数据库,同样会使数据库压力剧增,引发缓存雪崩。比如因机房网络故障,导致一组缓存服务器与其他服务器断开连接,无法提供服务。

常见预防措施

  1. 分散过期时间:避免大量缓存数据设置相同或相近的过期时间。可以在设置缓存过期时间时,添加一个随机值或采用不同的过期策略。例如,原本设置所有商品缓存过期时间为 1 小时,可以改为在 1 小时的基础上,随机加上 0 - 10 分钟的时间,这样可以使缓存过期时间分散,避免集中过期。
  2. 使用多级缓存:构建多级缓存架构,如在应用层和主缓存之间增加一层本地缓存(如 Guava Cache)。当主缓存失效时,先从本地缓存获取数据,减少对后端数据库的直接访问。例如,应用服务器在请求数据时,优先检查本地缓存,如果没有则查询主缓存,主缓存没有再查询数据库,查询到数据后依次更新本地缓存和主缓存。
  3. 缓存高可用:通过增加缓存服务器的冗余备份,采用集群部署方式(如 Redis Cluster),提高缓存系统的可用性。当某个缓存节点故障时,其他节点可以继续提供服务,降低因单点故障导致缓存雪崩的风险。同时可以设置自动故障转移机制,确保在节点故障时能够快速恢复服务。
  4. 限流与降级:在系统入口处设置限流策略,限制单位时间内进入系统的请求数量,防止过多请求直接压垮数据库。当系统压力过大时,进行服务降级,如返回默认数据或简单提示信息,保证核心业务的可用性。例如,使用令牌桶算法或漏桶算法进行限流,对非核心业务进行熔断降级处理。
  5. 后台异步更新缓存:在缓存过期前,通过后台线程异步提前更新缓存数据,避免过期瞬间大量请求穿透到数据库。例如,使用定时任务或消息队列,在缓存快过期时触发任务,提前从数据库获取最新数据并更新缓存。