磁盘扩容方法、装置及计算机设备与流程

文档序号:18330832发布日期:2019-08-03 12:11阅读:247来源:国知局
磁盘扩容方法、装置及计算机设备与流程

本申请主要涉及通信技术领域,更具体地说是涉及一种磁盘扩容方法、装置及计算机设备。



背景技术:

在分布式存储系统的应用过程中,随着业务量的增加,磁盘往往会出现空间不足的情况,需要进行磁盘扩容,即将就旧磁盘的数据迁移到新的磁盘上,以便腾出磁盘空间,继续进行业务操作。

在磁盘扩容过程中,旧磁盘的迁移数据量、需要进行数据迁移的磁盘数量以及数据在各磁盘中的分布情况,往往都会影响业务正常运行,进而影响工作效率。

对此,现有技术提出通过计算数据的哈希值,并利用哈希值对磁盘的数量进行取余操作,将数据打散到磁盘中。但是这种磁盘扩容方法每添加一份数据,影响到的磁盘数量较多,进而导致迁移数据量较大,不利于业务运行。



技术实现要素:

有鉴于此,本申请提供了一种磁盘扩容方法、装置及计算机设备,大大减小了磁盘扩容所影响的迁移数据量及磁盘数量,且尽量保证了扩容后各磁盘的数据访问均衡,进而保证了业务可靠高效运行。

为了实现上述发明目的,本申请提供了以下技术方案:

一种磁盘扩容方法,所述方法包括

获取待存储数据,计算所述待存储数据的数据哈希值;

依据所述待存储数据的数据哈希值,将所述待存储数据映射到哈希环,并获取所述哈希环中目标数据的数据哈希值,所述哈希环映射有第一数量个磁盘及所述磁盘中的各数据,所述目标数据包括映射到第一磁盘的数据,所述第一磁盘是所述第一数量个磁盘中,具有与所述待存储数据的数据哈希值匹配的磁盘哈希值的磁盘;

利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,确定扩容磁盘在所述哈希环映射的磁盘哈希值;

依据所述扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定所述目标数据中的迁移数据,将所述迁移数据及所述待存储数据映射到所述扩容磁盘中。

可选的,还包括:

依据随机哈希算法,将分布式存储系统存储的数据映射至哈希环,所述哈希环包括所述数据的数据哈希值;

将所述分布式存储系统中的第一数量个磁盘平均映射至所述哈希环,并确定各磁盘的磁盘哈希值;

按照所述哈希环的第一旋转方向,将映射至所述哈希环上的数据映射到相应的磁盘中。

可选的,所述将所述分布式存储系统中的第一数量个磁盘平均映射至所述哈希环,并确定各磁盘的磁盘哈希值,包括:

获取所述分布式存储系统中第一数量个磁盘各自的二进制编码,其中,所述第一数量个二进制编码是连续的二进制数;

对所述二进制数进行补零,将得到的32位二进制数作为相应磁盘的磁盘哈希值;

利用所述磁盘哈希值,将所述第一数量个磁盘映射到所述哈希环中,以使所述第一数量个磁盘平均分布在所述哈希环中。

可选的,还包括:

利用所述第一数量个磁盘各自的磁盘哈希值,按照所述第一旋转方向,确定所述第一数量个磁盘各自对应的哈希值范围;

所述获取所述哈希环中目标数据的数据哈希值,包括:

从所述第一数量个磁盘各自对应的哈希值范围中,确定所述待存储数据的数据哈希值所属的目标哈希值范围;

将所述目标哈希值范围对应的磁盘作为第一磁盘,获取映射至所述第一磁盘的目标数据的数据哈希值。

可选的,所述利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,确定扩容磁盘在所述哈希环映射的磁盘哈希值,包括:

利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,计算得到映射至所述第一磁盘的数据的哈希期望值;

将所述哈希期望值作为扩容磁盘的磁盘哈希值,并将所述扩容磁盘映射到所述哈希环中。

可选的,在获取待存储数据之后,所述方法还包括:

检测所述分布式存储系统的第一数量个磁盘中,是否存在具有存储空间余量的第二磁盘;

如果是,依据所述第二磁盘具有的存储空间大小,将所述待存储设备写入相应的第二磁盘;

如果否,执行所述计算所述待存储数据的数据哈希值步骤。

可选的,所述依据所述扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定所述目标数据中的迁移数据,包括:

确定所述目标数据中,数据哈希值在所述第一磁盘的磁盘哈希值与所述扩容磁盘的磁盘哈希值之间的固定数据;

