美文网首页
Redis 缓存雪崩

Redis 缓存雪崩

作者: 白花蛇草可乐 | 来源:发表于2019-12-19 21:27 被阅读0次

    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、提前演练

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

    相关文章

      网友评论

          本文标题:Redis 缓存雪崩

          本文链接:https://www.haomeiwen.com/subject/rqvvnctx.html