基于对象存储桶的快照方法、装置和系统转让专利

申请号 : CN201910713323.8

文献号 : CN110515543B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张天旭鲁加福王豪迈胥昕

申请人 : 星辰天合(北京)数据科技有限公司

摘要 :

本发明公开了一种基于对象存储桶的快照方法、装置和系统。其中,该方法包括:在接收待写入的对象后,确定目标快照,其中,目标快照为最后生成的快照;为对象添加目标快照的版本信息,得到携带有版本信息的对象;将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照。本发明解决了现有技术中的对象存储领域无高性能快照方案的技术问题。

权利要求 :

1.一种基于对象存储桶的快照方法,其特征在于,所述快照包括:元数据和对象数据,其中,所述元数据用于记录快照之间的链接关系,所述链接关系包括子快照对父快照的依赖关系,所述对象数据用于记录属于所述快照的对象,所述基于对象存储桶的快照方法包括:在接收待写入的对象后,确定目标快照,其中,所述目标快照为最后生成的快照;

为所述对象添加所述目标快照的版本信息,得到携带有版本信息的对象;

将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照;

将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,包括:如果所述目标快照中不存在所述对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据;如果所述目标快照中已存在所述对象对应的对象数据,使用携带有所述版本信息的对象替换所述对象存储系统中已存在的所述对象,并生成所述对象的元数据;

所述方法还包括:接收回滚指令,其中,所述回滚指令包括待回滚的目的快照的标识;

根据所述回滚指令创建回滚快照,并确定所述回滚快照为所述目的快照的子快照;

在根据所述回滚指令创建新的快照,并确定创建的所述新的快照为所述目的快照的子快照之后,所述方法还包括:接收用于创建快照的创建指令;检测所述回滚快照中是否有对象;如果所述回滚快照中无对象,则删除所述回滚快照,并以最近创建的非回滚快照为父快照创建子快照;如果所述回滚快照中有对象,则以所述回滚快照为父快照创建子快照。

2.根据权利要求1所述的方法,其特征在于,所述方法还包括:

接收第一删除指令,并根据所述第一删除指令确定待删除的快照,其中,所述第一删除指令中包括待删除快照的标识信息;

判断所述待删除的快照是否被其他快照引用;

如果所述待删除的快照被其他快照引用,则将所述待删除快照的元数据标记为删除;

如果所述待删除的快照未被其他快照引用,则删除所述待删除快照的元数据和对象数据。

3.根据权利要求2所述的方法,其特征在在于,如果所述待删除的快照被其他快照引用,则在将所述待删除快照的元数据标记为删除之后,所述方法还包括:将所述待删除快照的子快照的父快照更改为所述待删除快照的父快照。

4.根据权利要求1所述的方法,其特征在于,所述方法还包括:

接收第二删除指令,其中,所述第二删除指令用于删除属于任意快照的待删除对象;

判断所述待删除对象所属的原快照是否被其他快照所引用;

如果所述原快照被其他快照所引用,则在所述待删除对象的不可见对象列表中添加所述原快照;

如果所述原快照未被其他快照所引用,则删除所述原快照中待删除对象的对象数据。

5.根据权利要求1所述的方法,其特征在于,所述方法还包括:

检测具有相同父快照的两个子快照的创建时间;

如果所述两个子快照的创建时间小于预设时间阈值,则对所述两个子快照进行合并,并将所述两个子快照标记为删除,其中,断开其中任意一个子快照与所述父快照的链接关系,并将断开与所述父快照的链接关系的子快照连接至另一个子快照。

6.一种基于对象存储桶的快照装置,其特征在于,所述快照包括:元数据和对象数据,其中,所述元数据用于记录快照之间的链接关系,所述链接关系包括子快照对父快照的依赖关系,所述对象数据用于记录属于所述快照的对象,所述基于对象存储桶的快照装置包括:确定模块,用于在接收待写入的对象后,确定目标快照,其中,所述目标快照为最后生成的快照;

添加模块,用于为所述对象添加所述目标快照的版本信息,得到携带有版本信息的对象;

写入模块,用于将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照;

将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,包括:如果所述目标快照中不存在所述对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据;如果所述目标快照中已存在所述对象对应的对象数据,使用携带有所述版本信息的对象替换所述对象存储系统中已存在的所述对象,并生成所述对象的元数据;

还包括:接收回滚指令,其中,所述回滚指令包括待回滚的目的快照的标识;根据所述回滚指令创建回滚快照,并确定所述回滚快照为所述目的快照的子快照;