将所述目标数据中,除所述固定数据之外的目标数据作为迁移数据,并清除所述迁移数据与所述第一磁盘的映射关系。

一种磁盘扩容装置,所述装置包括:

数据哈希值计算模块,用于获取待存储数据,计算所述待存储数据的数据哈希值;

第一映射模块,用于依据所述待存储数据的数据哈希值,将所述待存储数据映射到哈希环,并获取所述哈希环中目标数据的数据哈希值,所述哈希环映射有第一数量个磁盘及所述磁盘中的各数据,所述目标数据包括映射到第一磁盘的数据,所述第一磁盘是所述第一数量个磁盘中,具有与所述待存储数据的数据哈希值匹配的磁盘哈希值的磁盘;

扩容磁盘确定模块,用于利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,确定扩容磁盘在所述哈希环映射的磁盘哈希值;

数据迁移模块,用于依据所述扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定所述目标数据中的迁移数据,将所述迁移数据及所述待存储数据映射到所述扩容磁盘中。

可选的,所述装置还包括:

哈希值范围确定模块,用于利用所述第一数量个磁盘各自的磁盘哈希值,按照所述哈希环的第一旋转方向,确定所述第一数量个磁盘各自对应的哈希值范围;

所述第一映射模块包括:

第一确定单元,用于从所述第一数量个磁盘各自对应的哈希值范围中,确定所述待存储数据的数据哈希值所属的目标哈希值范围;

第一获取单元,用于将所述目标哈希值范围对应的磁盘作为第一磁盘,获取映射至所述第一磁盘的目标数据的数据哈希值。

一种计算机设备,包括:

多个磁盘,所述磁盘用于存储数据;

存储器,用于存储实现如上所述的磁盘扩容方法的程序;

处理器,用于加载并执行所述存储器存储的程序,实现如上任一项所述的磁盘扩容方法的各步骤。

由此可见,与现有技术相比,本申请提供了一种磁盘扩容方法、装置及计算机设备,分布式存储系统接收到待存储数据后,将依据待存储数据的哈希值,将其映射到哈希环中,以确定该待存储数据在哈希环中的位置,进而初步确定可以在映射到该哈希环中的哪两个磁盘之间进行磁盘扩容,之后,将利用这两个磁盘之间的数据哈希值以及待存储数据的数据哈希值,计算出扩容磁盘的磁盘哈希值,即确定出扩容磁盘应该映射到哈希环的什么位置,保证了各磁盘负载均衡,且减少了因加入待存储数据后,对需要迁移的数据量及影响到的磁盘数量。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1示出了本申请实施例提供的一种磁盘扩容方法的流程示意图;

图2示出了本申请实施例提供的一种磁盘扩容方法中,数据映射到哈希环上的示意图;

图3示出了本申请实施例提供的一种磁盘扩容方法中,数据映射到磁盘的示意图;

图4示出了本申请实施例提供的一种磁盘扩容方法中,迁移数据映射到扩容磁盘的示意图;

图5示出了本申请实施例提供的另一种磁盘扩容方法的流程示意图;

图6示出了本申请实施例提供的一种磁盘扩容方法中,获取磁盘哈希值的哈希树示意图;

图7示出了本申请实施例提供的一种磁盘扩容方法中,获取扩充磁盘的磁盘哈希值的哈希树示意图

图8示出了本申请实施例提供的一种磁盘扩容装置的结构示意图;

图9示出了本申请实施例提供的另一种磁盘扩容装置的结构示意图;

图10示出了本申请实施例提供的另一种磁盘扩容装置的结构示意图;

图11示出了本申请实施例提供的又一种磁盘扩容装置的结构示意图;

图12示出了本申请实施例提供的一种计算机设备的硬件结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

参照图1,为本申请实施例提供的一种磁盘扩容方法的流程示意图,该方法可以包括但并不局限于以下步骤:

步骤s101,获取待存储数据;

步骤s102,计算该待存储数据的数据哈希值;

本实施例的待存储数据可以需要存储至计算机设备的磁盘中的数据,具体可以是计算机设备能够提供的任一业务的业务数据,本申请对待存储数据的类型及内容等不做限定。

本实施例适用于磁盘空间不足,需要扩充磁盘的场景,为了在扩充磁盘之后,减少迁移的磁盘数量以及数据量,并保证各磁盘的负载均衡,本申请可以利用哈希环,来定位所扩充的磁盘。

基于此,本实施例可以采用随机哈希算法,来计算待存储数据的哈希值,具体实现过程不做详述。通常情况下,对待存储数据进行随机的哈希计算,得到的数据哈希值的取值范围可以由十六进制数表示,该取值范围具体可以为:(0000000000000000-0xfffffffffffffffff)。

