17 高性能缓存架构

笔记

  1. 缓存就是为了弥补存储系统在这些复杂业务场景下的不足,其基本原理是将可能重复使用的数据放到内存中,一次生成、多次使用,避免每次使用都去访问存储系统。缓存能够带来性能的大幅提升。

  2. 缓存的架构设计要点:

    1. 缓存穿透
      缓存穿透是指缓存没有发挥作用,业务系统虽然去缓存查询数据,但缓存中没有数据,业务系统需要再次去存储系统查询数据。通常情况下有两种情况:

      • 存储数据不存在
        如果查询存储系统的数据没有找到,则直接设置一个默认值(可以是空值,也可以是具体的值)存到缓存中,这样第二次读取缓存时就会获取到默认值,而不会继续访问存储系统。
      • 缓存数据生成耗费大量时间或者资源
        存储系统中存在数据,但生成缓存数据需要耗费较长时间或者耗费大量资源。如果刚好在业务访问的时候缓存失效了,那么也会出现缓存没有发挥作用,访问压力全部集中在存储系统上的情况。
    2. 缓存雪崩
      缓存雪崩是指当缓存失效(过期)后引起系统性能急剧下降的情况。缓存雪崩的常见解决方法有两种:更新锁机制和后台更新机制。

      • 更新锁机制 对缓存更新操作进行加锁保护,保证只有一个线程能够进行缓存更新,未能获取更新锁的线程要么等待锁释放后重新读取缓存,要么就返回空值或者默认值。分布式集群的业务系统要实现更新锁机制,需要用到分布式锁,如 ZooKeeper。
      • 后台更新机制 由后台线程来更新缓存,而不是由业务线程来更新缓存,缓存本身的有效期设置为永久,后台线程定时更新缓存。
    3. 缓存热点

      • 缓存热点的解决方案就是复制多份缓存副本,将请求分散到多个缓存服务器上,减轻缓存热点导致的单台缓存服务器压力。
      • 同的缓存副本不要设置统一的过期时间,否则就会出现所有缓存副本同时生成同时失效的情况,从而引发缓存雪崩效应。
  3. 由于缓存的各种访问策略和存储的访问策略是相关的,因此上面的各种缓存设计方案通常情况下都是集成在存储访问方案中,可以采用“程序代码实现”的中间层方式,也可以采用独立的中间件来实现。

理解与思考

  1. 缓存很有用。软件系统中随处可见各种缓存。硬件,操作系统,数据库,web系统中都能看到缓存的应用。

  2. 制定缓存和失效的策略,是个技术活,也是用好缓存系统的关键。稍有不慎就自废武功。

课后习题

分享一下你所在的业务发生过哪些因为缓存导致的线上问题?采取了什么样的解决方案?效果如何?
我目前做的系统,是一个性能报表系统,并发用户数少,网络上处于用户的内网系统,注重数据的时效性,需要及时刷新,所以没用使用缓存。对缓存系统的设计和使用都比较少。

实践

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 单纯依靠存储系统的性能提升不够的,典型的场景有: 需要经过复杂运算后得出的数据,存储系统无能为力 例如,一个论坛需...
    hedgehog1112阅读 715评论 0 5
  • 虽然我们可以通过各种手段来提升存储系统的性能,但在某些复杂的业务场景下,单纯依靠存储系统的性能提升不够的,典型的场...
    d_quan阅读 79评论 0 1
  • 本文参考《极客时间》- 从0开始学架构 为什么需要缓存 复杂业务场景下,单纯依靠存储系统的性能提升不够的。典型场景...
    小螺丝钉cici阅读 268评论 0 4
  • 性能既是客观指标,诸如响应时间、吞吐量等技术指标;又是实际参与者的主观感受。 1 性能测试 性能测试是性能优化的前...
    deniro阅读 1,402评论 2 15
  • 在服务器端程序开发领域,性能问题一直是备受关注的重点。业界有大量的框架、组件、类库都是以性能为卖点而广为人知。然而...
    dreamer_lk阅读 1,035评论 0 17