在根据所述回滚指令创建新的快照,并确定创建的所述新的快照为所述目的快照的子快照之后,还包括:接收用于创建快照的创建指令;检测所述回滚快照中是否有对象;如果所述回滚快照中无对象,则删除所述回滚快照,并以最近创建的非回滚快照为父快照创建子快照;如果所述回滚快照中有对象,则以所述回滚快照为父快照创建子快照。

7.一种基于对象存储桶的快照系统,其特征在于,所述系统包括用于存储对象的对象存储系统和至少一个快照,所述至少一个快照包括:元数据,用于记录快照之间的链接关系,所述链接关系包括子快照对父快照的依赖关系;

对象数据,用于记录属于所述快照的对象;

其中,在接收待写入的对象后,确定目标快照,其中,所述目标快照为最后生成的快照;

为所述对象添加所述目标快照的版本信息,得到携带有版本信息的对象;

将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照;

将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,包括:如果所述目标快照中不存在所述对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据;如果所述目标快照中已存在所述对象对应的对象数据,使用携带有所述版本信息的对象替换所述对象存储系统中已存在的所述对象,并生成所述对象的元数据;

还包括:接收回滚指令,其中,所述回滚指令包括待回滚的目的快照的标识;根据所述回滚指令创建回滚快照,并确定所述回滚快照为所述目的快照的子快照;

在根据所述回滚指令创建新的快照,并确定创建的所述新的快照为所述目的快照的子快照之后,还包括:接收用于创建快照的创建指令;检测所述回滚快照中是否有对象;如果所述回滚快照中无对象,则删除所述回滚快照,并以最近创建的非回滚快照为父快照创建子快照;如果所述回滚快照中有对象,则以所述回滚快照为父快照创建子快照。

8.根据权利要求7所述的系统,其特征在于,所述元数据包括:父快照标识、子快照标识和已删除的父快照的标识。

9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至5中任意一项所述的基于对象存储桶的快照方法。

10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至5中任意一项所述的基于对象存储桶的快照方法。

说明书 :

基于对象存储桶的快照方法、装置和系统

技术领域

[0001] 本发明涉及数据存储领域,具体而言,涉及一种基于对象存储桶的快照方法、装置和系统。

背景技术

[0002] 快照用于指关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。图1a是现有技术中快照技术的示意图,结合图1所示,沿着时间轴的方向,简要的快照操作可以包括:数据写入、创建快照T1、修改数据,回滚至T1等。
[0003] 目前快照的实现方式主要包括如下两种,一种是写时拷贝,即为COW(Copy On Write),二是写重定向,即为ROW(Redirect On Write)。图1b是COW的示意图,结合图1b所示,创建快照后,在写操作过程中,如果源卷的数据发生了变化,那么快照系统会先将原始数据拷贝到快照卷上对应的数据块中(见图1b的步骤1),然后再对源卷进行改写(见图1b的步骤2)。在该操作过程,至少造成一个2倍的写操作写放大。在读操作过程中,如果需要读取的数据在快照中,则直接从快照中读取(见图1b的步骤3)。图1c是ROW读取数据的示意图,图1d是ROW删除数据的示意图,集合图1c和1d所示,在ROW模型中,增量文件是写入到快照内的。在读取时从快照读取增量部分、源读取未修改部分,由这两个区域的数据段(卷)拼成完整目标数据。
[0004] 在ROW模型的删除过程中,由于快照内含有增量信息,且该增量数据的具有唯一性,故删除快照时,需要进行数据回填(如图1d所示,将快照中的数据B回填至源卷中),造成二次写操作。
[0005] 由此可见,无论是写时拷贝(COW)还是写重定向(ROW)都存在各自劣势,但均无法避免进行拷贝,如COW方式在创建快照时要进行数据拷贝,ROW方式在删除时要进行数据拷贝,因此使得写入速度、读取速度或删除速度均较低,因此导致使得快照存在性能低下。
[0006] 针对现有技术中的快照方案均涉及到数据迁移,使得写入速度、读取速度或删除速度均较低,导致使得快照存在性能低下的问题,目前尚未提出有效的解决方案。

发明内容

