首页 > 其他分享 >分布式系统架构7:本地缓存

分布式系统架构7:本地缓存

时间:2025-01-17 11:11:07浏览次数:1  
标签:缓存 架构 策略 命中率 Caffeine 分布式系统 淘汰 数据

这是小卷对分布式系统架构学习的第10篇文章,在开始学习分布式缓存之前,先来学习本地缓存的理论基础,了解为什么需要用缓存

1.引入缓存的影响

我们在开发时,用到缓存的情况,无非就是为了减少客户端对相同资源的重复请求,降低服务器的负载压力。引入缓存后,既有好处也有坏处

引入缓存负面影响:

  • 开发角度,增加了系统复杂度,需考虑缓存失效、更新、一致性问题
  • 运维角度,缓存会掩盖一些缺陷问题
  • 安全角度,缓存可能泄密某些保密数据

引入缓存的理由:

  • 为了缓解CPU压力,将实时计算运行结果存储起来,节省CPU压力
  • 为了缓解I/O压力,将原本对网络、磁盘的访问改为对内存的访问

2.缓存的属性

选择缓存时,主要考虑吞吐量、命中率、扩展功能、分布式支持。 前3个这篇文章会讲,下一篇再讲分布式缓存

2.1吞吐量

并发场景下,每秒操作数OPS,反映了缓存的工作效率

如Java8并发包的ConcurrentHashMap,线程安全实现原理是CAS+synchronized锁单个元素。但是该类仅有缓存功能,没有命中率、淘汰策略、缓存统计等功能

并发场景下,不可避免的会有读写数据带来的状态竞争问题,当前有2种处理套路:

  • 以Guava Cache为代表的同步处理机制:在访问缓存数据时,一并完成缓存淘汰、统计、失效等状态变更操作,通过分段加锁等优化手段来尽量减少数据竞争。
  • 以Caffeine为代表的异步日志提交机制:参考经典的数据库设计理论,把对数据的读、写过程看作是日志(即对数据的操作指令)的提交过程。

Caffeine使用了环形缓冲区来记录状态变动日志,为进一步减少数据竞争,Caffeine给每个线程都设置了专用的环形缓冲区,如下是Wikipedia上的环形缓冲示意:

环形缓冲区结构中,读取和写入是一起进行的,只要读取指针不落后于写指针一圈,这个操作可以永久进行下去,容纳无限多的新字符。

如果不满足,则必须阻塞写指针,等待读取清空缓冲区

2.2 命中率与淘汰策略

缓存的容量是有限的,也因此需要自动地实现淘汰低价值目标,也就是缓存淘汰策略

主要实现方案有三种:

第一种:FIFO(First In First Out)

优先淘汰最早进入被缓存的数据。FIFO 的实现十分简单,但一般来说,越是频繁被用到的数据,往往越会早早地被存入缓存之中。

所以这种淘汰策略,很可能会大幅降低缓存的命中率

第二种:LRU(Least Recent Used)

优先淘汰最久未被使用访问过的数据。LRU 通常会采用 HashMap 加 LinkedList 的双重结构(如 LinkedHashMap)来实现。每次缓存命中时,将命中对象调整到LinkedList的头部,每次淘汰从链表尾部清理

存在问题:如果热点数据一段时间没被访问,就会被淘汰;

第三种:LFU(Least Frequently Used)

优先淘汰最不经常使用的数据。LFU 会给每个数据添加一个访问计数器,每访问一次就加 1,当需要淘汰数据的时候,就清理计数器数值最小的那批数据。

缺点:每个数据都需要维护计数器,不便于处理随时间变化的热点数据

以上只是列了三种基础的淘汰策略,实际Caffeine 官方还制定了两种高级淘汰策略:ARC(Adaptive Replacement Cache)和LIRS(Low Inter-Reference Recency Set),更复杂的淘汰策略都是为了提高命中率的。

3.扩展功能

缓存不是只实现一个Map接口就可以的,还需要一些额外的功能,下面列出缓存的扩展功能:

  • 加载器:从被动放入,变为主动通过加载器去加载指定 Key 值的数据
  • 淘汰策略:支持用户根据需要自行选择淘汰策略
  • 失效策略:缓存数据在超过一定时间内自动失效,Redis的策略是定时删除、定期删除、惰性删除
  • 事件通知:提供事件监听器,在数据状态变动时进行一些额外操作
  • 并发级别:如Guava Cache通过分段加锁来实现缓存的并发设置
  • 容量控制:设置初始容量和最大容量
  • 统计信息:命中率、平均加载时间、自动回收计数等信息
  • 持久化:将缓存数据存储到数据库或者磁盘

