ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

客户端缓存

客户端缓存 用空间换时间的那类设计里, 缓存的本质是个内存 Hash, 它的目标呈现为更快、更近, 也就是把往应用的情形来讲或者针对用户的角度而言的数据更靠近存放, 并且提升数据去进行写入以及读取时的速度。仅仅是缓存, 便能实现性能提升, 究其实质乃是建基于有着时间局部性以及空间局部性之称的局部性原理之上。缓存命中率作为缓存极为关键的度量指标, 其详细计算公式表现为将从缓存中展开读取的次数除以总读取次数这样一种形式。可以提升数据读取速度, 能够提升系统扩展能力, 还可降低存储成本, 不过会升高系统的复杂度, 这是引入缓存所带来的情况。分类与架构播报缓存, 依部署角度划分, 能分成客户端缓存与服务端缓存, 服务端缓存涵盖CDN缓存, 还有反向代理缓存, 包含数据库缓存, 以及进程内缓存, 另外还有分布式缓存。具有访问速度最快特点的本地缓存, 也就是进程内缓存, 被存储在应用进程内存里, 它有着零网络延迟且无序列化开销的特性, 不过其容量有限并且没办法跨节点共享, 常见的实现有Guava Cache。分布式缓存, 是那种独立的缓存服务, 它是要通过网络去访问的, 就好比Redis这类的, 它的核心优势有好多, 比如说具有高可扩展性, 还有大容量咧, 再者就是数据共享以及一致性也都具备, 另外还有高可用性, 不过, 跟本地缓存比起来, 它是存在网络延迟这种情况的。那种将本地缓存以及分布式缓存的优点予以结合的多级缓存架构被采用, 典型的二级缓存架构运用L1本地缓存和L2分布式缓存, 查询的流程是, 先去查询L1缓存, 要是没有命中的话就查询L2缓存, 要是再次没有命中那就查询数据库并且按照级别依次进行回填。在架构设计中需考虑缓存穿透、击穿和雪崩等共性挑战。关键技术播报依赖业务场景而言, 缓存常常存在懒汉式也就是读的时候进发触发的情况, 还有饥饿式即写的时候引发触发的情形, 以及定期去进行刷新这样子的一些使用方式。缓存淘汰所依据的主要是空间、容量以及时间这般的类型, 这里的时间涵盖TTL存活期、TTI空闲期, 常见的算法包含FIFO, 也就是先进先出, 还包括LRU, 即最近最少使用, 以及LFU, 是最近最少频率使用。缓存, 从部署这个角度来看, 是能够被划分成客户端缓存以及服务端缓存的, 而服务端缓存呢, 它涵盖了CDN缓存、反向代理缓存、数据库缓存、进程内缓存还有分布式缓存等等这些类别。为了能够同时兼顾性能以及扩展性这两方面, 往往会运用多级缓存架构, 就比如说, 会去使用进程内缓存当作一级缓存也就是L1, 采用分布式缓存当作二级缓存即L2, 在进行查询操作的时候, 会先去查询L1, 如果没有查询到命中的结果, 接着就会去查询L2, 要是依旧没有查询到命中的情况, 那么就会去查询数据库并且按照顺序依次回填到缓存当中。带进缓存会出现缓存穿透、缓存击穿、缓存雪崩这般挑战, 仍得处置缓存与数据库当中的数据一致性现象。典型问题与解决方案播报由于缓存出现不可用的状况, 或者众多缓存因超时时间一致而于同一时间段内失效, 致使大量请求径直访问数据库, 进而导致数据库压力过重引来系统雪崩, 这被称作缓存雪崩。查询的数据于数据库里并不存在, 因此缓存中自然也不会存在, 应用在进行查询时若在缓存里查不到便会奔赴数据库展开查询, 当这类请求数量多时, 数据库压力便会增大, 此为缓存穿透。热点数据失效的瞬间, 大量请求直接跑去访问数据库, 这就是缓存击穿。具体导致缓存一致性难以避免的原因在于, 无法保障同时对数据库进行更新以及对缓存进行更新这两个操作处于同一个事务当中, 所以它不属于原子操作, 进而使得缓存不一致这种情况就是无法回避的。常用的方案追求达成最终的一致性, 比如说, 先是对数据库进行更新操作, 然后再去删除缓存。并非是指系统启动之后, 直接去查询热点的数据并且进行缓存, 而是缓存预热, 如此这般能够避免当用户发出请求之时, 把数据库在先进行查询, 随后进而再导致更新缓存出现的问题。应用场景与实例播报数据缓存技术, 借助保存那些有待读取的或会被重复读取的数据, 来提高读取效率, 它能够被应用在数据库表数据方面, 还能应用于Web应用页面数据等这类需要频繁进行访问的场景之中, 以此来提升数据访问的性能, 并且减轻后端所承受的压力。在云原生跟大数据或者AI训练的场景当中, Fluid数据缓存技术能够切实解决在集群里访问存储系统数据之际容易出现的高延迟以及带宽受限的问题, 借由这一方式提升数据处理的效率AI训练一般来讲需要反复去读取海量的数据, 在灵骏智算的场景之下, 本地缓存加速功能是通过把数据缓存到本地计算节点进而削减网络开销, 以此提高训练的吞吐。于云数据库景况里, 借由恰当设定LRU与TTL策略, 且借助缓存预热功能, 针对指定的数据展开预热, 能够切实有效地管理缓存数据, 进而提升云数据库版之访问速度。处于云原生架构优化场景里, 借助Fluid供给的数据缓存亲和性调度优化本事, 能够去设置应用Pod上面的亲和性配置, 使得应用Pod优先存取与原本同一个节点、同一个可用区节点或者同一个地域节点的缓存数据, 进而提升应用Pod访问数据的效率。于企业软件的场景里头, 数据缓存这项技术借助把频繁被访问的数据予以保存在高速缓存之内, 进而减少数据库查询的次数, 以此提升数据访问的速度。首先, 硬盘的高速缓存, 其范围一般是512KB到2MB, 其中主流SATA硬盘的数据缓存为2MB, 并且呐, 要提到SCSI硬盘, 它最高的数据缓存达到了16MB。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进