本实施例可以利用一致性哈希算法实现数据缓存,该一致性哈希算法就是对2^32取模,即将整个哈希值空间组织成一个虚拟的圆环,本实施例如上述数据哈希值取值范围内的哈希环,其哈希值空间也可以为0~(2^32-1)(即哈希值是一个32位无符号整数)。

步骤s103,依据待存储数据的数据哈希值,将待存储数据映射到哈希环;

步骤s104,获取该哈希环中目标数据的数据哈希值;

本实施例实际应用中,对于分布式存储系统中第一数量个磁盘存储的数据,可以使用随机哈希算法,将其映射到上文生成的哈希环中,如图2所示的哈希环,其仅以data1~data8的数据哈希值(如图2中的hash(data1)~hash(data8))映射结果为例进行示意性说明,并不局限于图2映射到哈希值上的哈希值,且本实施例对分布式存储系统中的磁盘数量即第一数量的具体数值不作限定。

同理,本实施例还可以计算第一数量个磁盘各自的磁盘哈希值,并将其映射到该哈希环中,使得映射后的磁盘能够平均分布在哈希环中,具体实现方法本申请不作限定。由此可见,本实施例构建的哈希环上映射有第一数量个磁盘,以及磁盘中的数据,且映射到哈希环上的第一数量个磁盘,可以将整个哈希环的哈希值范围划分成第一数量个子范围,之后,可以按照数据与磁盘的映射关系,确定每一个磁盘所对应的哈希值范围,即按照第一旋转方向,确定与相邻两个磁盘之间的哈希值范围对应的磁盘。

基于此,本实施例利用利用第一数量个磁盘各自的磁盘哈希值,按照第一旋转方向,确定第一数量个磁盘各自对应的哈希值范围之后,可以待存储数据的数据哈希值与这些哈希值范围进行比较,确定待存储数据的数据哈希值所属的目标哈希值范围,并将该目标哈希值范围对应的磁盘作为第一磁盘,将映射到第一磁盘中的数据作为目标数据,以获取目标数据的数据哈希值。所以说,本实施例的第一磁盘可以是第一数量个磁盘中,具有与待存储数据的数据哈希值匹配的磁盘哈希值(即属于该数据哈希值所属哈希范围中的磁盘哈希值)的磁盘。

参照图3所示的映射有磁盘及其数据的哈希环示意图,映射到哈希环上的数据,可以按照同一旋转方向映射到第一个磁盘中,如图3所示,数据可以按照逆时针方向映射到第一个磁盘中,如图3对data1~data8与磁盘disk0~disk3之间的映射关系的示例,但并不局限于图3所示的逆时针方向的映射方式。

且,按照图3所示的逆时针方向的映射方式,在哈希环上,从磁盘disk0的磁盘哈希值到磁盘disk1的磁盘哈希值之间的哈希值范围,实际上是能够映射到磁盘disk0中的数据的数据哈希值组成,因此,该哈希值范围与磁盘disk0对应,且其包含磁盘disk0的磁盘哈希值,不包含磁盘disk1的磁盘哈希值;同理,可以确定磁盘disk1的磁盘哈希值到磁盘disk2的磁盘哈希值之间的哈希值范围,与磁盘disk1对应;磁盘disk2的磁盘哈希值到磁盘disk3的磁盘哈希值之间的哈希值范围,与磁盘disk2对应;磁盘disk3的磁盘哈希值到磁盘disk0的磁盘哈希值之间的哈希值范围,与磁盘disk3对应。

之后,按照图3所示的映射方式,将待存储数据映射到该哈希环后,以待存储数据为data9为例进行说明,将待存储数据的数据哈希值映射到哈希环后,经过该数据哈希值与已有的各磁盘的哈希值范围的比较,得知如图3所示,该待存储数据的数据哈希值位于磁盘disk0与磁盘disk1的磁盘哈希值之间,具体位于磁盘disk0对应的哈希值范围内,按照上文描述的映射方式,在磁盘disk0的存储空间充足的情况下,待存储数据应该映射到磁盘disk0中。若此时磁盘disk0的存储空间不足,待存储数据无法写入该磁盘disk0,为了保证数据的可靠存储,业务操作的正常运行,往往需要进行扩盘操作,即扩充一新的磁盘。