4.本地缓存对比

ConcurrentHashMap Ehcache Guava Cache Caffeine
访问控制 最高 一般 良好 优秀(接近ConcurrentHashMap)
淘汰策略 多种:FIFO、LRU、LFU等 LRU W-TinyLFU
扩展功能 无,只有基础访问接口 并发控制、失效策略、容量控制等 同左 同左

标签:缓存,架构,策略,命中率,Caffeine,分布式系统,淘汰,数据
From: https://www.cnblogs.com/dnboy/p/18676548

相关文章

  • GaussDB云原生架构
    分层原则。整体层次分为三层,分别为ApplicationLayer,ComputerLayer和StorageLayer。ApplicationLayer应用层主要是客户端各种语言的驱动,这些驱动通过通信与计算层ComputerLayer进行交互,对数据库进行操作。下面是ComputerLayer计算层,计算层负责SQL处理和事务处理,数据库的......
  • 什么是缓存穿透、缓存击穿、缓存雪崩与其解决方案
    目录​缓存穿透缓存击穿缓存雪崩缓存穿透:无效请求绕过缓存访问数据库。缓存击穿:某个热点数据缓存失效,导致并发请求直接访问数据库。缓存雪崩:大量缓存同时失效,导致请求集中访问数据库,数据库压力骤增缓存穿透定义:缓存穿透指的是查询一个根本不存在的数据,这种查询会绕......
  • 深度学习图像算法中的网络架构:Backbone、Neck 和 Head 详解
    深度学习已经成为图像识别领域的核心技术,特别是在目标检测、图像分割等任务中,深度神经网络的应用取得了显著进展。在这些任务的网络架构中,通常可以分为三个主要部分:Backbone、Neck和Head。这些部分在整个网络中扮演着至关重要的角色,它们各自处理不同的任务,从特征提取到最......
  • MyBatis缓存原理及插件实现
    目录MyBatis缓存原理缓存的工作机制一级缓存:二级缓存:MyBatis插件实现MyBatis缓存原理缓存的工作机制如果会话查询了一条数据,此数据会存入一级缓存;若会话被关闭或提交,则,其数据转存入二级缓存;新会话若再次查询之前查询过的数据,就从二级缓存中获取;不同的Mapper,查询出......
  • 企业管理与架构
    今天聊聊企业架构与DDD如何进行融合企业架构TOGAF什么是企业架构TOGAF?TOGAF(TheOpenGroupArchitectureFramework)是一个广泛采用的企业架构(EnterpriseArchitecture,EA)框架,由开放组(TheOpenGroup)开发和维护它为组织设计、规划、实施和治理企业信息架构提供了系统化的方法......
  • MyBatis基于XML的详细使用-缓存
    MyBatis基于XML的详细使用-缓存1、介绍MyBatis内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。为了使它更加强大而且易于配置,我们对MyBatis3中的缓存实现进行了许多改进。默认情况下,只启用了本地的会话缓存,它仅仅对一个会话中的数据进行缓存。要启用......
  • Redis动态热点数据缓存策略设计
    Redis动态热点数据缓存策略设计1.热点数据识别机制1.1计数器方式@ServicepublicclassHotDataCounter{@AutowiredprivateRedisTemplate<String,Object>redisTemplate;//访问计数publicvoidincrementCounter(Stringkey){Strin......
  • 一文搞懂企业架构与DDD融合
    大家好,我是汤师爷~今天聊聊企业架构与DDD如何进行融合。企业架构TOGAF什么是企业架构TOGAF?TOGAF(TheOpenGroupArchitectureFramework)是一个广泛采用的企业架构(EnterpriseArchitecture,EA)框架,由开放组(TheOpenGroup)开发和维护。它为组织设计、规划、实施和治理企业信息......
  • vue3.0 keep-alive 缓存指定页面
    vue3.0keep-alive缓存指定页面**vue2.0和vue3.0keep-alive写法是有区别,不要太过于依赖AI**!!!!vue2的写法(不适用于vue3)<keep-alive><router-viewv-if="$route.meta.keepAlive"></router-view></keep-alive><router-viewv-if="!$route.met......
  • GaussDB技术解读——GaussDB架构介绍之数据持久化存取层(DataNode)关键技术方案
    数据持久化存取层(DataNode)关键技术方案Datanode节点主要负责数据的持久化和快速写入、读取。数据持久化采用物理日志wal,事务提交wal刷盘,对外提供逻辑日志功能,反解析物理日志为SQL逻辑日志。图1datanode数据持久化Astore:存储格式为追加写优化设计,其多版本元组采用新、老版......