沃趣科技技术社区
行业前沿信息一网打尽
沃趣科技技术社区
行业前沿信息一网打尽
沃趣科技技术社区
行业前沿信息一网打尽
技术社区 > 原理剖析|缓存加速技术

原理剖析|缓存加速技术

2023年06月14日

前言


目前在主流存储中,使用的比较多的是机械硬盘和固态硬盘(SSD)。机械硬盘具有容量大,价格便宜,容错性好,寿命较长等优点;缺点是读写性能相对固态硬盘有比较大的差距。固态硬盘的优点是读写性能较好,特别是随机读写性能;缺点是价格比较昂贵,容量小,写入寿命有限,一旦损坏数据难以恢复等。因此,有些情况下我们希望结合两者优点,于是SSD缓存技术方案应运而生,SSD缓存的方案最终性能接近SSD的性能,使得我们可以用更少的成本得到较大的收益(高吞吐 / 低延迟)。



1、缓存技术介绍


  • 凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache,无论是CPU中的L1、L2、L3 Cache,还是RAID卡的Cache,无论是Facebook的Flashcache还是Intel的openCAS,其最终目的都是为了解决两种硬件设备之间的性能差异,提升性能,节省成本等。

  • 缓存在涉及带有硬盘阵列的数据存储系统时非常受欢迎。虽然HDD是顺序工作负载的良好选择,但它们对处理随机模式有物理限制。缓存与硬盘阵列配对,优化了随机请求的处理,并提高了总存储性能。它们非常受欢迎,因为它们比全闪存解决方案更实惠。



2、缓存工作原理


说缓存之前先介绍几个名词,“冷数据”和“热数据”,我们经常访问的热点数据称为热数据,热数据存放在高速缓存(SSD)中,不经常访问的数据称为冷数据,存放在主存储(HDD)中,业务请求热数据会更快延迟更低。 


脏数据&&刷脏:当业务进行更新,此时缓存中的数据和主存储中数据就不一致了,此时这个记录对应的缓存就叫脏数据。由缓存将数据写到主存储中的过程称为刷脏。

图片1.png

  • 对于传统的全HDD架构来说,所有的请求都是直接从RAM流到HDD中,而HDD虽然价格便宜,但是对于延迟和随机性能来说有天生的物理局限,不满足目前主流存储的需求。

  • SSD缓存架构,将容量较小的SSD设备和容量较大的HDD设备组成缓存架构,所有的请求都是从RAM中先写到SSD中,再由缓存的机制流到HDD中,这样对于业务来说,性能和延迟都有很好的改善,甚至接近SSD的性能。如下图:对随机性能和延迟进行了对比

    图片2.png



2.1 缓存如何加速读取操作


当读取请求到达存储器时,系统会在硬盘上找到所需的数据块并执行读取操作。如果重复对这些数据块的请求,系统会对SSD缓存进行临时副本,下一次读取操作将更快,因为它们是从缓存设备请求的,如图:

图片3.png



2.2 缓存如何加速写入操作


(1).写入策略


对于写入的操作有两种模式,Write Through和Write Back,简称WT和WB,WT模式会将数据进行镜像,分别写入缓存和主存储中,性能慢 / 延迟高,但是有更好的数据安全性。WB模式所有的数据先写入到缓存中,由于缓存设备速度快,写入操作和状态响应快速且延迟低。


(2).刷脏策略


WB模式写入缓存之后,那么如何对数据持久化呢,这就涉及缓存中的核心之一刷脏算法,这里介绍两个常见的刷脏算法,ACP(Active Cleaning Policy)积极的刷脏算法,时时刻刻都会进行刷脏,并且根据业务模型进行动态调控刷脏速率。第二种常见的是LRU算法,根据数据访问的频率给最近最少访问的数据先进行刷脏


(3).淘汰策略


由于前面提到,SSD缓存比主存储HDD小很多,这样势必会带来一个问题,当缓存写满时怎么办?这涉及缓存中另一个核心算法淘汰算法,优先选择对缓存中的哪些数据进行刷脏从而保证缓存的性能,下面介绍几个常见的淘汰算法。


  • FIFO(先入,先出)——首先进入缓存的块首先消失,不考虑请求频率。

  • LRU(最近使用的最少)——请求日期最古老的块首先离开缓存。

  • LFU(最不常用的)——如果块的请求比其他块少,则首先离开缓存。


(4).命中率


衡量缓存还有一个核心点是命中率,从程序设计的角度来讲,一个良好的计算机程序常常具有良好的“局部性”,也就是它们倾向于引用邻近于最近引用过的数据项的数据,或者最近引用过数据项本身。这种倾向性被称为局部性原理,是一个持久的概念,对硬件和软件系统的设计和性能有着极大的影响。那么正因为程序有“局部性”原理,对于缓存来说这些经常被访问的数据块被作为热点数据,访问热点数据的具有性能高延迟低的特点,是缓存技术的一个重要核心。所以,我们就需要有机制来防止热点数据被冲刷掉或者缓存被写满之后导致性能慢的问题。 


虽然缓存写满的之后还是能够正常使用,但是性能和延迟都会大打折扣如下图所示,那么是否可以通过一些机制来控制缓存的写入?

图片4.png

下面以Intel开源缓存方案openCAS举例,主要提供了两种机制进行控制: 


1、seq-cutoff机制

  • 当检测到连续的IO大小达到一个阈值的时候就不会写缓存设备,直接写入后端存储设备,这样一方面保证了热数据一方面还防止缓存盘被写满。如下图上层fio用1M顺序写,seq-cutoff配置成1024M之后发现所有请求的IO达到阈值1024M之后的请求都写入到core device中(core device:sdd 、cache device:sde) 

图片5.png


2、IO Class Configuration机制

  • seq-cutoff的机制可以避免cache被写满的场景,但是有一个局限,粒度太大。但凡连续写的场景中有一个小IO那么该写入cache device的IO就直接被写入core device中,从而并不能提升整体的性能,从而需要一个更细力度的筛选。

  • IO Class Configuration:可以根据IO大小进行分类,配置是否要进行缓存。此配置功能和seq-cutoff类似,但是做到了更细粒度的划分,可以灵活的根据业务场景进行选择。


3、常用术语表

图片6.png




总结


缓存技术允许您在处理混合工作负载时加快存储性能。对于硬盘阵列本身运行不够好的情况,这是一种简单且经济实惠的方法。在服务器任务和应用程序的多样性和复杂性时代,缓存越来越有吸引力。但仍然重要的是要记住,这项技术对于业务场景有局限性,它不可能是解决所有存储性能问题的通用解决方案。




让数据库基础设施更简单
加速企业数字化转型建设及落地
立即咨询

沃趣科技

中立的企业级数据库云
十年磨一剑十年来始终如一的专注数据库生态领域
夯实技术底蕴打造最适合时代的数据库基础设施
业绩持续领先目前已累计服务超3000家企业客户

留言咨询

完善信息,我们第一时间跟您联系
姓名
手机
公司
所在地区
咨询问题