这种情况下,按照上文描述的数据与磁盘之间的映射关系,往往需要将某些旧磁盘中的数据迁移到新的磁盘上,以便腾出磁盘空间继续进行业务操作。然而,现有的基于除余算法的磁盘扩容方法中,每次扩容磁盘,使用的磁盘数量为1,但其影响的迁移数据量及磁盘节点数量较多,如下表1所示的磁盘扩容对迁移数据量及磁盘节点数量的影响结果,平均每添加一份数据,影响磁盘节点数量3.5个,迁移数据量为3份。

表1

为了改善上述基于基本除余算法实现的磁盘扩容方法,提出对基本除余算法进行改进,得到稳定除余算法,这种方式在每次进行磁盘扩容时,使用的磁盘数量往往为扩容前的磁盘的数量,即总磁盘数量为原来磁盘数量的两倍。在这种方案中,即便是在磁盘扩容的最佳时机,即向分布有最多数据的磁盘中添加待存储数据的情况下进行磁盘扩容,其影响的迁移数据量及磁盘节点数量也比较多,具体如下表2所示的磁盘扩容对迁移数据量及磁盘节点数量的影响结果,在这种改进方案中,每添加一份数据,最好的情况下也会影响2.4个磁盘节点,影响的迁移数据量为1.2份,若在每添加一次数据就进行一次磁盘扩容的情况下,上述两种方案所影响的磁盘节点和迁移数据量将会更多,这将会严重影响业务的可靠运行。

表2

对此,本申请希望在磁盘扩容的最恶劣时机(即上文所述的每添加一次数据进行一次磁盘扩容)进行扩盘,能够尽可能减少迁移数据量、磁盘数量,并保证各磁盘负载均衡,从而降低磁盘扩容时数据迁移对业务造成的不利影响。

具体的,按照上文各步骤描述的方式,将磁盘及其存储的数据映射到哈希环上,接收到本次需要添加的待存储数据后,将其也映射到哈希环中,确定其在哈希环中的位置,也即确定该待存储数据的数据哈希值与已有磁盘的磁盘哈希值之间的大小关系,也就是说,待存储数据与各磁盘映射到哈希环后的位置关系。

之后,在减少迁移数据量和磁盘数量的同时,尽量保证各磁盘负载均衡,本实施例可以考虑待存储数据的添加,只影响其在哈希环上的位置相邻的数据与磁盘的映射关系,且只影响其在哈希环上的哈希值最接近的磁盘,所以,本实施例在将待存储数据映射到哈希环上后,可以确定与该待存储数据的数据哈希值相邻的磁盘哈希值,并将具有该磁盘哈希值的磁盘记为第一磁盘,获取映射到该第一磁盘的数据记为目标数据。

如图3所示的哈希环中,可以将磁盘disk0和磁盘disk1之间的,映射到磁盘disk0中的数据记为目标数据,如data6和data8等,实际应用中,目标数据的数据量往往比较多,具体数据量可以依据磁盘存储空间大小以及具体业务运行情况确定。

步骤s105,利用该目标数据的数据哈希值以及待存储数据的数据哈希值,确定扩容磁盘在哈希环映射的磁盘哈希值;

继上文分析,本申请希望完成磁盘扩容后,能够尽可能使各磁盘的负载均衡,所以,在确定所扩容的磁盘在哈希环的位置时,可以利用上文获取的目标数据的数据哈希值,即本次磁盘扩容可能会影响到的磁盘中数据,再结合本次添加的待存储数据的数据哈希值,来确定扩容磁盘应该位于哈希环的什么位置,所影响的迁移数量及磁盘数量最少,并尽量维持各磁盘中数据量的均衡,具体实现方法本实施例不做限定。

可选的,本实施例可以通过计算添加待存储数据后,其所影响的磁盘即第一磁盘中数据的数据哈希值的期望值,也就是第一磁盘中各数据的数据哈希值的平均值,将其作为扩容磁盘的磁盘哈希值,即确定该扩容磁盘在哈希环中的位置,但并不局限于这一种扩容磁盘位置确定方法。

步骤s106,依据扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定目标数据中的迁移数据,并将迁移数据及待存储数据映射到扩容磁盘中。

在确定扩容磁盘在哈希环上的映射位置后,需要调整当前映射到哈希环上的数据与磁盘的映射关系,尤其是因扩容磁盘的加入,受到影响的磁盘中数据,往往需要将该磁盘中的部分数据映射到扩容磁盘中。

具体的,由于此时数据映射到磁盘中的方式不会调整,在确定扩容磁盘的映射位置后,位于该扩容磁盘与第一磁盘之间的数据,即数据哈希值在第一磁盘和扩容磁盘的磁盘哈希值之间的数据确定为非迁移数据,那么,该第一磁盘中其他数据即为迁移数据,本实施例需要将这部分迁移数据迁移到扩容磁盘,即取消迁移数据与第一磁盘之间的映射关系,重新将该迁移数据映射到扩容磁盘中。

