一种数据写入方法及装置与流程

文档序号:15346744发布日期:2018-09-04 22:51阅读:279来源:国知局

本发明涉及数据处理技术领域,尤其涉及一种数据写入方法及装置。



背景技术:

ceph(分布式存储系统)是一种性能优异、高可靠性和高扩展性分布式存储系统,广泛应用于各类大中小型存储环境。

目前,ceph主要采用多副本策略以保证数据的可靠性,但是多副本策略降低了ceph的磁盘利用率,例如,2副本磁盘利用率50%,3副本磁盘利用率33%。

为了提高磁盘利用率,ceph提出了纠删码(erasurecoding,ec)策略。

纠删码算法将写入数据分成k份原始数据,通过这k份原始数据计算出m份校验数据,通过这k+m份中的任意k份数据可以还原出所有原始数据。

然而实践发现,现有cephec方案中当条带中部分原始数据发生修改时,需要先将条带中未发生修改的原始数据读出,重新计算校验数据,并将发生修改的数据和新计算的校验块写入条带中的相应位置,即存在写惩罚。



技术实现要素:

本发明提供一种数据写入方法及装置,以解决现有cephec方案不支持覆盖写,且存在写惩罚的问题。

根据本发明的第一方面,提供一种数据写入方法,应用于分布式对象存储系统中的存储节点,所述方法包括:

当接收到针对目标文件的写入请求时,按照预设区块大小将所述目标文件划分为原始数据块,并根据所述原始数据块利用奇偶校验算法计算至少一个校验数据块;

将所述目标文件对应的原始数据块以及校验数据块并发写入对象object组中的连续多个空闲区块;其中,所述object组中包括至少三个object,所述object组中各object包括等量等大小的区块,所述连续多个空闲区块依次归属于所述object组中的各object;

将所述object组中的各object映射至不同的对象存储设备osd。

根据本发明的第二方面,提供一种数据写入装置,应用于分布式对象存储系统中的存储节点,所述装置包括:

接收单元,用于接收写入请求;

划分单元,用于当所述接收单元接收到针对目标文件的写入请求时,按照预设区块大小将所述目标文件划分为原始数据块;

校验单元,用于根据所述原始数据块利用奇偶校验算法计算至少一个校验数据块;

写入单元,用于将所述目标文件对应的原始数据块以及校验数据块并发写入对象object组中的连续多个空闲区块;其中,所述object组中包括至少三个object,所述object组中各object包括等量等大小的区块,所述连续多个空闲区块依次归属于所述object组中的各object;

映射单元,用于将所述object组中的各object映射至不同的对象存储设备osd。

应用本发明公开的技术方案,当接收到针对目标文件的写入请求时,按照预设区块大小将目标文件划分为原始数据块,并利用奇偶校验算法计算至少一个校验数据块;进而,可以将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块,并将object组中的各object映射至不同的osd,解决了cephec存在写惩罚的问题,并提高了ceph的数据写入性能。

附图说明

图1是本发明实施例提供的一种数据写入方法的流程示意图;

图2是本发明实施例提供的一种object组的示意图;

图3~图7是本发明实施例提供的数据写入object的示意图;

图8是本发明实施例提供的一种数据写入装置的结构示意图;

图9是本发明实施例提供的另一种数据写入装置的结构示意图;

图10是本发明实施例提供的另一种数据写入装置的结构示意图;

图11是本发明实施例提供的另一种数据写入装置的结构示意图;

图12是本发明实施例提供的一种数据写入装置的硬件结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。

请参见图1,为本发明实施例提供的一种数据写入方法的流程示意图,其中,该数据写入方法可以应用于分布式对象存储系统(如ceph,下文中以ceph为例)中的存储节点,如图1所示,该数据写入方法可以包括以下步骤:

步骤101、当接收到针对目标文件的写入请求时,按照预设区块大小将目标文件划分为原始数据块,并根据该原始数据块利用奇偶校验算法计算至少一个校验数据块。

本发明实施例中,考虑到现有cephce方案不支持覆盖写,且存在写惩罚,同时,为了在保证数据可靠性的前提下,提高磁盘利用率,可以采用zfs(zettabytefilesystem,动态文件系统)的raidz(redundantarraysofindependentdisksz,独立磁盘构成的具有冗余能力的阵列z)机制替换cephec冗余策略,通过zfs为ceph对外提供块存储。

