对象存储有必要支持快照吗?
对象存储由于成本低,扩展性强,一直是备份目标存储的首选。但是,随着对象存储本身技术的进步,对象存储的功能越来越强大,性能也越来越高,加上S3的云原生特性,对象存储逐渐进入关键业务,高价值数据的备份是强需求。XSKY星辰天合的对象存储在众多金融、证券、医疗的行业中的关键场景落地,越来越感受到关键业务对对象存储的数据备份的需求。
但海量非结构化数据的备份恢复都是业界难题,特别在小文件场景。在对象存储发展这么多年后,近期业界开始出现了一些针对对象存储数据的备份方案,我们选取主流对象产品的方案一一分析,再看看XSKY星辰天合的桶快照专利技术有哪些优势。
常见的对象存储数据备份方案实现和挑战
AWS S3于2010年发布了对象存储多版本功能,旨在进行对象数据的保护,降低业务逻辑错误对对象存储数据的影响。
与常见的对象上传即覆盖原有数据不同,开启了多版本控制的存储桶,将不会删除或者覆盖已存储的对象数据,而是产生新的版本。对于上传则将新写入的数据加上新版本后作为对象的最新数据,对于删除动作,则会增加delete marker,用于在对象访问时应答404。对于历史数据,则支持通过多版本管理的API进行独立的访问或者删除。
通过这一系列的服务端逻辑和API,对象存储的多版本功能可以满足基本的对象数据保护。对象多版本由于需要保存所有的版本,对应关键业务来说很占空间(因为关键业务一般是生产业务,会经常修改数据,从而产生很多版本),很多企业都不太乐意打开多版本。另外,对象多版本使用起来很不方便,很难备份和恢复某一个版本。如果不需要打开多版本功能,又能像传统存储快照一样可以进行简单的备份和恢复数据就完美了。
MinIO
Versioning allows a user to retain multiple variants of an object in the same bucket and provides a mechanism to preserve, retrieve and restore every version of every object stored in a bucket,eliminating the requirement for snapshots
MinIO通过兼容AWS S3 多版本功能,将多版本认为是对象的一个快照,可以实现对象粒度的快照和数据保护功能。
但当业务希望将整个桶的数据恢复到某一时间点时,基于多版本是无法实现的。
同时多版本仅能将数据保存在同一个桶内,并没有快捷的方式实现数据的异地、异质灾备。如果借助第三方组件或自行开发,则需要定期将对象的历史版本导出存储到异地或其他存储介质中。
在发布S3多版本功能11年后,AWS于2021年发布了AWS Backup for Amazon S3的预览版,并于2022年2月正式开放。
AWS Backup基于对象多版本对S3数据进行带外保护,通过对存储桶开启多版本,定期或手动执行备份任务的方式,将对象的历史数据导出为桶的一次备份,可理解为针对存储桶的一次快照动作。但AWS的方案也存在比较明显的问题:
源桶必须开启多版本功能,才能进行数据保护
当进行恢复时,仅支持将对象恢复到该备份的最新版本,无法恢复两次备份任务之间产生的历史版本
AWS Backup for Amazon S3为S3的带外实现,需要进行对象历史版本数据的复制和归档,因此备份效率不高
Blackblaze B2
对于实现了对象存储快照的产品来说,Blackblaze的B2是比较有特色的一个。这与B2的产品定位相关,他更像是服务个人用户的简化版对象存储产品。
B2的快照将源存储桶的数据导出后打包为zip,再上传到目标存储桶中,支持对整个快照zip包的下载或者U盘邮寄功能。因为是面向个人用户的功能,所以存在着比较明显的规格限制,如:快照大小最大仅支持10TB,快照备份速度为1GB/min,并且同样无法记录两次快照周期间产生的变更。
这样的产品和功能的定位,基本上无法满足企业生产业务对数据一致性、功能可用性的要求。
XSKY星辰天合的桶快照备份相关发明专利
根据IDC的数据,XSKY星辰天合的对象存储多年以来一直领先国内市场。基于对存储生态的理解和与市场众多用户的未来需求结合,XSKY星辰天合很早就研究对象存储的桶快照备份技术,在2019年申请了两项相关的国家发明专利,并在2021年取得专利授权(专利号:ZL2019107133.8和ZL201911229166.X,详见附录)。
桶快照相关专利技术利用对象多版本技术栈实现了对象快照功能,但不与多版本功能冲突,并且支持桶级一致性快照,即针对桶内所有对象的状态一次性打上快照,而不是单个对象粒度的快照。
相关专利技术可以与业务结合,通过桶级快照的功能,实现数据和业务状态的一键还原,支持高效快照回滚,通过变更快照链的方式,高效的实现整桶数据的回滚。
这样也避免了多版本带来的空间浪费,对于通过多版本来进行数据保护的方案,每次对象的修改都会产生新的版本和存储空间的需求,而XSKY星辰天合的快照方案不依赖于多版本的实现,大幅减少空间浪费。
快照搜索链路
图:快照搜索链路概念图
快照搜索链路是为了快速找到对象而生成的一个数据结构。由于快照存在回滚,快照间的依赖关系类似于一棵多叉树,从任意叶子节点到根节点的路径一定唯一。由于任意链路都是独立的,所以根据快照搜索链路,我们很容易实现指定链路读取某个对象或列举桶内所有对象。
快照差异和增量备份
XSKY星辰天合的桶快照专利技术提供了快照差异的接口,可对比在同一链路上任意的两个快照内的对象差异,通过此结果可进行增量备份,实现数据的异地、异质灾备。
图: 快照差异原理概念图
在原理实现上,XSKY星辰天合并没有采用根据快照列举桶然后针对结果做减法的简单方式,因为这样效率很低。如上图所示,假如需要增量备份T1到T2之间的数据,需要比对快照2和快照3的对象差异。显而易见,快照1内的数据都是共享的,肯定不会在差异结果内,当快照1内数据量很庞大时,会做很多无用功。为了提升效率,XEOS复用了内部的对象变更日志模块(此模块记录了每次对象的创建,修改,删除等变更),获取某个时间段内的变更日志,从而过滤掉绝大部分的未修改对象。
快照回滚是指能回退到任意一个已存快照的状态。该专利技术的快照回滚操作是秒级的,它通过修改快照搜索链路,快速切换查找路径,从而达到秒级回滚。
同时XSKY星辰天合的快照方案支持与多版本同时结合,即快照回滚时可以还原所有历史的对象版本,远优于AWS Backup只能恢复最新版本的方案。
写时拷贝(Copy-On-Write)和写时重定向(Redirect-On-Write)
COW(写时拷贝)是指系统会跟踪源卷的数据变化(即源卷的写入操作),一旦源卷数据块发生写入操作,则先将源卷数据读出并写入快照卷,然后用新数据覆盖原始数据。系统时刻保留一份完整的最新的对象副本,当接收到写IO时,会先将原来的数据内容复制一份放入快照副本中,然后再修改最新副本,同一个对象的第二次写IO直接修改最新版本。也就意味着每个对象的第一个写操作会带来三次IO,一次读,两次写,对于写密集型场景,带来的性能损耗会非常大。
ROW(写时重定向)是指系统创建一个和源卷对应的快照空间和索引日志,在创建ROW快照后,源卷会保持初始状态不变,如源卷中的数据需要修改,新数据会被写入对应的快照空间中,同时该数据位的指针会重定向到新的写入存储空间地址位,这样当读这个数据时会按指针位置找到新更新的数据。优势在于不会降低源数据卷的写性能。源数据卷创建快照后的写操作会被重定向,所有的写 I/O 都被重定向到新卷中,而所有快照卷数据(旧数据)均保留在只读的源数据卷中。因此更新源数据只需要一个写操作。
XSKY星辰天合的专利技术使用ROW的方式,通过快照链的方式减少写IO,从而减少性能损耗。
桶快照技术应用展望
XSKY星辰天合的专利桶快照技术即将在XEOS V6下一代对象中产品化,第一期专注于本地数据备份和快照增量备份,第二期会增加快照回滚功能。同时,XEOS V6也提供了开放API,便于和各备份厂商对接,我们也将基于XEOS快照推出原生对象存储数据备份方案。
有了XEOS对象的桶快照技术,我们的用户将无需打开对象多版本,就可以像传统存储快照一样,非常简单的实现海量小文件数据的保护了。完善的对象数据保护技术,必将扩大对象存储的适用范围,对象存储也必将成为企业关键业务存储的有力竞争者。