如图4所示,仍可以按照哈希环的逆时针方向,新添加的待存储数据data9直接映射到扩容磁盘中,原来映射到第一磁盘中的数据data6,将被迁移映射至该扩容磁盘。结合表3所示的采用本申请提出的这种磁盘扩容方法进行磁盘扩容,对迁移数据量和磁盘数量的影响结,很明显,本申请在完成磁盘扩容后,所影响的迁移数据量为1份、所影响的磁盘数量也就是1个,很明显,相较于现有的磁盘扩容方法,将不利影响降到了最低,且本申请还考虑到数据迁移后,各磁盘的负载均衡情况,提高了业务运行的可靠性。

可选的,参照图5,为本申请提供的磁盘扩容方法的又一实施例的流程示意图,本实施例可以是对上述实施例描述的磁盘扩容方法的一种细化方案,但在实际应用中,并不局限于本实施例描述这种细化方案,如图5所示,本实施例提供的磁盘扩容方法可以包括但并不局限于以下步骤:

步骤s201,依据随机哈希算法,将分布式存储系统存储的数据映射至哈希环;

本实施例中,关于哈希环的构建过程,可以参照上述实施例相应部分的描述。

步骤s202,获取分布式存储系统中第一数量个磁盘各自的二进制编码;

步骤s203,对该二进制数进行补零,将得到的32位二进制数作为相应磁盘的磁盘哈希值;

步骤s204,利用磁盘哈希值,将第一数量个磁盘映射到哈希环中,以使第一数量个磁盘平均分布在哈希环中;

其中,第一数量个二进制编码是连续的二进制数,本实施例在此以第一数量为4为例进行说明,参照图2所示的哈希环上映射的磁盘和数据的位置关系示意图,为了保证4个磁盘平均分布在哈希环中,本实施例提出了一种新的哈希算法,来计算各磁盘的磁盘哈希值。

本实施例以哈希树这一数据结构,来说明磁盘的磁盘哈希值,具体以图2所示的四个磁盘为例进行说明,由于这四个磁盘平均分布在哈希环中,若将磁盘disk0记为d0,其编码可以为00;磁盘disk1记为d1,其可以编码为01;磁盘disk2记为d2,其可以编码为10;磁盘disk3记为d3,其编码可以为11,由此可以得到如图6所示的哈希树,在该哈希树中,若子节点与父节点相同,其对应的编号为0,反之为1,也就是说,新出现的子节点对应的编号可以为1,如图6所示,从根节点向下看,左侧增加的子节点对应的编号为右侧增加的子节点均为新节点,其对应的编号均为0,而且,从根节点开始查找到叶节点,由该路径顺次得到的编号即可组成该磁盘的编码。本实施例可以按照这种方式,扩展哈希树,确定增加的新节点(即扩展磁盘)的编号,进而得到新节点的哈希值。

由于本申请构建的哈希环的哈希值是32位,为了方便计算,本实施例从根节点开始查找第一个出现的磁盘(即叶节点),得到对应的编码用0后向右补齐32位,所得到的值可以作为该磁盘的磁盘哈希值。所以,本实施例得到的磁盘d0的磁盘哈希值可以为00000000000000000000000000000000=0;磁盘d1的磁盘哈希值可以为01000000000000000000000000000000=2^30;磁盘d2的磁盘哈希值可以为10000000000000000000000000000000=2^31;磁盘d3的磁盘哈希值可以为11000000000000000000000000000000=3*2^30。

步骤s205,按照哈希环的第一旋转方向,将映射至哈希环上的数据映射到相应的磁盘中;

本申请主要以第一旋转方向为逆时针方向为例进行说明,当然,该第一旋转方向还可以是顺时针方向,无论是哪种旋转方向,数据映射到磁盘中的方法类似,本申请不再详述。

步骤s206,获取待存储数据,计算待存储数据的数据哈希值;

步骤s207,检测第一数量个磁盘中是否存在具有存储空间余量的第二磁盘,如果是,进入步骤s208;如果否,执行步骤s209;

步骤s208,依据第二磁盘具有的存储空间大小,将待存储设备写入相应的第二磁盘;

步骤s209,依据待存储数据的数据哈希值,将待存储数据映射到哈希环中;