其中,采用zfs的raidz机制替换cephec冗余策略,通过zfs为ceph对外提供块存储的方式可以包括但不限于:采用ceph中的rbd(rados(reliable,autonomicdistributedobjectstore,可靠、自治、分布式对象存储)blockdevices,块设备)替代zfs中的vdev(virtualdevice,虚拟设备),当需要进行数据写入时,将待写入的数据按照预设区块大小进行原始数据块划分,并计算校验数据块,进而分别写入到各rbd中的object(对象)中;或者,采用ceph中的object替代zfs中的vdev,当需要进行数据写入时,将待写入的数据按照预设区块大小进行原始数据块划分,并计算校验数据块,进而分别写入到各object中。

其中,同一次写入的数据对应的原始数据块和校验数据块需要写入到不同的object,用于写入原始数据块和校验数据块的预设数量的object可以形成一个object组,同一object组中各object按照预设区块大小进行区块划分。

其中,上述预设数量为大于等于三个,object组中各object包括等量等大小的区块。

例如,上述object组的示意图可以如图2所示,在该示例中,object1~objectn为object组中各object的编号,0~n为object组中各object的区块的lba(logicalblockaddress,逻辑区块地址)地址,当需要对object组进行数据写入时,可以按照object组中各object编号从小到大,且lba地址从小到大的顺序进行数据写入,即先写object1的lba0,然后写object2的lba0…最终写objectn的lban。

需要说明的是,在本发明实施例中,如图2所示,预设数量的object形成的object组可以相当于zfsraidz方案中预设数量的vdev组成的m1vdev,object组中各object的区块的编址方式可以参见m1vdev中包括的各vdev中区块的编址方式,object组响应数据读写请求的具体实现细节与m1vdev响应数据读写请求的具体实现细节相类似,本发明实施例对此不做赘述。

本发明实施例中,当存储节点接收到文件(下文中称为目标文件)写入请求时,存储节点可以按照预设区块大小将目标文件划分为数据块(本文中称为原始数据块)。其中,目标文件可以包括新写入的数据或之前已写入的数据对应的修改后的数据。

例如,假设预设区块大小为512k,目标文件大小为2m,则目标文件可以划分为4个原始数据块。

本发明实施例中,存储节点将目标文件划分为原始数据块之后,可以根据原始数据块,利用奇偶校验算法计算至少一个校验数据块。

其中,本发明实施例中,校验数据块的数量可以为一个、两个或三个。

优选地,当校验数据块的数量为一个时,object组中object的数量至少为三个;当校验数据块的数量为两个时,object组中object的数量至少为四个;当校验数据块的数量为三个时,object组中的object的数量至少为五个。

步骤102、将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块;其中,该连续多个空闲区块依次归属于object组中的各object。

本发明实施例中,存储节点确定了目标文件对应的原始数据块以及校验数据块之后,可以将目标文件对应的原始数据块以及校验数据块写入object组。

其中,为了提高数据可靠性,需要尽量保证目标文件对应的原始数据块以及校验数据块均分别位于不同的object。

优选地,每一次写入的原始数据块以及校验数据块的数量之和小于等于object组中object的数量。

本发明实施例中,存储节点将目标文件对应的原始数据块以及校验数据块写入object组时,可以将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块中,即对目标文件对应的原始数据块以及校验数据块形成的整个条带一次性进行写入。

需要说明的是,在本发明实施例中,由于目标文件的大小不固定,因此,目标文件对应的原始数据块以及校验数据块形成的条带的长度也不固定;此外,由于目标文件对应的原始数据块以及校验数据块是一次性写入object组中的连续多个空闲区块的,只有当各原始数据块或校验数据块均成功写入时,目标文件才写入成功,或者,可以认为目标文件完全未写入,因此,当存储节点突然断电时,目标文件将处于写入成功状态或未写入的状态,不会出现数据不一致的情况,保证了数据的一致性。

其中,目标文件的写入时间与目标文件对应的各原始数据块以及校验数据块中写入最慢的数据块(包括原始数据块或校验数据块)的写入时间一致。

举例来说,请参见图3,假设object组中包括5个object(假设分别为object),目标文件对应的原始数据块为d1、d2和d3,校验数据块为p4,object组中第一个空闲的数据块为object5中地址为lba2的区块,则存储节点可以p4、d1、d2和d3并发写入object5中地址为lba2的区块、object1中地址为lba3的区块、object2中地址为lba3的区块,以及object3中地址为lba3的区块。