[0007] 本发明实施例提供了一种基于对象存储桶的快照方法、装置和系统,以至少解决现有技术中的对象存储领域无高性能快照方案的技术问题。
[0008] 根据本发明实施例的一个方面,提供了一种基于对象存储桶的快照方法,快照包括:元数据和对象数据,其中,元数据用于记录快照之间的链接关系,链接关系包括子快照对父快照的依赖关系,对象数据用于记录属于快照的对象,基于对象存储桶的快照方法包括:在接收待写入的对象后,确定目标快照,其中,目标快照为最后生成的快照;为对象添加目标快照的版本信息,得到携带有版本信息的对象;将携带有版本信息的对象写入对象存储系统,并生成对象的元数据,其中,对象的元数据指示对象数据属于目标快照。
[0009] 进一步地,如果目标快照中不存在对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成对象的元数据;如果目标快照中已存在对象对应的对象数据,使用携带有版本信息的对象替换对象存储系统中已存在的对象,并生成对象的元数据。
[0010] 进一步地,上述方法还包括:接收第一删除指令,并根据第一删除指令确定待删除的快照,其中,第一删除指令中包括待删除快照的标识信息;判断待删除的快照是否被其他快照引用;如果待删除的快照被其他快照引用,则删除待删除快照的元数据,保留待删除快照的对象数据;如果待删除的快照被其他快照引用,则将待删除快照的元数据标记为删除。
[0011] 进一步地,如果待删除的快照被其他快照引用,则在将待删除快照的元数据标记为删除之后,将待删除快照的子快照的父快照更改为待删除快照的父快照。
[0012] 进一步地,上述方法还包括:接收第二删除指令,其中,第二删除指令用于删除属于任意快照的待删除对象;判断待删除对象所属的原快照是否被其他快照所引用;如果原快照被其他快照所引用,则在待删除对象的不可见对象列表中添加原快照;如果原快照未被其他快照所引用,则删除原快照中待删除对象的对象数据。
[0013] 进一步地,上述方法还包括:接收回滚指令,其中,回滚指令包括待回滚的目的快照的标识;根据回滚指令创建回滚快照,并确定回滚快照为目的快照的子快照。
[0014] 进一步地,在根据回滚指令创建新的快照,并确定创建的新的快照为目的快照的子快照之后,接收用于创建快照的创建指令;检测回滚快照中是否有对象;如果回滚快照中无对象,则删除回滚快照,并以最近创建的非回滚快照为父快照创建子快照;如果回滚快照中有对象,则以回滚快照为父快照创建子快照。
[0015] 进一步地,上述方法还包括:检测具有相同父快照的两个子快照的创建时间;如果两个子快照的创建时间小于预设时间阈值,则对两个子快照进行合并,并将两个子快照标记为删除,其中,断开其中任意一个子快照与父快照的链接关系,并将断开与父快照的链接关系的子快照连接至另一个子快照
[0016] 根据本发明实施例的一个方面,提供了一种基于对象存储桶的快照装置,快照包括:元数据和对象数据,其中,元数据用于记录快照之间的链接关系,链接关系包括子快照对父快照的依赖关系,对象数据用于记录属于快照的对象,基于对象存储桶的快照装置包括:确定模块,用于在接收待写入的对象后,确定目标快照,其中,目标快照为最后生成的快照;添加模块,用于为对象添加目标快照的版本信息,得到携带有版本信息的对象;写入模块,用于将携带有版本信息的对象写入对象存储系统,并生成对象的元数据,其中,对象的元数据指示对象数据属于目标快照。
[0017] 根据本发明实施例的一个方面,提供了一种基于对象存储桶的快照系统,系统包括用于存储对象的对象存储系统和至少一个快照,至少一个快照包括:元数据,用于记录快照之间的链接关系,链接关系包括子快照对父快照的依赖关系;对象数据,用于记录属于快照的对象。
[0018] 进一步地,上述元数据包括:父快照标识、子快照标识和已删除的父快照的标识。
[0019] 根据本发明实施例的一个方面,提供了一种存储介质,存储介质包括存储的程序,其中,在程序运行时控制存储介质所在设备执行上述的基于对象存储桶的快照方法。
[0020] 根据本发明实施例的一个方面,提供了一种处理器,处理器用于运行程序,其中,程序运行时执行权利上述的基于对象存储桶的快照方法。
[0021] 本发明实施例在ROW的基础上,对快照下所有上传对象的对象名增加版本信息,来进行对象数据与快照的关联,从而使得创建快照后所有的操作均会在一个携带有版本信息的对象上进行。也就是说,每一个快照下,所有的数据都是独立的一份,都关联至该快照版本。上述方案还对快照信息增加父快照和子快照的数据结构,从而使得在读取某个快照信息时,根据快照之间的链接关系进行拼接穿线,即可从中提取链路中每个最新的对象,实现在对象存储领域的零拷贝桶快照能力。通过该能力,使得系统的空间利用最大化,无任何真实数据拷贝,同样的数据只会存储一份,且数据永远不需要来回迁移,进而解决了现有技术中的对象存储领域无高性能快照方案的技术问题。

附图说明