可见,本实施例的分布式存储系统接收到新的待存储数据后,可以先判断当前存在的各磁盘的存储空间是否充足,如果充足,可以直接将该待存储数据写入存储空间充足的磁盘,具体可以写入存储空间余量最大的磁盘中,但并不局限于此;若当前存在的各磁盘的存储空间都不充足,就需要扩容新的磁盘,以便将待存储数据写入新的磁盘,同时,还可以调整其他磁盘的存储量,以使其他磁盘具有存储空间余量,存储新的数据。

步骤s210,依据该待存储数据的数据哈希值,及映射到哈希环中各磁盘的磁盘哈希值,确定该哈希环中目标数据的数据哈希值;

本实施例中,为了尽量保证扩容磁盘后,系统中各磁盘的负载均衡,可以采用均值(或者说期望)计算方式,来确定扩容磁盘的位置,所以,本实施例可以先确定被计算对象,即目标数据的数据哈希值,在此,为了减小计算量,本实施例可以先确定待存储数据的数据哈希值所在的磁盘哈希值范围,将具有该磁盘哈希值范围的磁盘记为第一磁盘,再将映射到第一磁盘中的数据记为目标数据,具体实现过程可以参照上述实施例相应部分的描述。

步骤s211,利用目标数据的数据哈希值以及待存储数据的数据哈希值,计算得到映射至第一磁盘的数据的哈希期望值;

步骤s212,将该哈希期望值作为扩容磁盘的磁盘哈希值,并将该扩容磁盘映射到哈希环中;

应该理解,在本实施例的当前阶段,映射至第一磁盘(即待存储数据的数据哈希值所在哈希值范围对应的磁盘)的数据包括待存储数据,以及接收该待存储数据之前的映射到该第一磁盘中的数据,本实施例可以利用这些数据各自的数据哈希值进行期望值计算,得到哈希期望值;当然,本申请也可以直接计算这些数据的数据哈希值的平均值,将其作为该第一磁盘的数据的哈希期望值。

举例说明,假设按照本实施例上述方法,计算得到待存储数据data9的数据哈希值为855294057,将其转化为32位的二进制数为00110010111110101100000001101001,经过与哈希环中其他磁盘的磁盘哈希值的比对,具体可以是其他磁盘对应的哈希值范围进行比对,得知待存储数据的数据哈希值位于磁盘d0对应的哈希值范围内,即待存储数据在哈希环中的映射位置介于磁盘d0与磁盘d1的映射位置之间,按照逆时针方向的映射关系,该待存储数据应该映射到磁盘d0中,但由于磁盘d0存储空间不足,无法直接存储,本实施例可以在这两个磁盘之间的扩容一个新的磁盘。

按照上述步骤描述的方法,计算将待存储数据映射到磁盘d0(即第一磁盘)后,第一磁盘所映射的数据的总体哈希期望值,如经过计算可以得到哈希期望值为00110010111110100100010001100000,本实施例可以直接将其作为扩展磁盘的磁盘哈希值,并由此表征其在哈希环中的映射位置。

仍以上述实施例中的哈希树结构,来说明扩展磁盘的磁盘哈希值的查找路径,按照上文描述的哈希树扩展规则,参照图7所示的扩展哈希值树,在该扩展哈希值树中,可以由后向前查找第i位在树中无对应的磁盘(节点),并将查找路径的编码作为扩容磁盘的磁盘哈希值,若将扩容磁盘disk4记为d4,其哈希值可以是00110010111110100100010001100000,。需要说明,图7并未示出查找扩容磁盘路径的所有节点,在扩展下一层节点时,可以按照向左增加与父节点相同的节点,编号为0,向右增加区别于父节点的新节点,编号为0,由此所得扩展后的哈希树结构本实施例不做详述。。

步骤s213,从目标数据中,确定数据哈希值在第一磁盘的磁盘哈希值与扩容磁盘的磁盘哈希值之间的固定数据;

步骤s214,将目标数据中除固定数据之外的目标数据作为迁移数据,并清除迁移数据与第一磁盘的映射关系。

在确定扩容磁盘在哈希环中的映射位置后,可以进一步确定因加入该扩容磁盘需要迁移的数据,由于迁移数据包含在上文确定的目标数据中,且该过程中并不会更改确定数据与磁盘之间的映射关系的方式,所以,本实施例可以基于该方式,先从目标数据中确定不需要迁移的数据,记为固定数据,再将目标数据中其他数据确定为迁移数据。

