缓存,是利用局部性原理,将高频操作的数据存放到访问速度更快的介质中,后续读取相同数据时无需再访问慢速设备,从而可以显著降低操作延时,提高读写速度。局部性原理有两种:
计算机存储体系中的缓存有多种形态,包括硬件实现(如寄存器、CPU高速缓存)、软件实现(如文件系统的Page Cache)。离CPU越近的存储缓存,访问速度越快,每单位容量的成本越高,因此容量也越小。
存储资源盘活系统的缓存:将内存作为底层磁盘的缓存,利用时间局部性原理,将最近读写的数据存放到内存中。对于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模式,并启用卷的高可用特性,即可实现多节点之间的缓存同步,避免单节点故障导致的缓存数据丢失。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。