相应地,在本发明实施例中,当需要进行数据修改时,存储节点仅需将修改后的数据按照预设区块大小划分为多个原始数据块,并根据该原始数据块利用奇偶校验算法计算至少一个校验数据块,进而将得到的原始数据块和校验数据块写入objcet组中的连续多个空闲区块即可,避免了数据修改时必须先读后写而导致的写惩罚。

步骤103、将object组中各object映射至不同的osd。

本发明实施例中,为了保证数据的可靠性,对于object组中各object,需要将其分别映射至不同的osd(object-basedstoragedevice,对象存储设备)。

具体地,在本发明实施例中,存储节点可以将同一object组中不同的object作为同一object的不同副本,利用crush(controlledreplicationunderscalablehashing,可扩展哈希下的受控复制)算法将object组中的不同object映射至不同的osd。

可见,在图1所示方法流程中,采用zfs的raidz机制替换cephec冗余策略,利用cephobject作为zfs中的raidz中的vedv,以预设数量的object形成object组,通过zfs为ceph对外提供块存储,在保证数据可靠性以及磁盘利用率的前提下,使用raidz解决cephec的写惩罚问题;此外,目标文件写入object组时,采用并发写入的方式,提高了ceph数据写入性能。

在本发明其中一个实施例中,上述将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块,可以包括:

若当前的object组的已用容量达到第一预设阈值,且已分配的object组的总容量未达到预设最大容量,则分配新的object组,并将目标文件对应的原始数据块以及校验数据块并发写入新分配的object组中的连续多个空闲区块。

在该实施例中,考虑到ceph支持的object的容量有限(目前ceph最大支持2g的object),导致单个object组的容量不足于满足数据存储的需求,因此,在数据写入过程中,需要支持动态扩容。

相应地,在该实施例中,在对目标文件对应的原始数据块以及校验数据块进行写入前,可以判断当前的object组的已用容量是否达到第一预设阈值(可以根据实际场景设定),以及已分配的object组的总容量是否达到预设最大容量(可以根据实际场景设定)。

其中,上述当前的object组可以指上一次数据写入时所写入的object组;对于第一数据写入,当前的object组即为初始分配的object组。

在该实施例中,若当前的object组的已用容量达到第一预设阈值,且已分配的object组的总容量未达到预设最大容量,则分配新的object组,并将目标文件对应的原始数据块以及校验数据块并发写入新分配的object组中的连续多个空闲区块,以实现数据的动态平衡。

举例来说,仍以图3所示场景为例,假设存储节点需要将目标文件对应的原始数据块以及校验数据块(即d1、d2、d3和p4)写入该object组时,检测到该object组的已用容量达到阀值,且已分配的object组的总容量未达到预设的最大容量,则存储节点可以分配新的object组(即object6~object10),其示意图可以如图4所示,此时,存储节点可以根据所有object的剩余可用空间计算权重,根据权重合理分配后续数据,达到动态平衡,因此,后续数据会优先写入obj6-obj10,即存储节点可以将p4、d1、d2和d3并发写入object6中地址为lba0的区块、object7中地址为lba0的区块、object8中地址为lba0的区块,以及object9中地址为lba0的区块。

进一步地,在该实施例中,若当前的object组的已用容量达到第一预设阈值,且已分配的object组的总容量已达到预设最大容量,则存储节点可以将目标文件对应的原始数据块以及校验数据块并发写入存在空闲区块且初始分配的object组中的连续多个空闲区块。

举例来说,如图5所示,假设存储节点需要将目标文件对应的原始数据块以及校验数据块(即d1、d2、d3和p4)写入该object组(object6~object10)时,发现当前object组的已用容量达到第一预设阈值,且已分配的object组的总容量已达到预设最大容量,则存储节点可以将p4、d1、d2和d3并发写入存在空闲块且初始分配的object组(即object1~object5)中的连续多个空闲区块,即存储节点可以p4、d1、d2和d3并发写入object5中地址为lba2的区块、object1中地址为lba3的区块、object2中地址为lba3的区块,以及object3中地址为lba3的区块。

需要说明的是,在本发明实施例中,若当前的object组的已用容量未达到第一预设阈值,则存储节点可以直接将目标文件对应的原始数据块以及校验数据块并发写入当前的object组中的连续多个空闲区块。

在本发明另一个实施例中,上述object组为vobject(virtualobject,虚拟对象)组,该vobject组中各vobeject包括至少一个object,且各vobject中包括的object数量相同;

相应地,上述将目标文件对应的原始数据块以及校验数据块并发写入对象object组中的连续多个空闲区块,包括:

