解析存储资源盘活系统的三种缓存方式

缓存,是利用局部性原理,将高频操作的数据存放到访问速度更快的介质中,后续读取相同数据时无需再访问慢速设备,从而可以显著降低操作延时,提高读写速度。局部性原理有两种:

空间局部性:一个位置的数据被访问后,在不久的将来该位置附近的数据很有可能也被访问。

时间局部性:一个位置的数据被访问后,在不久的将来该部分数据很有可能被多次访问。

不同存储介质的访问速度:

计算机存储体系中的缓存有多种形态,包括硬件实现(如寄存器、CPU高速缓存)、软件实现(如文件系统的Page Cache)。离CPU越近的存储缓存,访问速度越快,每单位容量的成本越高,因此容量也越小。

寄存器:寄存器是 CPU 内部用来暂时存放指令、数据、地址以及其他运行时所需信息的部件。

CPU高速缓存: L1/L2/L3 Cache作为高速缓存,保存最近被使用的指令和数据。

Page Cache: 磁盘中的数据必须先被读到内存中才能被CPU访问,为了避免每次读写文件时都访问磁盘,Linux文件系统使用Page Cache机制对文件中的数据进行缓存。

 

存储资源盘活系统的缓存:将内存作为底层磁盘的缓存,利用时间局部性原理,将最近读写的数据存放到内存中。对于HA卷,利用强一致性算法,实现多个节点的缓存同步,避免单节点故障后导致缓存数据丢失。本文重点介绍缓存的写模式。

写模式决定了收到写请求后,缓存和底层存储介质中数据的更新方式。以存储资源盘活系统HBlock为例,支持三种缓存模式:

缓存模式1:Write Back

写请求的数据更新到写缓存后,即可向客户端返回成功。每次写请求只需要更新内存,完成写操作的延时很低,从而可以实现较高的写速度。缓存中的数据由后台线程同步到底层磁盘,触发同步的时机有两种:数据在缓存中的存放时间超过阈值、缓存中待同步的数据量超过阈值。后台线程在同步之前,会对缓存中数据进行合并,将客户端的小IO转换为对底层磁盘的大IO,避免以低效的方式访问磁盘,进一步提升了客户端的写性能。

这种模式的缺点是缓存中存在未落盘的数据时,若节点发生断电、宕机等故障,会导致缓存中的数据丢失。

缓存模式2:Write Through

写请求的数据更新到写缓存后,还需要等待数据被成功写入到底层磁盘后,才能向客户端返回成功。由于保证了缓存和底层磁盘中数据的一致性,因此不存在节点发生故障后数据丢失的问题。后续的读操作可以直接从缓存获取到数据,因此能为客户端提供较高的读性能。

这种模式的缺点是每次写请求的耗时较长,因此不适合于频繁写入的应用场景。

缓存模式3:Write Around

写请求的数据直接写入到底层磁盘后,向客户端返回成功。数据不再更新到缓存中,因此可以减少内存占用,避免与系统中其他服务争抢宝贵的内存资源。与Write Through模式类似,每次写请求的数据均落盘,不存在节点发生故障后数据丢失的问题。

与Write Through模式相比,不再将数据存放到缓存,因此后续若收到读请求则需要访问底层磁盘,读操作的延时会变长。这种模式适合于对数据安全性要求较高、读操作较少的应用场景。

我们可以将三种缓存模式总结成下表:

Write Back

Write Through

Write Around

写性能

读性能

安全性

占用内存

综上对比,Write Back模式适用于对读写性能要求较高,但对数据的安全性要求相对较低的场景。Write Through模式适用于对数据的安全性要求较高,写少读多的场景。Write Around模式适用于对数据的安全性要求较高,且写入的数据极少会被读取的场景。为了同时得到较高的读写性能与较好的数据安全性,可以使用Write Back模式,并启用卷的高可用特性,即可实现多节点之间的缓存同步,避免单节点故障导致的缓存数据丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值