仍以上图4示例进行说明,在如图4所示的哈希环中,因在磁盘d0和磁盘d1之间加入扩容磁盘disk4,使得按照哈希环的逆时针方式,距离磁盘d4与磁盘d1之间的数据的映射位置最近的磁盘不再是磁盘d0,而变为磁盘d4,基于上文描述的确定数据与磁盘之间的映射关系的方法,这部分数据需要从磁盘d0中迁移到磁盘d4中,即这部分数据即为受扩容磁盘影响的迁移数据。而位于磁盘d0与磁盘d4之间的数据,按照逆时针方向映射,仍是映射到磁盘d0中,不需要更改映射关系,所以将这部分数据记为固定数据。可见,本实施例中,磁盘d0即为本实施例的第一磁盘。

需要说明,关于上文迁移数据及固定数据的确定方法并不局限于本实施例描述的方法。

综上,即便是在每添加一次数据就进行扩盘这一最恶劣的情况下,按照本实施例提供的新的哈希值计算方式,来获取扩容磁盘的磁盘哈希值,每次扩盘导致需要迁移的数据量和磁盘数量都大幅度减少,如本实施例所影响的迁移数据量仅一份,迁移磁盘数也仅是一个,同时,在确定扩容磁盘的磁盘哈希值时,考虑到已经映射到的磁盘中的其他数据的数据哈希值,即引入负载反馈,相对于传统的扩盘方法,尽量保证了增加扩容磁盘后各磁盘负载的均衡,解决了因迁移数据量和磁盘数较多,各磁盘负载不均衡影响业务可靠运行的技术问题。

参照图8,为本申请实施例提供的一种磁盘扩容装置的结构示意图,该装置可以包括:

数据哈希值计算模块11,用于获取待存储数据,计算所述待存储数据的数据哈希值;

在本实施例实际应用中,为了减少不必要的扩盘操作,该装置还可以包括:

检测模块,用于检测所述分布式存储系统的第一数量个磁盘中,是否存在具有存储空间余量的第二磁盘,如果否,触发数据哈希值计算模块11计算所述待存储数据的数据哈希值,或者触发后续其他模块执行其功能,实现扩盘;

数据写入模块,用于在检测模块的检测结果为是的情况下,依据所述第二磁盘具有的存储空间大小,将所述待存储设备写入相应的第二磁盘。

第一映射模块12,用于依据所述待存储数据的数据哈希值,将所述待存储数据映射到哈希环,并获取所述哈希环中目标数据的数据哈希值;

其中,哈希环映射有第一数量个磁盘及所述磁盘中的各数据,所述目标数据包括映射到第一磁盘的数据,所述第一磁盘是所述第一数量个磁盘中,具有与所述待存储数据的数据哈希值匹配的磁盘哈希值的磁盘;

扩容磁盘确定模块13,用于利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,确定扩容磁盘在所述哈希环映射的磁盘哈希值;

可选的,如图9所示,该扩容磁盘确定模块13可以包括:

第一计算单元131,用于利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,计算得到映射至所述第一磁盘的数据的哈希期望值;

第一映射单元132,用于将所述哈希期望值作为扩容磁盘的磁盘哈希值,并将所述扩容磁盘映射到所述哈希环中。

数据迁移模块14,用于依据所述扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定所述目标数据中的迁移数据,将所述迁移数据及所述待存储数据映射到所述扩容磁盘中。

可选的,参照图9,该数据迁移模块14可以包括:

固定数据确定单元141,用于确定所述目标数据中,数据哈希值在所述第一磁盘的磁盘哈希值与所述扩容磁盘的磁盘哈希值之间的固定数据;

迁移数据确定单元142,用于将所述目标数据中,除所述固定数据之外的目标数据作为迁移数据,并清除所述迁移数据与所述第一磁盘的映射关系。

综上,本实施例提出的磁盘扩容方式,大大减少了增加的扩容磁盘,所影响的迁移数据量及磁盘数量,且保证了到各磁盘的数据访问的均衡,进而保证了业务可靠高效运行。

可选的,如图10所示,该装置还可以包括:

第二映射模块15,用于依据随机哈希算法,将分布式存储系统存储的数据映射至哈希环,所述哈希环包括所述数据的数据哈希值;

第三映射模块16,用于将所述分布式存储系统中的第一数量个磁盘平均映射至所述哈希环,并确定各磁盘的磁盘哈希值;

在本实施例实际应用中,该第三映射模块16可以包括:

第一获取单元,用于获取所述分布式存储系统中第一数量个磁盘各自的二进制编码;

其中,所述第一数量个二进制编码是连续的二进制数,本申请对第一数量的具体数值不做限定。

磁盘哈希值获取单元,用于对所述二进制数进行补零,将得到的32位二进制数作为相应磁盘的磁盘哈希值;