若vobject组中存在空闲区块的object的已用容量达到第二预设阈值,且已分配的object的总容量未达到预设最大容量,则为vobject组中各vobject分配新的object,并将目标文件对应的原始数据块以及校验数据块并发写入vobject组中存在空闲区块且初始分配的object的连续多个空闲区块。

在该实施例中,为了实现动态扩容,可以引入vobject的概念,一个vobject可以包括一个或多个object。可以将预设数量的vobject形成vobject组;其中,vobject组中各vobject包括的object的数量相同,且vobject组中各vobject的区块编址方式可以参见m1vdev中包括的各vdev中区块的编址方式。

其中,同一vobject中的多个object中的区块连续编址。

例如,假设vobject1包括object1和object2,且object1和object2各包括5个区块,则object1和object2中各区块的地址可以分别为lba0~lba9。

当需要进行扩容,且vobject组的总容量(即vobject组中已分配的object的总容量)未达到预设最大容量时,可以为vobject组中各vobject分配新的object。

相应地,在该实施例中,在对目标文件对应的原始数据块以及校验数据块进行写入前,可以判断vobject组中存在空闲区块的object的已用容量是否达到第二预设阈值(可以根据实际场景设定),以及vobject组中已分配的object组的总容量是否达到预设最大容量(可以根据实际场景设定)。

若vobject组中存在空闲区块的object的已用容量达到第二预设阈值,且已分配的object的总容量未达到预设最大容量,则存储节点可以为vobjcet组中各vobject分配新的object,并将目标文件对应的原始数据块以及校验数据块并发写入vobject组中存在空闲区块且初始分配的object的连续多个空闲区块。

其中,第二预设阈值可以与第一预设阈值相同,也可以与第一预设阈值不同。

举例来说,如图6所示,假设vobjec组中包括vobject1~vobjcet5,各vobject分别分配有一个object(依次为object1~object5,分别归属于vobject1~vobjcet5),假设存储节点需要将目标文件对应的原始数据块以及校验数据块(即d1、d2、d3和p4)写入该vobject组时,检测到vobject组中存在空闲区块的object的已用容量达到第二预设阈值,且已分配的object的总容量未达到预设的最大容量,则存储节点可以分配新的object组(依次为object6~object10,分别归属于vobject1~vobject5),其示意图可以如图7所示,此时,存储节点可以将目标文件对应的原始数据块以及校验数据块写入vobject组中存在空闲区块且初始分配的object组中的连续多个空闲区块,即存储节点可以p4、d1、d2和d3并发写入object5中地址为lba2的区块、object1中地址为lba3的区块、object2中地址为lba3的区块,以及object3中地址为lba3的区块。

需要说明的是,在本发明实施例中,当需要进行数据写入时,若vobject组中存在空闲区块的object的已用容量未达到第二预设阈值;或,object组中存在空闲区块的object的已用容量达到第二预设阈值,且已分配的object的总容量达到预设最大容量,则存储节点不会再为vobject分配新的object,而是直接将目标文件对应的原始数据块以及校验数据块并发写入vobject组中存在空闲区块且初始分配的object的连续多个空闲区块。

进一步地,在该实施例中,存储节点进行object映射时,可以将vobject组中各object映射至不同的osd;其中,归属于不同vobject的object映射至不同的osd。

进一步地,在该实施例中,考虑到数据块在vobject中的地址与object中的地址并不完全相同,因此,存储节点将目标文件对应的原始数据块以及校验数据块并发写入vobject组中存在空闲区块且初始分配的object的连续多个空闲区块之后,还可以包括:

记录原始数据块以及校验数据块所在的区块归属的vobject的标识以及地址,并记录原始数据块以及校验数据块所在区块归属的vobject的标识以及地址与原始数据块以及校验数据块所在区块归属的object的标识以及地址的映射关系。

举例来说,以图7所示场景为例,当某数据块所在区块归属的vobject的标识为vobject1,地址为lba2时,其对应的object的标识以及地址为object1以及lba2(即vobject1的第一个object中的第三个区块);当某数据块所在区块归属的vobject的标识为vobject3,地址为lba5时,其对应的object的标识以及地址为object6以及lba0(即vobject3的第二个object中的第一个区块)。

