缓存雪崩

发生后往往产生如下几个现象:

  • 页面
    • 408、500页面频繁出现
    • 客户反复刷新获取数据
  • 数据库
    • 连接量激增
    • 崩溃
    • 重启无效,再次被冲爆
  • Redis
    • 服务器崩溃
    • 集群崩溃

原因是短时间内大量缓存的key集体过期,导致大量并发请求直接访问数据库。
但数据库无法及时给出响应,造成大量的请求积压在 Redis 并超时,资源被严重占用导致 Redis 崩溃与集群坍塌。
紧接着再外层的应用服务器也积压请求导致崩溃。

解决方案:

  • 针对该单一问题
    • LRU 与 LFU 切换
    • key 过期时间随机化,避免同时过期大量数据
    • 热点 key 设置永久访问
    • 定期分析即将过期的数据判断其是否需要延时
  • 整体优化
    • 增加页面静态处理
    • 构建多级缓存(Nginx、Redis、ehcache...)
    • 优化 MySQL 严重耗时业务
    • 增加 Redis 性能监控,创建灾难预警机制
    • 动态化客户端请求限流,根据当前处理能力来放开
Last Updated: 11/2/2023, 9:04:01 PM