第一映射单元,用于利用所述磁盘哈希值,将所述第一数量个磁盘映射到所述哈希环中,以使所述第一数量个磁盘平均分布在所述哈希环中。

第四映射模块17,用于按照所述哈希环的第一旋转方向,将映射至所述哈希环上的数据映射到相应的磁盘中。

需要说明,关于数据哈希值及磁盘哈希值的计算方式,哈希环的构建方式,以及将数据和磁盘映射到哈希环中的过程,可以参照上述方法实施例相应部分的描述,本实施例不再赘述。

可选的,在上述实施例的基础上,如图11所示,该装置还可以包括:

哈希值范围确定模块18,用于利用所述第一数量个磁盘各自的磁盘哈希值,按照所述第一旋转方向,确定所述第一数量个磁盘各自对应的哈希值范围;

基于此,上述第一映射模块12可以包括:

第二映射单元121,用于依据所述待存储数据的数据哈希值,将所述待存储数据映射到哈希环;

第一确定单元122,用于从所述第一数量个磁盘各自对应的哈希值范围中,确定所述待存储数据的数据哈希值所属的目标哈希值范围;

第一获取单元123,用于将所述目标哈希值范围对应的磁盘作为第一磁盘,获取映射至所述第一磁盘的目标数据的数据哈希值。

本申请实施例还提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述磁盘扩容方法的各步骤,具体实现过程可以参照上述方法实施例相应部分的描述。

本申请实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述磁盘扩容方法的各步骤,具体实现过程可以参照上述方法实施例相应部分的描述。

参照图12,为本申请实施例提供的一种计算机设备的硬件结构图,该计算机设备可以是终端设备或者服务器等,本申请对其产品类型不做限定,其适用于分布式存储系统,在本实施例中,该计算机设备可以包括:多个磁盘21,存储器22以及处理器23。

在本实施例中,存储器22、处理器23可以通过通信总线实现相互间的通信,且存储器22、处理器23及通信总线的数量可以为至少一个。

磁盘21是一种数据存储设备,主要用于存储数据,本申请对该磁盘的具体结构不做限定,本实施例中的多个磁盘21形成分布式存储结构,具体实现过程本实施例不做详述。

在实际应用中,该计算机设备还可以包括通信接口,具体可以是无线通信模块和/或有线通信模块的接口,如wifi模块、gprs模块、gsm模块等等通信模块的接口。

存储器22用于存储实现上述磁盘扩容方法的程序;

在本申请实施例中,根据需要,该存储器还可以用来存储磁盘扩容过程中产生的如哈希值等各种中间数据等。

可选的,该存储器可以存储实现上述虚拟装置包含的各功能模块的程序代码,具体可以是高速ram存储器,或者是非易失性存储器(non-volatilememory),例如至少一个磁盘存储器等。

处理器23可以是中央处理器cpu、或者是特定集成电路asic(applicationspecificintegratedcircuit),或者是被配置成实施本申请实施例的一个或多个集成电路,本申请对该处理器23的组成结构不作限定。

在本申请实施例中,处理器23用于加载并执行存储器23存储的程序,该程序主要用于:

获取待存储数据,计算所述待存储数据的数据哈希值;

依据所述待存储数据的数据哈希值,将所述待存储数据映射到哈希环,并获取所述哈希环中目标数据的数据哈希值,所述哈希环映射有第一数量个磁盘及所述磁盘中的各数据,所述目标数据包括映射到第一磁盘的数据,所述第一磁盘是所述第一数量个磁盘中,具有与所述待存储数据的数据哈希值匹配的磁盘哈希值的磁盘;

利用所述目标数据的数据哈希值以及所述待存储数据的数据哈希值,确定扩容磁盘在所述哈希环映射的磁盘哈希值;

依据所述扩容磁盘的磁盘哈希值及目标数据的数据哈希值,确定所述目标数据中的迁移数据,将所述迁移数据及所述待存储数据映射到所述扩容磁盘中。

需要说明,处理器执行程序还可以实现上述方法实施例描述的磁盘扩容方法的其他步骤,具体实现过程可以参照上述方法实施例相应部分的描述,本实施例在此不再赘述。

最后,需要说明的是,关于上述各实施例中,诸如第一、第二等之类的关系术语仅仅用来将一个操作、单元或模块与另一个操作、单元或模块区分开来,而不一定要求或者暗示这些单元、操作或模块之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法或者系统中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置、计算机设备而言,由于其与实施例公开的方法对应,所以描述的比较简单,相关之处参见方法部分说明即可。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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