相应地,在后续流程中,当需要进行数据读取时,可以先查询确定需要读取的数据的原始数据块以及校验数据块所在区块所属的vobject的标识以及地址,进而根据该vobject的标识以及地址,查询自身记录的原始数据块以及校验数据块所在区块归属的vobjcet的标识以及地址与原始数据块以及校验数据块所在区块所属的object的标识以及地址的映射关系,以确定需要读取的数据的原始数据块所在区块归属的object的标识以及地址,并根据该objcet的标识以及地址进行数据读取。

通过以上描述可以看出,在本发明实施例提供的技术方案中,当接收到针对目标文件的写入请求时,按照预设区块大小将目标文件划分为原始数据块,并利用奇偶校验算法计算至少一个校验数据块;进而,可以将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块,并将object组中的各object映射至不同的osd,解决了cephec存在写惩罚的问题,并提高了ceph的数据写入性能。

请参见图8,为本发明实施例提供一种数据写入装置的结构示意图,其中,该装置可以应用于上述方法实施例中的存储节点,如图8所示,该数据写入装置可以包括:

接收单元810,用于接收写入请求;

划分单元820,用于当所述接收单元810接收到针对目标文件的写入请求时,按照预设区块大小将所述目标文件划分为原始数据块;

校验单元830,用于根据所述原始数据块利用奇偶校验算法计算至少一个校验数据块;

写入单元840,用于将所述目标文件对应的原始数据块以及校验数据块并发写入对象object组中的连续多个空闲区块;其中,所述object组中包括至少三个object,所述object组中各object包括等量等大小的区块,所述连续多个空闲区块依次归属于所述object组中的各object;

映射单元850,用于将所述object组中的各object映射至不同的对象存储设备osd。

请一并参见图9,为本申请实施例提供的另一种数据写入装置的结构示意图,如图9所示,在图8所示数据写入装置的基础上,图9所示数据写入装置还可以包括:

第一分配单元860,用于若当前的object组的已用容量达到第一预设阈值,且已分配的object组的总容量未达到预设最大容量,则分配新的object组;

所述写入单元840,具体用于将所述原始数据块以及校验数据块并发写入新分配的object组中的连续多个空闲区块。

在可选实施例中,所述写入单元840,还用于若当前的object组的已用容量达到第一预设阈值,且已分配的object组的总容量已达到预设最大容量,则将所述原始数据块以及校验数据块并发写入存在空闲区块且初始分配的object组中的连续多个空闲区块。

在可选实施例中,所述object组为虚拟对象vobject组,所述vobject组中各vobeject包括至少一个object,且各vobject中包括的object数量相同;

相应地,请一并参见图10,为本申请实施例提供的另一种数据写入装置的结构示意图,如图10所示,在图8所示数据写入装置的基础上,图10所示数据写入装置还可以包括:

第二分配单元870,用于若所述vobject组中存在空闲区块的object的已用容量达到第二预设阈值,且已分配的object的总容量未达到预设最大容量,则为所述vobject组中各vobject分配新的object;

所述写入单元840,具体用于将所述原始数据块以及校验数据块并发写入所述vobject组中存在空闲区块且初始分配的object的连续多个空闲区块;

所述映射单元850,具体用于将所述vobject组中的各object映射至不同的osd;其中,归属于不同vobeject的object映射至不同的osd。

请一并参见图11,为本申请实施例提供的另一种数据写入装置的结构示意图,如图11所示,在图10所示数据写入装置的基础上,图11所示数据写入装置还可以包括:

记录单元880,用于记录所述原始数据块以及校验数据块所在的区块归属的vobject的标识以及地址,并记录所述原始数据块以及校验数据块所在区块归属的vobject的标识以及地址与所述原始数据块以及校验数据块所在区块归属的object的标识以及地址的映射关系。

图12为本发明实施例提供的一种数据写入装置的硬件结构示意图。该数据写入装置可包括处理器1201、存储有机器可执行指令的机器可读存储介质1202。处理器1201与机器可读存储介质1202可经由系统总线1203通信。并且,通过读取并执行机器可读存储介质1202中与数据写入逻辑对应的机器可执行指令,处理器1201可执行上文描述的数据写入方法。

本发明实施例中提到的机器可读存储介质1202可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

由上述实施例可见,当接收到针对目标文件的写入请求时,按照预设区块大小将目标文件划分为原始数据块,并利用奇偶校验算法计算至少一个校验数据块;进而,可以将目标文件对应的原始数据块以及校验数据块并发写入object组中的连续多个空闲区块,并将object组中的各object映射至不同的osd,解决了cephec存在写惩罚的问题,并提高了ceph的数据写入性能。

本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本申请旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求指出。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1