zoukankan      html  css  js  c++  java
  • 分布式系统 缓存穿透与失效时的雪崩效应

    缓存系统往往有两个问题须要面对和考虑:缓存穿透与失效时的雪崩效应。

           1. 缓存穿透是指查询一个一定不存在的数据。因为缓存是不命中时被动写的,而且出于容错考虑。假设从存储层查不到数据则不写入缓存。这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。

    至于怎样有效地解决缓存穿透问题,最常见的则是採用布隆过滤器(这个东西。在我的此篇文章中有介绍:),将全部可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。

           而在数据魔方里。淘宝採用了一个更为简单粗暴的方法,假设一个查询返回的数据为空(无论是数据不存在,还是系统故障)。我们仍然把这个空结果进行缓存,但它的过期时间会非常短,最长不超过五分钟。

           2. 缓存失效时的雪崩效应虽然对底层系统的冲击非常可怕。但遗憾的是,这个问题眼下并没有非常完美的解决方式。大多数系统设计者考虑用加锁或者队列的方式保证缓存的单线程(进程)写,从而避免失效时大量的并发请求落究竟层存储系统上。

           在数据魔方中,淘宝设计的缓存过期机制理论上可以将各个client的数据失效时间均匀地分布在时间轴上,一定程度上可以避免缓存同一时候失效带来的雪崩效应。

  • 相关阅读:
    使用signalr不使用连接服务器和前台的js的方法
    signalR client属性中的大致方法
    创建一个简单的signalr项目
    设计模式之工厂模式
    VS2012下没有ADO.NET实体数据模型
    迷你极客主机Station M1 开箱体验
    制作Station M1主机的Armbian启动卡
    StationP1的Ubuntu上安装gedit
    Station OS播放网络共享文件夹的媒体资源
    体验StationOS的推荐应用功能
  • 原文地址:https://www.cnblogs.com/zsychanpin/p/7027675.html
Copyright © 2011-2022 走看看