火星舱写入队列缓存:I/O级CDP与性能可否兼得?

信息伴随互联网的快速发展,无论是企业还是个人的数据量都呈现几何增长,数据的价值也越来越凸显。随着备份的数据量越来越大、数据类型越来越复杂,在这个大背景下,CDP(Continuous Data Protection,持续数据保护)技术开始诞生并刮起了一股数据保护的热潮。与传统的备份与恢复方式不同,CDP技术通过记录每一个IO变化,将数据所有变化以实时、“录像”的方式进行保存,这种方式对用户最有价值的部分就是其快速恢复性,当灾难发生之后,通过CDP的I/O记录回滚技术,可以回滚到过去任意指定时间点的数据状态,而且恢复速度极为快速,远非传统的磁带备份或者VTL所能比拟。

这个时候人们可能产生一个疑问,如果要实现任意时间点的历史数据回滚支持,为每个IO变化进行记录,IT系统硬件软件是否能满足其性能,或者说起存储系统性能是否受到影响?本篇文章以火星舱为例,说明火星舱写入队列缓冲是如何解决IO级CDP对系统性能影响的。

我们曾经介绍过,火星舱CDP(持续数据保护)的一大优势特色是数据块级I/O记录技术。也就是对镜像写入到火星舱中的数据,为每个I/O打上时间戳,在需要的时候可以回滚到任意历史数据状态,甚至1毫秒(ms)内的多次写操作都会被标记下来。

火星舱CDP无限IO记录技术

熟悉存储的朋友可能会问,这样的I/O级CDP是否会对性能产生不利影响呢?从常理来看,可回滚的颗粒精细度,和应用存储访问性能之间是鱼与熊掌难以兼顾。那火星舱是如何解决这一问题的?

首先,火星舱CDP可选分钟级快照,以及I/O记录两种保护方式。对于回滚精度和一致性要求相对不高的用户,可以选择快照方式以降低处理开销。

至于I/O记录方面,火星舱专门打造了被称为“多级缓存队列”的技术来优化性能。

SSD缓存加快读写速度

把固态硬盘当作读/写缓存,能够为 I/O 密集型应用优化,从而提升存储系统的性能。可以自动将“热数据”工作负载分担到SSD上,如随机读写,从而获得更高的性能。

首先,每一台火星舱(不只是CDP)都支持SSD读/写缓存功能,针对同步数据写入可以先写到高速的SSD日志缓存中,再选择时机刷新至硬盘。该选项可对CDP等I/O密集型应用的性能带来帮助。

为了进一步应对业务数据的集中突发写入,火星舱CDP在SSD写缓存之上又增加了一层——那就是内存缓冲。我们知道传统磁盘阵列都是有DRAM写缓存来改善性能的,而且这个容量随着存储系统档次的提高而增加。内存在写入性能特别是延时表现方面是闪存无法相比的。火星舱CDP配置的32GB-256GB甚至更大的内存,在这里派上了用武之地。

火星舱CDP数据复制流程

火星舱采用基于数据块的CDP功能,直接运行在逻辑卷管理器层面上,提供了系统内核 I/O 级别的保护。当数据块写入生产存储设备时,CDP分流器实时捕获数据并将其同时写入到火星舱中。

对于DRAM存储介质的断电易失性,火星高科持有这样的观点:首先火星舱在这里是作为后备存储设备出现;其次,CDP设备应对的渐进式数据破坏不包括停电,即使停电火星舱丢失的也只是缓存中有限的临时写入数据;在有更高要求的场合,可以选配UPS。

Kernel Mode(内核态)vs. User Mode(用户态)

笔者不是程序设计方面的专家,这里简单谈下。代码在操作系统的内核态执行,不会像基于用户态那样要做反复的地址空间映射,因此效率会高出很多。

但是有许多厂商的CDP产品,其代码都是执行在用户态的。这是由于Linux的GPL开源协议,如果编程时对内核模块做了改动,就必须公开所有源代码。火星舱存储及CDP能做到内核态,且拥有完全自主知识产权的原因是,其底层操作系统基于CDDL开源协议的Unix定制开发而来。这样就能更高效地优化数据读写性能。

可以看出通过对SSD、内存缓存的合理应用以及操作系统内核态执行,火星舱CDP(持续数据保护)数据块级I/O记录技术,在最大限度保护用户数据的同时,还充分考虑优化了应用存储性能。