`
carlosfu
  • 浏览: 582539 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ba8b5055-9c58-3ab0-8a1c-e710f0495d2c
BigMemory实战与理...
浏览量:31247
53b2087e-c637-34d2-b61d-257846f73ade
RedisCluster开...
浏览量:151059
C9f66038-7478-3388-8086-d20c1f535495
缓存的使用与设计
浏览量:125263
社区版块
存档分类
最新评论

缓存系列文章--6.缓存雪崩问题

阅读更多



   转载请注明出处哈:http://carlosfu.iteye.com/blog/2269678

   更多Redis的开发、运维、架构以及新动态,欢迎关注微信公众号:

 

 

   一、什么是缓存雪崩

      从下图可以很清晰出什么是缓存雪崩:

      1. 由于Cache层承载着大量请求,有效的保护了Storage层(通常认为此层抗压能力稍弱),所以Storage的调用量实际很低,所以它很爽。大笑

      2. 但是,如果Cache层由于某些原因(宕机、cache服务挂了或者不响应了)整体crash掉了,也就意味着所有的请求都会达到Storage层,所有Storage的调用量会暴增,所以它有点扛不住了,甚至也会挂掉 哭

 

雪崩问题在国外叫做:stampeding herd(奔逃的野牛),指的的cache crash后,流量会像奔逃的野牛一样,打向后端

 

      

    二、 缓存雪崩的危害

       

           雪崩的危害显而易见,通常来讲可能很久以前storage已经扛不住大量请求了,于是加了cache层,所以雪崩会使得storage压力山大,甚至是挂掉。   

 

    三、如何预防缓存雪崩

   

    1. 保证Cache服务高可用性:

        和飞机都有多个引擎一样,如果我们的cache也是高可用的,即使个别实例挂掉了,影响不会很大(主从切换或者可能会有部分流量到了后端),实现自动化运维。例如:

 

     memcache的一致性hash:

     

     redis的sentinel和cluster机制:

     

     

    

    

   有关memcache和redis的高可用方案,之后会有文章进行介绍。

 

  2. 依赖隔离组件为后端限流:

      其实无论是cache或者是mysql, hbase, 甚至别人的API,都会出现问题,我们可以将这些视同为资源,作为并发量较大的系统,假如有一个资源不可访问了,即使设置了超时时间,依然会hang住所有线程,造成其他资源和接口也不可以访问。

      相信大家一定遇到过这样的页面:这些应该就是淘宝的降级策略。

       
       

       降级在高并发系统中是非常正常的:比如推荐服务中,很多都是个性化的需求,假如个性化需求不能提供服务了,可以降级补充热点数据,不至于造成前端页面是个大空白(开了天窗了)

       在实际项目中,我们对重要的资源都进行隔离,比如hbase, elasticsearch, zookeeper, redis,别人的api(可能是http, rpc),让每种资源都单独运行在自己的线程池中,即使资源出现了问题,对其他服务没有影响。

       但是线程池如何管理,比如如何关闭资源池,开启资源池,资源池阀值管理,这些做起来还是相当麻烦的,幸好netfilx公司提供了一个很牛逼的工具:hystrix,可以做各种资源的线程池隔离。

        有关hystrix的详细介绍可以参考:http://hot66hot.iteye.com/blog/2155036

        hystrix附图:

       

3. 提前演练:

   在项目上线前,通过演练,观察cache crash后,整体系统和storage的负载, 提前做好预案。  

     

 

    

  • 大小: 50.5 KB
  • 大小: 83 KB
  • 大小: 90.6 KB
  • 大小: 120.8 KB
  • 大小: 96.1 KB
  • 大小: 90.6 KB
  • 大小: 131.9 KB
  • 大小: 123 KB
  • 大小: 15.7 KB
  • 大小: 175.9 KB
  • 大小: 174.2 KB
分享到:
评论
1 楼 爱蜗牛的蝙蝠 2015-11-20  
cluster 那个图应该是 16384 吧

相关推荐

    基于java的开发源码-Java缓存工具 SimpleCache.zip

    基于java的开发源码-Java缓存工具 SimpleCache.zip 基于java的开发源码-Java缓存工具 SimpleCache.zip 基于java的开发源码-Java缓存工具 SimpleCache.zip 基于java的开发源码-Java缓存工具 SimpleCache.zip 基于java...

    基于java的开发源码-Ehcache Java 缓存框架.zip

    基于java的开发源码-Ehcache Java 缓存框架.zip 基于java的开发源码-Ehcache Java 缓存框架.zip 基于java的开发源码-Ehcache Java 缓存框架.zip 基于java的开发源码-Ehcache Java 缓存框架.zip 基于java的开发源码-...

    redis-缓存-穿透-击穿-雪崩.png

    redis-缓存-穿透-击穿-雪崩

    Redis-x64-3.0.501 msi/zip

    Redis,全称Remote Dictionary Server,是一款高性能的键值存储系统,由Salvatore Sanfilippo创建,最初是为了解决Memcached在某些特定场景下的性能问题。它支持数据持久化,提供丰富的数据结构如字符串、哈希表、...

    缓存、缓存算法和缓存框架简介 - 文章 - 伯乐在线.pdf

    文章中提及的面试者programmerone对缓存的理解非常浅显,仅限于知道使用hashtable实现简单的缓存机制,而没有深入了解缓存的工作原理、缓存算法的选择标准和缓存框架的使用。面试官提出的问题主要集中在缓存的基本...

    Redis-x64-3.0.504(msi+zip).zip

    REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。这是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

    fence-virtd-libvirt-0.2.3-9.el6.i686.rpm

    fence-virtd-libvirt-0.2.3-9.el6.i686.rpm是工具centos包 。

    ehcache-2.8.0-distribution.tar.gz

    3. **缓存穿透与缓存雪崩**:防止无效查询导致的缓存穿透和大量缓存同时过期造成的缓存雪崩,可通过布隆过滤器、设置合理的过期时间等手段解决。 五、Ehcache与其他技术的集成 1. **Spring框架**:Ehcache与Spring...

    Python库 | oslo.cache-1.37.0-py2.py3-none-any.whl

    - **分层缓存**:支持不同层次的缓存,如本地内存缓存和分布式缓存,提高缓存效率。 - **键空间管理**:提供键空间前缀,方便管理和清理缓存。 - **高级功能**:如缓存分组、缓存锁、事件监听器等,增强了缓存操作的...

    手动架设DNS缓存服务-AcrylicDNSProxy[整理].pdf

    手动架设DNS缓存服务-AcrylicDNSProxy[整理].pdf

    cache-api-1.0.0.jar

    “cache-api-1.0.0.jar”作为实现JSR107规范的库,提供了对缓存操作的一系列接口和类。这些接口和类允许开发者方便地在应用中集成缓存功能,如存储和检索数据、设置过期策略、处理并发访问等。通过使用这个API,...

    ehcache-2.7.3-distribution.tar.gz

    - **缓存机制**:EHCache采用内存和磁盘缓存相结合的方式,内存缓存速度快但容量有限,磁盘缓存则提供更大的存储空间但访问速度相对较慢。缓存中的数据通过键值对的形式存储。 - **缓存策略**:LRU和LFU是两种常用...

    hibernate-ehcache-4.1.0.Final.jar

    hibernate-ehcache-4.1.0.Final.jar 是hibernate4.1使用缓存的jar包

    Linux运维-6.集群-集群视频-5、Squid缓存、代理服务-18、Squid简介.mp4

    Linux运维-6.集群-集群视频-5、Squid缓存、代理服务-18、Squid简介.mp4

    ibatis缓存介绍 - 勇泽 - 博客园.mht

    ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园

    计算机前端-实战.aravel框架4-02.缓存操作.wmv

    计算机前端-实战.aravel框架4-02.缓存操作.wmv

    下载 gradle-4.0-milestone-1-all.zip 官方绿色版

    - 提高了构建速度,通过更优化的依赖解析和缓存机制减少了构建时间。 - 引入了对Kotlin DSL的支持,允许开发者使用Kotlin编写构建脚本,提高了脚本的可读性和可维护性。 - 对Android插件的改进,比如更好的资源处理...

    Python库 | weaklru-0.1.1-py2.py3-none-any.whl

    `weaklru`库则采用弱引用,允许缓存中的对象在不再被其他地方引用时自动删除,避免了内存泄漏的问题。 `weaklru`库的核心功能包括: 1. **弱引用**:使用弱引用存储缓存中的对象,当对象只被缓存引用时,垃圾回收...

Global site tag (gtag.js) - Google Analytics