[0022] 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0023] 图1a是现有技术中快照技术的示意图;
[0024] 图1b是COW的示意图;
[0025] 图1c是ROW读取数据的示意图;
[0026] 图1d是ROW删除数据的示意图;
[0027] 图2是根据本发明实施例的一种基于对象存储桶的快照方法的流程图;
[0028] 图3是根据本发明实施例的一种存储结构的示意图;
[0029] 图4是根据本发明实施例的一种删除快照的示意图;
[0030] 图5是根据本发明实施例的一种删除对象的示意图;
[0031] 图6是根据本发明实施例的一种子快照计数不为零的示意图;
[0032] 图7是根据本发明实施例的一种对象OBJ的可视状态的示意图;
[0033] 图8是根据本发明实施例的一种树状关系的示意图;
[0034] 图9是根据本发明实施例的一种创建快照并上传对象的示意图;
[0035] 图10是在图9的基础上回滚至T2的示意图;
[0036] 图11是在回滚快照中上传对象数据的示意图;
[0037] 图12是根据本发明实施例的一种在回滚快照后创建快照的示意图;
[0038] 图13是根据本发明实施例的另一种在回滚快照后创建快照的示意图;
[0039] 图14是根据本发明实施例第一种对象列表的示意图;
[0040] 图15是根据本发明实施例第一种基于对象存储桶的快照装置的示意图。
[0041] 下面,为了便于理解,对本申请出现的专业术语进行如下解释说明:
[0042] 存储快照:关于指定数据集和的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照可以是其所表示的数据的一个副本,也可以是数据的一个复制品。
[0043] 桶快照:Bucket Snapshot,桶的目的在于对对象存储系统中的对象进行逻辑隔离,桶快照是用于对目标桶某一时刻的全部数据及指标集合生成的一个完全可用的拷贝,通过该拷贝可以恢复目标桶在某个时间点(快照创建的时间点)相应全部数据的能力。
[0044] 快照桶:Snapshot Bucket,启用桶快照功能的对象存储桶(容器)。
[0045] 快照回滚:Snapshot Rollback,快照回滚常应用于数据异常、错误操作和业务需求等需要数据回退的场景。回滚后的全部元数据和对象数据将更新为快照创建时间点的状态,该操组的目的是提供数据回溯的能力。在该状态下可以对任意对象实施任意上传、删除等操作且可以创建新快照保存当前状态并在此回滚至任意快照版本。
[0046] 可视:Visual,对在快照桶下创建的任意对象,用是否可视来表征该对象能否在某一快照下进行展示。该可视状态表征对象在某个快照状态下是否存在及如何存在。
[0047] 对象版本:Object Version,对于向桶中上传的对象,用不同的版本来区分在不同时期创建/更新的同名对象。每一个快照下对象的上传都会获取到一个匹配快照版本的对象版本。对象版本通过前缀/中缀/后缀来区分。在未创建新快照下,对象更新操作将使用含有同样版本标识的新对象进行更新而不是产生一个新版本的对象。换言之,每一个快照下的全部对象都会有一个专属版本,如T1_对象A、T2_对象A、T3_对象A。
[0048] 只读快照:read-only Snapshot,逻辑回退到某一目标快照版本下。该状态下,下载对象得到的将是目标快照版本的对象内容。
[0049] 桶快照对象列表:Bucket Snapshot Object List,获取目标快照下可视的对象清单。

具体实施方式

