Redis 缓存雪崩

1、缓存雪崩的概念

缓存层承载着大量请求,有效的保护了存储层。

但是如果缓存层由于某些原因整体不能提供服务(大面积宕机或者缓存的内容失效等),会导致所有的请求都到达存储层,存储层的调用量暴增,造成存储层宕机,系统崩溃。

在网上看到了一个非常有趣的说法:

缓存雪崩的英文原意是 stampeding herd(奔逃的野牛),指的是缓存层宕掉后,流量会像奔逃的野牛一样,打向后端存储。

2、预防措施

2-1、保证缓存层的高可用性

使用 Redis Sentinel 和 Redis Cluster 搭建 Redis 的高可用服务。

除非整个Redis集群全部宕机,否则很难出现雪崩的问题。

2-2、变更系统架构,追加本地缓存

可以考虑利用ehcache或者memcache在本地再追加一层缓存层(local cache)。

利用本地缓存层缓存一部分核心数据,在Redis全面崩溃的情况下,本地缓存还可以暂时抵挡全部或者部分流量,避免给存储层造成太大的负担。

本地缓存的失效时间等策略需要根据业务需求具体设计。

2-3、为存储层追加限流、服务降级组件

在实际项目中,我们需要对重要的资源 (例如 Redis、 MySQL、 Hbase、外部接口) 进行隔离,让每种资源都单独运行在自己的闭环中,即使个别资源出现了问题,也不会对其他服务造成影响。

为此,我们需要在系统中追加限流、服务降级组件(熔断),实现资源隔离。

当访问量剧增、服务出现问题仍然需要保证服务可用。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。

降级的最终目的是保证核心服务可用,即使是有损的。

现阶段最成熟的熔断框架应该是Netflix开源出来的Hystrix,它也是 Spring Cloud 的重要组件。

另外阿里开源出来的限流系统 Sentinel 也值得尝试。

2-4、提前演练

项目上线前,演练缓存层宕掉后,应用以及后端的负载情况以及可能出现的问题,在此基础上做一些预案设定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值