[0050] 为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0051] 需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0052] 实施例1
[0053] 根据本发明实施例,提供了一种基于对象存储桶的快照方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0054] 图2是根据本发明实施例的一种基于对象存储桶的快照方法的流程图,所述快照包括:元数据和对象数据,其中,元数据用于记录快照之间的链接关系,链接关系包括子快照对父快照的依赖关系,对象数据用于记录属于快照的对象,如图2所示,该方法包括如下步骤:
[0055] 步骤S202,在接收待写入的对象后,确定目标快照,其中,每个快照作为上一个快照的子快照创建,目标快照为最后生成的快照。
[0056] 首先对本申请的上述存储结构进行说明。在本申请的存储结构中,快照即为桶快照,快照根据生成的时间,构成具有父子关系的链状结构。图3是根据本发明实施例的一种存储结构的示意图,结合图3所示,T1、T2、T3、T4按照时间依次生成,因此其构成的链状关系为T1-->T2-->T3-->T4。快照中除了对象数据之外,还包括有用于记载链接关系的元数据,结合图3所示,该元数据可以以指针的形式存在,包括如下信息:父快照、子快照以及已删除附件快照。由于完整快照由元数据的指针拼接而成,因此每个快照只保存快照下变更的部分,从而实现了元数据的低冗余。
[0057] 每个快照的上一个快照为在每个快照之前生成的快照,结合图3所示,T2的上一个快照为T1,T3的上一个快照为T2,以此类推。
[0058] 在上述的存储结构中,接收到待写入的对象后,确定最后生成的快照为目标快照,如图3所示,当前的目标快照即为快照T5,若在快照T5生成前,快照T4即为目标快照。
[0059] 步骤S104,为对象添加目标快照的版本信息,得到携带有版本信息的对象。
[0060] 具体的,上述目标快照的版本信息可以为目标快照的快照标识。仍结合图3所示,“T1”、“T2”、“T3”、“T4”即为快照的标识。
[0061] 为对象添加版本信息,可以是在对象的名称上添加前缀、后缀或中缀,也可以是在不更改对象名称的情况下,为对象添加属性信息,该属性信息即用于表示目标快照的版本信息。
[0062] 在一种可选的实施例中,仍结合图3所示,在快照T1中上传对象OBJ时,可以在该对象上添加前缀T1,得到对象T1-OBJ。同样的,将对象OBJ上传至快照T2时,在对象上添加前缀T2,得到对象T2-OBJ;将对象OBJ上传至快照T3时,在对象上添加前缀T3,得到对象T3-OBJ。上述T1、T2以及T3即为版本信息,T1-OBJ、T2-OBJ以及T3-OBJ即为携带有版本信息的对象。
[0063] 步骤S106,将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照。
[0064] 仍在上述图3的实施例中,在快照T1中上传对象OBJ时,可以在该对象上添加前缀T1,得到对象T1-OBJ,再将对象T1-OBJ上传至对象存储系统,并生成T1-OBJ的元数据,T1-OBJ的元数据用于指示T1-OBJ属于快照T1。同样的,将对象OBJ上传至快照T2时,在对象上添加前缀T2,得到对象T2-OBJ,再将对象T2-OBJ上传至对象存储系统,并生成T2-OBJ的元数据,T2-OBJ的元数据用于指示T2-OBJ属于快照T2;将对象OBJ上传至快照T3时,在对象上添加前缀T3,得到对象T3-OBJ,再将对象T3-OBJ上传至对象存储系统,并生成T3-OBJ的元数据,T3-OBJ的元数据用于指示T3-OBJ属于快照T3。上述T1、T2以及T3即为版本信息,T1-OBJ、T2-OBJ以及T3-OBJ即为携带有版本信息的对象。
[0065] 通过上述在快照中上传对象的方式,使得每个快照下每一个对象只会产生一个版本,最后一个快照中存储的是对象的最新版本,而在多个快照下,同一个对象可能会产生多个版本的数据。在这样的存储结构下,在读取对象时,只需按照快照之间的链接关系从后向前查找。例如,在链接关系T1-->T2-->T3-->T4中查找对象OBJ,其中T4中不包括对象OBJ,因此从T4的父快照T3中查找,T3中包括T3-OBJ,因此,从T3中获取T3-OBJ即可得到需要查找的数据。
[0066] 本申请上述实施例在ROW的基础上,对快照下所有上传对象的对象名增加版本信息,来进行对象数据与快照的关联,从而使得创建快照后所有的操作均会在一个携带有版本信息的对象上进行。也就是说,每一个快照下,所有的数据都是独立的一份,都关联至该快照版本。上述方案还对快照信息增加父快照和子快照的数据结构,从而使得在读取某个快照信息时,根据快照之间的链接关系进行拼接穿线,即可从中提取链路中每个最新的对象,实现在对象存储领域的零拷贝桶快照能力。通过该能力,使得系统的空间利用最大化,无任何真实数据拷贝,同样的数据只会存储一份,且数据永远不需要来回迁移,进而解决了现有技术中的对象存储领域无高性能快照方案的技术问题。
[0067] 作为一种可选的实施例,将携带有所述版本信息的对象写入对象存储系统,并生成所述对象的元数据,包括:如果所述目标快照中不存在所述对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据;如果所述目标快照中已存在所述对象对应的对象数据,使用携带有所述版本信息的对象替换所述对象存储系统中已存在的所述对象,并生成所述对象的元数据。
[0068] 在生成下一个快照之前,一个对象可能被多次上传,因此通过覆盖的方式,保持一个快照中仅包含一个对象的一个版本。仍结合图3所示,例如,在T4生成之前,需要上传对象OBJ,将版本信息T3添加至OBJ之前,得到T3-OBJ,将T3-OBJ上传至对象存储系统,且T3-OBJ属于T3。此时,快照T3中已经包含OBJ的T3版本,如果继续上传OBJ,则该OBJ的版本信息仍为T3-OBJ,使用新的T3-OBJ将已存在的T3-OBJ进行覆盖,即可使得快照中存储的是对象的最新版本。
[0069] 作为一种可选的实施例,上述方法还包括:接收第一删除指令,并根据第一删除指令确定待删除的快照,其中,第一删除指令中包括待删除快照的标识信息;判断待删除的快照是否被其他快照引用;如果待删除的快照被其他快照引用,则删除待删除快照的元数据,保留待删除快照的对象数据,其中,元数据用于记录快照的父快照和子快照;如果待删除的快照未被其他快照引用,则将待删除快照的元数据标记为删除。
[0070] 具体的,上述第一删除指令用于删除快照,快照是否被引用,可以根据该快照是否有子快照来确定,如果该快照包含依赖于其的子快照,则其被其他快照所引用,如果该快照不包括依赖于其的子快照,则其不被其他快照所引用。是否被其他快照所依赖,可以根据链接关系来确定。
[0071] 如果需要删除的快照被其他快照所引用,则不能真正的删除该快照,而只能对该快照进行逻辑删除,即将该快照标记为删除,如果需要删除的快照未被其他快照所引用,则可以将该快照中的对象数据进行删除,而不影响数据的查找。
[0072] 在一种可选的实施例中,图4是根据本发明实施例的一种删除快照的示意图。结合图4所示,快照T3包含子快照T4,其并非孤立的快照,因此如果需要删除快照T3,则只能对T3的元数据进行逻辑删除。如果需要删除的是快照T4,由于快照T4无子快照,即快照T4未被其他快照所引用,因此可以删除快照T4的元数据和对象数据。
[0073] 由此可知,本申请上述方案在快照的删除过程中,并不需要迁移数据。快照关联信息仅依托于元数据,像链表摘取某一节点的方式摘除元数据即可。例如:如快照T1—T2—T3—T4,摘除T3后只需要重建索引为T1—T2—(T3)T4即可,因此即使对快照进行删除,数据仍可即时可读/可写,不会因为真实IO造成长尾操作。
[0074] 作为一种可选实施例,如果待删除的快照被其他快照引用,则在将所述待删除快照的元数据标记为删除之后,上述方法还包括:将待删除的快照的子快照的父节点数据更改为待删除数据的父节点。
[0075] 对于已删除的快照,其子快照无法对其进行引用,因此更改其子快照的引用关系,使其子快照引用其父快照,从而重新使链接关系闭合。
[0076] 仍结合图3所示,由于快照T3被删除,因此T4的元数据中对应修改,其父快照更改为T3的父快照T2,且已删除父快照中记录为T3。在T3删除前,如需要检索对象OBJ,则先从T4中查找,由于T4中对于OBJ无最新版本的T4-OBJ,因此在读取OBJ时,需要读取T4的父快照T3中的T3-OBJ。在T3删除之后,将父快照和已删除父快照进行排序:T2-->T3,递归生成逆序链表T1-->T2-->T3-->T4,对于T4下不存在的对象,由于T3已经删除,因此从T2中查找“T2-xxx”的版本,如T2中不存在,则根据链表在T1中查找。
[0077] 作为一种可选的实施例,上述方法还包括:接收第二删除指令,其中,第二删除指令用于删除属于任意快照的待删除对象;判断待删除对象所属的原快照是否被其他快照所引用;如果待删除对象所属的快照被其他快照所引用,则在待删除对象的不可见对象列表中添加原快照;如果待删除对象所属的快照未被其他快照所引用,则删除原快照中待删除对象的对象数据。
[0078] 具体的,上述第二删除指令用于删除属于快照的一个对象,上述原快照用于表示第二删除指令中所指示的对象所属的快照,上述不可见列表用于记录可视状态为不可视的对象,不可见列表可以为List、set、map等数据结构,只需表征在被设置为删除状态的快照下即可。
[0079] 在对对象进行删除时,仍需要确定原快照是否为引用,如果未被引用,则说明第二删除指令所指示的对象为孤立的,可以进行删除;如果原快照被引用,则说明第二删除指令所指示的对象并非孤立,因此只能对其进行逻辑删除,在被删除的对象的不可见列表中添加原快照即可。
[0080] 图5是根据本发明实施例的一种删除对象的示意图,结合图5所示,如果删除的对象为T3,由于T3被T4引用,因此T3的子快照计数不为0,如果删除的对象为T4,由于T4无子快照,因此T4的子快照计数为0。
[0081] 图6是根据本发明实施例的一种子快照计数不为零的示意图,结合图6所示,T4为T3的回滚快照,T6也为T3的回滚快照。快照T5的数据链路为T5<—T4<—T3<—T2<—T1。以删除T2-OBJ为例,而T4为T3的子快照,因此OBJ的不可见列表中包括T4,因此得到图7所示的对象OBJ的可视状态,即T1、T2、T3中可视,T4中删除,T5中则无,也即快照T5禁止访问OBJ。快照T6的数据链路为T6<—T3<—T2<—T1。由于对象OBJ的不可见列表中不包括T6的链路中的任意节点,因此T2-OBJ被展示。
[0082] 基于快照之间的链路关系,将所有的快照元数据建立了树状关系(如图8所示),也即,每个快照可以有至多一个父快照,若干个子快照。
[0083] 作为一种可选的实施例,上述方法还包括:接收回滚指令,其中,回滚指令包括待回滚的目的快照的标识;根据回滚指令创建回滚快照,并确定回滚快照为目的快照的子快照。
[0084] 具体的,上述回滚快照为创建的一个新的快照,其在时间轴上,排列在上一个快照之后,但其与普通的快照的差别在于,回滚快照的父快照为其回滚的目的快照,而并不是时间轴上的上一个快照。
[0085] 图9是根据本发明实施例的一种创建快照并上传对象的示意图,结合图9所示,创建快照T1、T2、T3、T4,在各快照下上传同一对象OBJ,以及添加前缀的方式携带版本信息,分别命名为:T1_OBJ、T2_OBJ、T3_OBJ、T4_OBJ。图10是在图9的基础上回滚至T2的示意图,结合图10所示,如果需要从T4回滚至T2,则自动创建回滚快照T5,T5引用快照T2,即T5为T2的子快照。
[0086] 图11是在回滚快照中上传对象数据的示意图,结合图11所示,如果向回滚快照中上传对象OBJ,则命名可以为T5-OBJ-A,后缀“A”可以用于表示该快照中的对象的均为回滚的对象。
[0087] 作为一种可选的实施例,在根据回滚指令创建新的快照,并确定创建的新的快照为目的快照的子快照之后,上述方法还包括:接收用于创建快照的创建指令;检测回滚快照中是否有对象;如果回滚快照中无对象,则删除回滚快照,并确定创建的快照为最近创建的非回滚快照的子快照;如果回滚快照中有对象,则确定创建的快照为回滚快照的子快照。
[0088] 在上述步骤中,在回滚快照之后继续创建新的快照,在创建新的快照之前需要确定所创建的新的快照的父快照。如果回滚快照中有对象,则将回滚快照作为父快照进行创建,如果回滚快照中无对象,则可以删除回滚快照,并确定最近创建的非回滚快照为父快照。
[0089] 在一种可选的实施例中,图12是根据本发明实施例的一种在回滚快照后创建快照的示意图,结合图12所示,T5是回滚至T2的回滚快照,在回滚快照T5中上传了T5-OBJ,即回滚快照中有对象,因此创建新的新的快照时以及T5作为父快照,得到快照T6。图13是根据本发明实施例的另一种在回滚快照后创建快照的示意图,再结合图13所示,在T6之后再回滚至T3,即可创建回滚快照T7,其父快照为T3,T7中无对象,如果在T7后继续创建快照,则可以将T7删除,直接创建以及T3作为父快照的快照。
[0090] 仍结合图13所示,在读取对象时,先生成关联链表:T1-〉T2-〉T3-〉T7,其中,T3—T7下无对象、T2—T3下可见对象T2_OBJ、T1—T2下可见对象T1_OBJ,由于T1_OBJ为旧版本的OBJ,T2_OBJ为新版本的OBJ,因此回滚后可见对象为T2_OBJ。其对象列表可如图14所示,相同的对象在读取时取最新版本,因此展示的对象为OBJ(T3版本),即T3快照创建前上传的版本T2_OBJ。
[0091] 作为一种可选的实施例,在接收用于创建快照的创建指令之后,上述方法还包括:检测具有相同父快照的两个子快照的创建时间;如果两个子快照的创建时间小于预设时间阈值,则对两个子快照进行合并,并将两个子快照标记为删除,其中,断开其中任意一个子快照与父快照的链接关系,并将断开与父快照的链接关系的子快照连接至另一个子快照。
[0092] 具体的,上述预设时间阈值可以是默认的时间阈值,也可以是用户根据实际需求设置的。当两个同父的子快照的,上述快照的合并不仅可以基于对时间的判断进行,还可以在用户的触发下进行。
[0093] 上述步骤中,快照的合并基于数据二分归并实现,用于将两个或多个快照同父快照的快照进行合并,得到一个聚合快照,并对两个子快照进行逻辑删除,进行逻辑删除后,实际寻址方式不变,只是对用户不再展示逻辑删除了的对象。在进行两个快照的合并时,将任意两个存在共同父快照的快照,断开其中一个快照与其父快照的链接,并链接至另一快照,作为另一个快照的子版本。在将两个快照合并后,还可以不断使用上述方式进行两两合并,直至合并成为一个快照。通过快照的合并,从而达到便于元数据管理的目的。
[0094] 实施例2
[0095] 根据本发明实施例,提供了一种基于对象存储桶的快照装置的实施例,图15是根据本发明实施例第一种基于对象存储桶的快照装置的示意图,快照包括:元数据和对象数据,其中,元数据用于记录快照之间的链接关系,链接关系用于表示子快照对父快照的依赖关系,对象数据用于记录属于快照的对象,结合图15所示,该装置包括:
[0096] 确定模块150,用于在接收待写入的对象后,确定目标快照,其中,目标快照为最后生成的快照。
[0097] 添加模块152,用于为对象添加目标快照的版本信息,得到携带有版本信息的对象。
[0098] 写入模块154,用于将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据,其中,所述对象的元数据指示所述对象数据属于所述目标快照。
[0099] 作为一种可选的实施例,写入模块包括:写入子模块,用于如果所述目标快照中不存在所述对象对应的对象数据,直接将携带有版本信息的对象写入对象存储系统,并生成所述对象的元数据;替换子模块,用于如果所述目标快照中已存在所述对象对应的对象数据,使用携带有所述版本信息的对象替换所述对象存储系统中已存在的所述对象,并生成所述对象的元数据。
[0100] 作为一种可选的实施例,上述装置还包括:第一接收模块,用于接收第一删除指令,并根据第一删除指令确定待删除的快照,其中,第一删除指令中包括待删除快照的标识信息;第一判断模块,用于判断待删除的快照是否被其他快照引用;第一删除模块,用于如果待删除的快照被其他快照引用,则将所述待删除快照的元数据标记为删除;第二删除模块,用于如果待删除的快照未被其他快照引用,则删除待删除快照的元数据和对象数据。
[0101] 作为一种可选的实施例,上述装置还包括:更改模块,用于如果待删除的快照被其他快照引用,则在将所述待删除快照的元数据标记为删除之后,将待删除快照的子快照的父快照更改为待删除快照的父快照。
[0102] 作为一种可选的实施例,上述装置还包括:第二接收模块,用于接收第二删除指令,其中,所述第二删除指令用于删除属于任意快照的待删除对象;第二判断模块,用于判断待删除对象所属的原快照是否被其他快照所引用;第三删除模块,用于如果原快照被其他快照所引用,则在待删除对象的不可见对象列表中添加原快照;第四删除模块,用于如果原快照未被其他快照所引用,则删除所述原快照中待删除对象的对象数据。
[0103] 作为一种可选的实施例,上述装置还包括:第三接收模块,用于接收回滚指令,其中,回滚指令包括待回滚的目的快照的标识;确定模块,用于根据回滚指令创建回滚快照,并确定回滚快照为目的快照的子快照。
[0104] 作为一种可选的实施例,上述装置还包括:在根据回滚指令创建新的快照,并确定创建的新的快照为目的快照的子快照之后,第四接收模块,用于接收用于创建快照的创建指令;第一检测模块,用于检测回滚快照中是否有对象;第一创建模块,用于如果回滚快照中无对象,则删除回滚快照,并以最近创建的非回滚快照为父快照创建子快照;第二创建模块,用于如果回滚快照中有对象,则以回滚快照为父快照创建子快照。
[0105] 作为一种可选的实施例,上述装置还包括:第二检测模块,用于检测具有相同父快照的两个子快照的创建时间;合并模块,用于如果两个子快照的创建时间小于预设时间阈值,则对两个子快照进行合并,并将两个子快照标记为删除,其中,断开其中任意一个子快照与父快照的链接关系,并将断开与父快照的链接关系的子快照连接至另一个子快照。
[0106] 实施例3
[0107] 根据本发明实施例,提供了一种基于对象存储桶的快照系统的实施例,该系统包括用于存储对象的对象存储系统和至少一个快照,至少一个快照包括:元数据,用于记录快照之间的链接关系,链接关系包括子快照对父快照的依赖关系;对象数据,用于记录属于快照的对象。
[0108] 作为一种可选的实施例,元数据包括:父快照标识、子快照标识和已删除的父快照的标识。
[0109] 本申请实施例中的基于对象存储桶的快照系统可以包括实施例1中的快照,具体实施例可见实施例1中的说明,此处不再赘述。
[0110] 本申请实施例中的基于对象存储桶的快照系统可以执行实施例1中的步骤,此处也不再赘述。
[0111] 实施例4
[0112] 根据本发明实施例,提供了一种存储介质,存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行实施例1中任意一项所述的基于对象存储桶的快照方法。
[0113] 实施例5
[0114] 根据本发明实施例,提供了一种处理器,处理器用于运行程序,其中,所述程序运行时执行实施例1中任意一项所述的基于对象存储桶的快照方法。
[0115] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0116] 在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0117] 在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0118] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0119] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0120] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0121] 以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。