分块组组建方法、装置及电子设备与流程

文档序号:27009529发布日期:2021-10-19 23:26阅读:147来源:国知局
分块组组建方法、装置及电子设备与流程

1.本技术涉及存储技术领域,尤其涉及一种分块组组建方法、装置及电子设备。


背景技术:

2.随着数据容量剧增和物理硬盘容量的不断增大,传统独立冗余磁盘阵列(redundant arrays of independent disk,raid)受限于物理硬盘个数,且重建耗时较长,为此块虚拟化技术应运而生。块虚拟化技术是将阵列内的每个物理硬盘虚化为若干个小粒度的分块(chunk,ck)并组织成存储池,其中,在存储池内是通过对属于同一物理硬盘的分块进行组织生成对应的虚拟硬盘(以下称存储硬盘),以及对属于同一物理节点的物理硬盘进行组织生成对应的虚拟节点(以下称存储节点)来实现对存储资源的组织和管理的,之后再根据指定raid策略从存储池内的不同存储节点及不同存储硬盘中选取多个ck组成一个分块组(chunk group,ckg),再由多个ckg组成一个raid提供给上层使用。
3.利用现有的组建ckg算法选取存储池内的存储节点及存储硬盘等资源时,无法很好地满足均衡和离散的需求,常存在某些存储节点或存储硬盘被过度分配,造成负载不均衡的问题。因此,亟需一种能兼顾离散和均衡的ckg组建算法。


技术实现要素:

4.鉴于上述问题,本技术提供一种解决上述问题或至少部分地解决上述问题的分块组组建方法、装置及电子设备。
5.在本技术的一个实施例中,提供了一种分块组组建方法。该方法包括:
6.接收携带第一数量的分块组组建请求后,确定存储元列表的可选存储元个数;
7.基于随机数和所述可选存储元个数确定一个位置标识;
8.选取所述存储元列表中所述一个位置标识对应的存储元;
9.根据所述存储元确定所述第一分块组中的一个组元;
10.确定所述第一分块组包括的组元的数量是否小于所述第一数量;
11.若确定所述第一分块组包括的组元的数量小于所述第一数量,则改变所述存储元在所述存储元列表总的位置,并返回执行所述确定存储元列表的可选存储元个数的步骤;若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。
12.在本技术的另一实施例中,提供了一种分块组组建装置。该装置包括:
13.第一确定模块,用于接收携带第一数量的分块组组建请求后,确定存储元列表的可选存储元个数;
14.第二确定模块,用于基于随机数和所述可选存储元个数确定一个位置标识;
15.选取模块,用于选取所述存储元列表中所述位置标识对应的存储元;
16.第三确定模块,用于根据所述存储元确定第一分块组中的一个组元;
17.第四确定模块,用于确定所述第一分块组包括的组元的数量是否小于所述第一数
量;
18.执行模块,用于若确定所述第一分块组包括的组元的数量小于所述第一数量,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定所述存储元列表中的可选存储元个数的步骤;若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。
19.在本技术的又一个实施例中,提供了一种电子设备。该电子设备包括:存储器和处理器;所述存储器用于存储一条或多条计算机指令,所述一条或多条计算机指令被所述处理器执行时能够实现上述所述分块组组建方法中的步骤。
20.本技术实施例提供的技术方案,在接收携带第一数量的分块组组建请求后,将会确定存储元列表中的可选存储元个数,并进一步地基于随机数和所述可选存储元个数确定出一个位置标识,从而选取所述存储元列表中所述位置标识对应的存储元,并根据所述存储元来确定出第一分块组中的一个组元。之后,再进一步地确定所述第一分块组包括的组元的数量是否小于所述第一数量,且若确定所述第一分块组包括的组元的数量小于所述第一数量时,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定所述存储元列表的可选存储元个数的步骤;而若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。利用本技术方案在选取存储元以组建分块组时,既可以保证存储元列表中的存储元(如存储节点或存储硬盘)资源得到均衡使用,又可以组建出具有最佳隔离等级的分块组,同时还支持动态适应不同隔离等级的分块组组建,且方案简单、高效。
附图说明
21.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要利用的附图作一简单地介绍,显而易见地,下面描述中的附图是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
22.图1为本技术一实施例提供的分块组组建方法的流程示意图;
23.图2a为本技术一实施例提供的一存储系统的原理性示意图;
24.图2b为本技术一实施例提供的一存储池的原理性示意图;
25.图3a为本技术一实施例提供的为分块组组建时选取对应的存储节点的原理性示意图;
26.图3b为本技术一实施例提供的为欲分块组组建时选取对应的存储硬盘的原理性示意图;
27.图4为本技术另一实施例提供的分块组组建方法的流程示意图;
28.图5为本技术一实施例提供的分块组组建装置的结构框图;
29.图6为本技术一实施例提供的电子设备的结构框图。
具体实施方式
30.为了解决上述问题,本技术一个或多个实施例提出一种分块组组建方法,利用该方法能够保证对存储节点和存储硬盘等资源的均衡使用,并可以组建出具有最佳隔离等级
(即节点级隔离)的分块组,同时还支持动态适应不同隔离等级的分块组组建(如硬盘级隔离、分块级隔离)。具体关于节点级隔离、硬盘级隔离及分块级隔离的相关介绍,可参见下述相关内容,此处不作赘述。
31.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述。
32.在本技术的说明书、权利要求书及上述附图中描述的一些流程中,包含了按照特定顺序出现的多个操作,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。操作的序号如101、102等,仅仅是用于区分各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。而本技术中术语“或/和”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如:a或/和b,表示可以单独存在a,同时存在a和b,单独存在b这三种情况;本技术中字符“/”,一般表示前后关联对象是一种“或”关系。此外,下述的各实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
33.在介绍本技术实施例提供的分块组组建方法之前,先对本技术提供的所述方法所基于的系统架构进行说明。
34.图2a为本技术实施例提供的一种分布式存储系统的结构示意图。如图2a所示,该存储系统包括:多个物理节点300;每个物理节点300包括多个物理硬盘310,每个物理节点可以被虚划分为多个分块;其中,物理节点300,是一个连接到网络的电子设备,能够通过通信通道发送、接收或转发信息,且其上存在多个物理硬盘。物理节点300可以是服务器、工作站等,但不限于此。
35.该存储系统可以对系统内的物理节点300中的物理硬盘进行集中管理。具体地,可采用块虚拟化技术,比如独立磁盘冗余数据组raid2.0技术,分别将存储系统内指定的不同物理节点下的不同物理硬盘虚划分成为若干个相同大小的分块并组织形成一存储池以进行集中管理;其中,在该存储池内属于同一物理硬盘的分块会被组织在一起生成相对应的虚拟硬盘,以及属于同一物理节点的物理硬盘会被组织在一起生成相对应的虚拟节点。即也就是说,上述存储池内包含有多个虚拟节点、一个虚拟节点包含多个虚拟硬盘,一个虚拟硬盘又可以包含多个相同大小的分块。例如,参见图2b所示,假设采用块虚拟化技术分别对从图2a示出的分布式存储系统的4个物理节点300所选取出的4块物理硬盘310进行处理并组成一存储池,则即:该存储池内包含有4个虚拟节点,比如图2b中示出的虚拟节点1、虚拟节点2、虚拟节点3、虚拟节点4;每个虚拟节点下包含4块虚拟硬盘,比如图2b中示出的虚拟节点1所包含的虚拟硬盘11、虚拟硬盘12、虚拟硬盘13及虚拟硬盘14;每块虚拟硬盘包含有多个相同大小的分块(图2b中未出)。需说明的是:上述存储池内的虚拟节点与其相应的物理节点、虚拟硬盘与其相应的物理硬盘均是一一映射的关系。此外,在本技术上下文中出现的存储节点即为虚拟节点、存储硬盘即为虚拟硬盘。
36.这样,后续基于存储池内的存储资源(如存储节点、存储硬盘及分块),即可组建分块组,以便利用所组建出的分块组存储数据。分块组中分块的数量是根据具体存储任务来
确定的。例如:存储任务是将待存储数据以多副本形式进行存储,那么,对应的分块组中分块的数量就是副本数;具体地,如存储任务是将待存储数据以两副本形式存储,则对应要求分块组包含的分块的数量即为2。再例如:存储任务是将待存储数据以纠删码形式进行存储,那么,对应的分块组中分块的数量就是划分该待存储数据得到的数据块数量和校验块数量之和;具体地,如若存储任务是将待存储数据以2+1纠删码形式存储,那么对应要求分块组包含的分块的数量即为3;其中,2+1纠删码存储形式即指将待存储数据划分成2个数据块,并利用该2个数据块编码生成1个校验块进行存储。具体关于多副本和纠删码的介绍可参见现有技术。
37.在本技术实施例中,基于存储池内的存储资源,可根据存储任务所需要的分块数量并结合用户要求的隔离等级,采用一种均衡循环随机选取算法组建出具有相应隔离等级的分块组,有关均衡随机选取算法的相关介绍及分块组组建的具体过程可参见下述相关内容,此处不作具体赘述。此外,上述隔离等级是与分块组的多个分块在存储系统中分布的离散程度有关的,具体地,根据分块组的多个分块在存储系统中的分布情况,可以将分块组对应的隔离等级划分为:节点级隔离、硬盘级隔离及分块级隔离。节点级隔离是指分块组内的多个分块来自于存储系统的存储池中的不同存储节点,也即分块组内的多个分块来自于不同存储节点下的不同存储硬盘;硬盘级隔离是指分块组内的多个分块并不完全来自于存储系统的存储池中的不同存储节点(也即分块组中存在两个及以上分块来自于同一存储节点),但来自于存储系统的存储池中的不同存储硬盘;分块级隔离是指分块组内的多个分块并不完全来自于存储系统的存储池中的不同存储硬盘,也即分块组中存在两个及以上分块来自于同一存储硬盘。可见,节点级隔离的分块组的多个分块在存储系统中分布的离散程度,明显大于硬盘级隔离的分块组的多个分块在存储系统中分布的离散程度;硬盘级隔离的分块组的多个分块在存储系统中分布的离散程度,明显大于分块级隔离的分块组的多个分块在存储系统中分布的离散程度。而由于分块组的多个分块在存储系统中的离散程度越大,在利用该分块组存储数据时,该分块组所存储的数据可靠性就越高,所以节点级隔离被视为分块组的最佳隔离等级。
38.在一实施例中,如图2a所示,该存储系统还可包括处理节点400。上述存储池的组织形成,以及分块组组建均可由该处理节点400完成。有关处理节点400组建分块组的具体工作流程将在以下各实施例中作详细说明。
39.为了保证在分块组组建过程中,既可以均衡利用系统内的存储资源(如存储节点、存储硬盘),又可以组建出具有最佳隔离等级的分块组,同时还能够支持动态适应不同隔离等级的分块组组建,本技术方案将分块组的组建过程简化为:存储节点选取(即优选为分块组内的每个分块分配所属存储节点);继而基于选取出的存储节点来选取存储硬盘(即分别基于分块组的每个分块所属存储节点来为其分配所属存储硬盘);从而再从选取出的存储硬盘中选取空闲分块,以此来实现分块组的组建。具体实施时,本技术实施例将依据上述分块组的组建过程,采用一种均衡循环随机选取算法来分别实现在组建分块组时所涉及到的存储节点选取及存储硬盘选取,从而实现本技术所要达到的技术效果。下面针对本技术方案在分块组组建过程中所涉及到的存储节点或存储硬盘选取时,所采用到的一种均衡随机选取算法进行介绍说明。具体地,该均衡随机选取算法的工作流程如下:
40.步骤00、可选地,判断所需的目标存储元数量是否大于存储元列表中的存储元总
数,若所需的目标存储元数量大于存储元总数,则表明无法完成目标存储元数量的选取,向用户反馈选取失败的提示信息;
41.步骤01、在一轮选取开始之初,将已选取存储元数量的数值置为零;另外,若选取次数的数值大于或等于存储元总数,则将所述选取次数的数值也置为零;
42.步骤02、根据所述已选取存储元数量和所述选取次数的大小关系,并结合存储元总数,确定存储元列表中的可选存储元个数,具体地:
43.(1)若所述已选取存储元数量大于或等于所述选取次数,则所述可选存储元个数为:
44.可选存储元个数=存储元总数

已选取存储元数量;
45.(2)若所述已选取存储元数量小于所述选取次数,则所述可选存储元个数为:
46.可选存储元个数=存储元总数

选取次数;
47.步骤03、在完成所述可选存储元个数计算后,随机生成一个随机数,并利用该随机数对所述可选存储元个数取余,以根据取余得到的余值获得目标存储元在存储元列表中的位置标识;
48.步骤04、从所述存储元列表中的对应位置标识处获取到相应的存储元,作为目标存储元;并更新该存储元在存储元列表中的位置,即将该存储元移至存储元列表中的尾部,并前移位于该存储元之后的所有存储元的位置;
49.步骤05、分别更新所述已选取存储元数量和所述选取次数,即将所述已选取存储元数量和所述选取次数均增加一;
50.步骤06、若更新后的所述选取次数大于或等于存储元总数,则将更新后的所述选取次数置为零;
51.步骤07、可选地,判断选取出的存储元是否符合需求,若不符合需求则转步骤02;
52.步骤08、判断是否完成了所需的目标存储元数量的选取,若否则转步骤02;
53.步骤09、返回选取的目标存储元,选取完成。
54.这里需要说明的是:上述选取次数为一个持续值,初始值可以为零,其所能够到达的最大值与存储元列表中的存储元总数相关,即在后续中只有该选取次数的数值等于存储元总数的情况下,该选取次数才会被重置为对应的初始值,如零;所述可选存储元个数,表示存储元列表中可参与选取过程的存储元个数,其值可能会随着选取过程而变化,如若要求选取出的存储元不可重复,则一次选取中已选取过的存储元便不归属于可选存储元。另外,上述存储元可依据具体应用的对象进行变更,对于本技术方案而言,上述存储元可以指存储节点或存储硬盘。
55.基于上述实施例介绍的均衡循环随机选取算法,本技术一实施例提供了一种分块组组建方法。参见图1示出的本技术一实施例提供的分块组组建方法的流程示意图。该方法的执行主体可以为如图2a所示的分布式存储系统中的处理节点400,该处理节点可以是上述分布式存储系统中多个物理节点300中的一个,也可以是区别于上述多个物理节点300的其他节点,本技术实施例对此不做具体限定;其中,处理节点可以是常用服务器、云端或虚拟服务器,本技术实施例对此不作具体限定。如图1所示,该方法包括以下步骤:
56.101、接收携带第一数量的分块组组建请求后,确定存储元列表的可选存储元个数;
57.102、基于随机数和所述可选存储元个数确定一个位置标识;
58.103、选取所述存储元列表中所述第一位置标识对应的存储元;
59.104、根据所述存储元确定第一分块组中的一个组元;
60.105、确定所述第一分块组包括的组元的数量是否小于第一数量;
61.106、若确定所述第一分块组包括的组元的数量小于第一数量,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定所述存储元列表中的可选存储元个数的步骤;若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。
62.上述101中,所述第一数量指的是要求分块组中包含的分块的数量,其可以根据具体存储任务确定。有关如何根据存储任务确定第一数量(即分块组中需包含的分块的数量),可参见上述各实施例中的相关内容,此处不再作具体赘述。
63.对于步骤101中的所述存储元列表可以是针对诸如图2a示出的存储系统所对应的如图2b示出的存储池内的存储元资源(如存储节点、存储硬盘)进行创建的,以便于对存储元资源进行组织和管理。有关对存储池的具体描述可参见上述相关内容,此处同样也不再作具体赘述。
64.在具体实施时,上述存储元列表中的存储元可以为存储池内的存储节点或存储硬盘,此处不作限定。存储元列表为用于记录存储池内存在的存储节点或一个存储节点包含的存储硬盘的清单。在存储元列表中可以具体记录了但不限于:“存储元标识”,用于表征存储元,所述存储元标识的形式可以为存储元的名称、ip地址等;“状态标识”,用于指示存储元在所述存储元列表中所处的状态,比如可选取状态或非可选取状态;“位置标识”,用于标识存储元在所述存储元列表中的位置,具体地,可以按存储元在存储元列表中的排列顺序对其位置进行编号,该编号即为存储元的位置标识;其中,存储元在存储元列表中的排列顺序可以按照存储元的优先级顺序进行确定,也可以采用随机方式进行确定,此处不作限定。在基于存储元在存储列表中的排列顺序对其位置进行编号时,可以将阿拉伯数据0或1作为起始位置编号,为了便于描述,本实施例将以0作为起始位置编号,并以递增方式来标注所述多个存储元各自在所述存储元列表中对应的位置标识。
65.举例来说,假设存储元列表中包括的4个存储元在存储元列表中的排列顺序依次为存储元1、存储元2、存储元3、存储元4,则存储元1的位置标识为0,所述存储元2的位置标识为1,以此类推,可得到存储元3和存储元4各自对应的位置标识,具体结果可参见下述存储元列表1。
66.存储元列表1
67.位置标识0123存储元标识1*2*3*4*
68.其中,存储元列表1中的“*”用于指示存储元在存储元列表中处于可选取状态,存储元1对应的存储元标识为1,存储元2对应的存储元标识为2,存储元3对应的存储元标识为3、存储元4对应的存储元标识为4。
69.在一种可实现的技术方案中,上述步骤101中的“确定存储元列表的可选存储元个数”,可具体包括:
70.1011、确定选取参数集;
71.1012、获取所述存储元列表的存储元总数;
72.1013、根据所述选取参数集和所述存储元总数,确定所述存储元列表的可选存储元个数。
73.具体实施时,所述选取参数集可包含有已选取存储元数量和选取次数;其中,所述已选取存储元数量指的是针对第一分块组组建过程中当前已选取出的存储元数量;所述选取次数为一个持续值,其所能够到达的最大值与存储元列表中的存储元总数相关,即在后续中只有所述选取次数的数值等于存储元总数的情况下,所述选取次数才会被重置为对应的初始值,如零。在确定已选取存储元数量和选取次数,且获取到所述存储元列表的存储元总数的情况下,可依据当前已选取存储元数量和选取次数间的大小关系,并结合所述存储元总数来确定所述存储元列表的可选取存储元个数。即,在所述选取参数集包括已选取存储元数量和选取次数时,上述步骤1013“根据所述选取参数集和所述存储元总数,确定所述存储元列表的可选存储元个数”,可具体采用如下步骤来实现:
74.a10、确定所述已选取存储元数量的参数值是否小于所述选取次数的参数值;
75.a11、若确定所述已选取存储元数量的参数值大于或等于所述选取次数的参数值,则根据所述存储元总数和所述已选取存储元数量确定所述可选存储元个数;
76.a12、若确定所述已选取存储元数量的参数值小于所述选取次数的参数值,则根据所述存储元总数和所述选取次数,确定所述可选存储元个数。
77.具体实施时,在所述已选取存储元数量的参数值大于或等于所述选取次数的参数值时,可以计算所述存储元总数与所述已选取存储元数量间的第一差值,将所述第一差值作为所述可选取存储元个数。反之,在所述已选取存储元数量的参数值小于所述选取次数的参数值时,则可以计算所述存储元总数与所述选取次数间的第二差值,将所述第二差值作为所述可选取存储元个数。上述在计算所述第一差值时,可以采用所述存储元总数减去所述已选取存储元数量的方式,计算出所述第一差值,当然并不限于此,所述第一差值还可以采用现有的其他方式计算,比如,通过求解所述存储元总数与所述已选取存储元数量间的绝对差值来计算所述第一差值。对于上述第二差值的计算方式同第一差值的计算方式,此处不再作赘述。
78.上述102中,所述随机数可以是通过随机方式生成的,当然也可以采用其他方式生成,此处不作限定。在得到生成的随机数后,可以利用该随机数对所述可选取存储元个数取余,从而根据取余所得到的余值来确定出一个位置标识。即上述步骤102“基于随机数和所述可选存储元个数确定一个位置标识”的一种可实现技术方案为:
79.1021、利用所述随机数对所述可选存储元个数取余,得到余值;
80.1022、根据所述余值,确定出所述位置标识。
81.具体实施时,在利用所述随机数对所述可选存储元个数进行取余得到一余值后,可以将该余值直接作为所述位置标识,当然也可以对该余值进行变换处理(如将余值加一),将变换处理后的余值作为所述位置标识,此处并不作限定。为了便于描述,本实施例是将上述余值直接作为所述位置标识。
82.上述103中,基于经由步骤102确定出的所述位置标识,可进一步地从所述存储元列表中选取出该位置标识所对应位置处的存储元,以便根据该存储元来确定第一分块组中的一个组元。例如,参见上文示出的存储元列表1,若确定出的位置标识为1,则选取出的存
储元即为存储元列表1中位置标识为1所对应位置处的存储元,即存储元标识为2的存储元,也即存储元2。
83.上述104中,关于如何根据步骤103所选取出的存储元来确定出第一分块组中的一个组元将在下文中进行详细描述,为此具体可参见下述相关内容,此处不作赘述。
84.上述105至106中,在根据经由步骤103所选取出的存储元确定出第一分块组中的一个组元后,可以进一步地确定所述第一分块组包括的组元的数量是否小于第一数量,且若确定出所述第一分块组包括的组元的数量小于第一数量的情况下,此时则改变经由步骤103所选取出的存储元在存储元列表中的位置,并返回步骤101以执行所述确定所述存储元列表中的可选存储元个数的步骤,进而重新确定所述可选存储元个数,并重新生成一个新随机数;之后,再利用重新生成的新随机数对重新确定出的所述可选存储元个数进行取余处理,以此来确定出一个新位置标识,从而选取改变后的所述存储元列表中所述新位置标识对应位置处的存储元,以根据选取出的所述新位置标识对应位置处的存储元确定出所述第一分块组中的另一个组元,基于此,不断循环重复上述选取步骤直至所述第一分块组包括的组元的数量等于所述第一数量,至此第一分块组组建完成。上述在返回重新执行所述确定存储元列表中的可选存储元个数时,是基于更新后的已选取存储元数量及更新后的选取次数间的大小关系并结合存储元列表中的存储元总数进行确定的,具体如何在选取一个存储元后对已选取存储元数量和选取次数进行更新,可参见下述相关内容,此处不作具体赘述。另外,上述步骤106中“改变所述存储元在所述存储元列表中的位置”的一种可实现技术方案为:
85.1061、将选取出的所述存储元移至所述存储元列表的尾部;
86.1062、所述存储元列表中位于选取出的所述存储元后的存储元位置前移。
87.举例来说,继续参见上文示出的存储元列表1并承接步骤103中的示例,若当前循环选取时选取出的存储元为存储元列表1中的存储元2,则将存储元2移至存储元列表1的尾部,同时将存储元列表1中位于存储元2之后的存储元3和存储元4的位置前移。此时,由于存储元2、存储元3和存储元4在存储元列表1中的排列顺序发生变化,相应地,其各自对应的位置标识也将产生相应的变更,即存储元2的位置标识由1变更为3,存储元3的位置标识由2变更为1,节点4的位置标识由3变更为2,故而改变后的存储元列表1即为如下示出的存储元列表2,在存储元列表2中存储元2的状态标识也由可选取状态被设置为不可选取状态。
88.存储元列表2
89.位置标识0123存储元标识1*3*4*2
90.基于此,在利用重新生成的新随机数对重新确定出的可选存储元个数进行取余处理,确定出一个新位置标识的情况下,即可从改变后的存储元列表1(即存储元列表2)中选取出所述新位置标识对应位置处的存储元,以便后续根据选取出的所述新位置标识对应位置处的存储元来确定出第一分块组中的另一个组元。
91.本实施例提供的技术方案,在接收到携带第一数量的分块组组建请求后,将会确定存储元列表中可选存储元个数,并进一步地基于随机生成的随机数和所述可选存储元个数来确定出一个位置标识,从而选取所述存储元列表中所述位置标识对应位置处的存储元,并根据所述存储元确定出第一分块组中的一个组元。之后,再进一步地确定所述第一分
块组包括的组元的数量是否小于第一数量,且若确定所述第一分块组包括的组元的数量小于第一数量时,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定所述存储元列表中的可选存储元个数的步骤;而若确定所述第一分块组包括的组元的数量等于第一数量时,则完成组建所述第一分块组。利用本技术方案在选取存储元以组建分块组时,既可以保证存储元列表中的存储元(如存储节点、存储硬盘)资源得到均衡利用,又可以组建出具有最佳隔离等级的分块组,同时还支持动态适应不同隔离等级的分块组组建,且方案简单、高效。上述技术效果的直观体现可参见下述所列举的相关示例,此处不作具体分析。
92.基于上文内容可知,在完成一个存储元选取后,为了便于在下一次选取时重新确定出存储元列表中的可选存储元个数,需对已选取存储元数量及选取次数进行更新。据此,本实施例提供的方法,在经由步骤103选取出所述存储元列表中所述位置标识对应的存储元之后,还包括如下步骤:
93.s11、将所述已选取存储元数量的参数值增加第一预设值,并将所述选取次数的参数值增加第二预设值;
94.s12、确定所述选取次数的参数值是否等于所述存储元总数;
95.s13、若确定所述选取次数的参数值等于所述存储元总数,则将所述选取次数的参数值置为第一初始值。
96.具体实施时,在选取出所述存储元列表中所述位置标识对应的存储元后,可以将已选取存储元数量和选取次数分别增加一,以此得到更新后的已选取存储元数量及更新后的选取次数,从而便于在下一次选取存储元时,根据更新后的已选取存储元数量及更新后的选取次数,重新确定出存储元列表中的可选存储元个数,具体重新确定存储元列表中的可选存储元个数过程可参见上述相关内容,此处不再作赘述。
97.需要说明的是,由于选取次数所能够到达的最大数值与存储元列表中的存储元总数相关,若在更新后的选取次数等于存储元总数的情况下,可将选取次数的参数值置为第一初始值,进而再基于更新后的已选取存储元数量和更新后的重置为第一初始值的选取次数来重新确定出存储元列表中的可选存储元个数。上述第一初始值具体可以为零,当然也可以是其他数值,本实施例对此并不作限定。
98.还需说明的是:在准备开始组建一分块组之初,该分块组所对应的已选取存储元数量的参数值通常需被置为零。基于此,在上述步骤101中“确定存储列表的可选存储元个数”之前,本实施例提供的方法还包括如下步骤:
99.将所述已选取存储元数量的参数值重置为第二初始值。
100.具体实施时,上述第二初始值具体可以为零,当然也可以是其他数值,本实施例对此并不作限定。
101.另外,考虑到在实际组建分块组过程中,往往需要组建的分块组个数为多个,如2个或3个等,由于上述已选取存储元数量表征针对组建第一分块组已选取出的存储元数量,当已选取存储元数量达到组建第一分块组要求的数量时,则说明完成了第一分块组要求的存储元数量选取。
102.进一步地,本实施例提供的所述方法,还包括:存储池包含多个存储节点,每个存储节点包含多个存储硬盘,每个存储硬盘包含多个分块;相应地,上述存储元列表含有顺利
排列的多个存储节点或者多个存储硬盘,即上述存储元为存储节点或存储硬盘。基于此,在一具体可实现的技术方案中,若上述所述存储元列表中含有顺利排列的多个存储硬盘;则相应地,上述步骤103中“根据所述存储元确定第一分块组中的一个组元”,可具体包括如下步骤:
103.获取所述存储硬盘中的至少一个空闲分块;
104.将所述至少一个空闲分块中的一个空闲分块作为所述第一分块组中的一个组元。
105.具体实施时,可以采用随机选取方式选取出至少一个空闲分块中的一个空闲分块来作为第一分块组中的一个组元,当然也可以采用其他选取方式,对此本实施例并不作具体限定。
106.在另一具体可实现的技术方案中,若上述所述存储元列表中含有顺序排列的多个存储节点;则相应地,上述步骤103中“根据所述存储元确定第一分块组中的一个组元”,可具体包括如下步骤:
107.1031、获取所述存储节点对应的存储硬盘列表;
108.1032、利用均衡随机选取算法从所述存储硬盘列表中选取存储硬盘;
109.1033、将选取出的存储硬盘中的一个空闲分块,作为所述第一分块组中的一个组元。
110.上述1031中,可将所述存储硬盘列表简单的理解为用于记录所述存储节点下所包括的多个存储硬盘的清单。例如,参见图2b所示,若存储节点为图2b中示出的存储节点3(即虚拟节点3),则存储硬盘列表为用于记录存储节点3下所包括的存储硬盘31(即虚拟硬盘31)、存储硬盘32(即虚拟硬盘32)、存储硬盘33(即虚拟硬盘33)及存储硬盘34(即虚拟硬盘34)的清单。具体存储硬盘列表的形式可参见上述示出的存储元列表1或图3a中示出的存储节点列表,或者也可参见图3b中示出的存储硬盘列表。
111.上述1032中“利用均衡随机选取算法从所述存储硬盘列表中选取存储硬盘”,可具体采用如下步骤来实现:
112.a21、确定已选取存储硬盘数量和选取存储硬盘次数;
113.a22、获取存储硬盘列表中的存储硬盘总数;
114.a23、根据所述已选取存储硬盘数量、所述选取存储硬盘次数、所述存储硬盘总数及生成的随机数,确定出一个位置标识;
115.a24、选取所述存储硬盘列表中所述位置标识对应的存储硬盘。
116.具体有关上述步骤a21至步骤a24的实现,可参见上述实施例中与存储节点选取相关的内容,此处不作具体赘述。
117.上述1033中,从所选取出的存储硬盘中选取空闲分块时,可以采用随机选取方式,当然也可以采用其他选取方式,此处不作具体限定。
118.这里需要说明的是:本实施例中的存储硬盘可以是固态硬盘(sloid state disk,ssd)、机械硬盘(hard disk drive,hdd)等存储介质,此处不作具体限定。另外,对于hdd来说,其盘片内外道的性能是存在差异的(外道性能高于内道性能),在对同一hdd内的分块进行选取时,可以不作性能上的区分,采用随机方式进行选取,当然也可以根据其性能做更细粒度的划分,按一定规则进行选取,这里同样不作具体限定。
119.为了更直观说明本实施例提供的技术方案,下面将结合图3a、图3b及图2b列举一
具体示例,详细说明本实施例在进行分块组组建时,是如何基于上述实例提供的均衡随机选取算法来选取存储节点的,并根据所选取出的存储节点来选取存储硬盘,从而基于选取出的存储硬盘选取空闲分块,以完成该分块组组建的。
120.在具体阐述本示例之前,先大概针对本示例所要组建的分块组以及本示例所涉及到的相关示意图(即图3a、图3b和图2b)进行简单介绍说明。具体地,本示例描述的是组建两个两副本类型的分块组对应的具体过程,其中,组建一个两副本类型的分块组需要两个分块,为避免单点故障,这里要求该两副本类型分块组中的两个分块属于不同存储节点且属于不同存储硬盘,即要求组建出的两副本类型的分块组具有最佳隔离等级,也就是说,在组建该两副本类型的分块组过程中,需要为其选取出两个存储节点,从而从选取出的两个存储节点中各选取一个存储硬盘,进而再从选取出的两个存储硬盘中各选取一个空闲分块,以此完成该分块组的组建。图3a示出了为组建出上述具有最佳隔离等级的两个两幅本类型的分块组对应的存储节点选取过程,该图3a中的assign_time表示已选取存储元数量(即表示组建一个分块组时为该分块组已选取出的存储节点数量),assign_cnt表示选取次数,assign_cnt为一个持续值,其所能够到达的最大值与图3a中存储节点列表中的存储节点总数相关,为此只有在assign_cnt等于存储节点列表中的存储节点总数时,才会被重置为第一初始值,如零;而图3a中的存储节点列表(如存储节点列表n1)是针对图2b中示出的存储池内的4个存储节点进行构建的,且存储节点列表中带有“*”标记的存储节点标识处于可选取状态,不带有“*”标记的节点则表示处于非可选取状态;另外,图3a中向上箭头(如箭头01)所指的存储节点对应于基于本实施例提供的均衡随机选取算法得到的位置标识,所从所述存储节点列表中选取出的存储节点;
“‑
1”表示在还未为分块组内的分块分配所属存储节点时,分块所属存储节点对应的占位符。下面先对利用本技术提供的均衡随机选取算法,分别为欲组建的两个具有最佳隔离等级的两副本类型的分块组选取对应的存储节点进行介绍说明:
121.1、第一分块组(以下简称为ckg1)组建时存储节点的选取。
122.参见图3a中示出的示意图100,在准备为ckg1中的分块选取所属存储节点之初,assign_time和assign_cnt各自对应的值均为零,二者相等,即assign_time=assign_cnt=0,为此存储元列表n1中处于可选取状态的存储节点的个数(即可选取存储节点个数)为:
123.allow_num=node_num

assign_time=4

0=4
124.其中,node_num表示存储元列表n1中的存储节点总数,即node_num=4;allow_num表示当前存储元列表n1中的可选取存储节点个数。此时利用随机生成的第一随机数对allow_num取余所可得到的余值只可能为如下数值中的一个:0、1、2或3,这里假设余值为2,则为ckg1的第1个ck分配的所属存储节点为存储节点列表n1中处于位置标识为2的存储节点,即存储节点3。对存储节点列表n1进行更新,即改变存储节点3的位置,以使存储节点3位于存储节点列表n1的尾部,同时前移位于存储节点3之后的存储节点(即存储节点4)的位置,获得更新后的存储节点列表n1(即存储节点列表n2),在存储节点列表n2中存储节点3的状态由原先的可选取状态变更为不可选取状态;之后对assign_time和assign_cnt的值均增加一,即assign_time、assign_cnt的值均由0增至为1,以便在为ckg1的第2个ck分配所属存储节点时,根据更新后的assign_time和更新后的assign_cnt,重新确定存储列表中的可选存储元个数;至此完成了欲组建的ckg1的第1个ck所属存储节点的选取。之后,基于为
ckg1的第1个ck选取出的所属存储节点3,可以再次利用本实施例提供的均衡随机选取算法从存储节点3对应的存储硬盘列表中选取出一存储硬盘,从而再从选取出的存储硬盘中选取出一空闲分块,将该空闲分块作为ckg1中的第1个ck,具体如何从存储节点3对应的存储硬盘列表中选取存储硬盘的过程将在下述示例中进行详细描述,此处不作具体赘述。
125.进一步地,基于存储节点列表n2,在准备为ckg1的第2个ck选取所属存储节点时,由于assign_time=assign_cnt=1,为此可重新确定出存储节点列表n2中的可选存储节点个数为:
126.allow_num=node_num

assign_time=4

1=3
127.此时利用重新生成的第二随机数对allow_num取余所可得到的余值只可能为如下数值中的一个:0、1或2,即也就是说,在为gck1中的第2个ck选取所属存储节点时只能从存储节点列表n2中位置标识为0、1或2对应的存储节点中选取,这里假设余值为1,即为ckg1的第2个ck选取出的所属存储节点为存储节点列表n2中处于位置标识为1的存储节点,即存储节点2。按照上述更新存储节点列表n1的更新方式,对存储节点列表n2进行更新,获得更新后的存储节点列表n2,即存储节点列表n3;然后再次对assign_time和assign_cnt的值均增加一,即assign_time、assign_cnt均由1增至为2,至此完成了ckg1的第2个ck所属存储节点的选取。之后,同样基于为ckg1的第2个ck选取出的所属存储节点2,可以再次利用本实施例提供的均衡随机选取算法,从存储节点2对应的存储硬盘列表中选取出一存储硬盘,进而再从选取出的存储硬盘选取一空闲分块,将该空闲分块作为ckg1中的第2个ck。同上,具体如何从存储节点2对应的存储硬盘列表中选取存储硬盘的过程将在下述示例中进行详细描述,此处不作具体赘述。至此,ckg1中的分块数量便达到了组建ckg1要求的数量(即2),ckg1组建完成。
128.2、第二分块组(以下简称为ckg2)组建时存储节点的选取。
129.参见图3a中示出的示意图200,在准备为ckg2的第1个ck选取所属存储节点时,已选取存储节点数量(即assign_time)的值被重置为第二初始值,比如零,即assign_time=0;而由于在完成ckg1组建时,选取次数(即assign_cnt)的值为2,小于存储节点总数值4,为此在本次为ckg2的第1个ck选取所属存储节点时,assign_cnt的值将继续得到延用,即assign_cnt=2。基于此,在准备为ckg2的第1个ck分配所属存储节点时,由于assign_time=0,assign_cnt=2,assign_time小于assign_cnt,为此可重新确定出存储节点列表n3中的可选取存储节点个数为:
130.allow_num=node_num

assign_cnt=4

2=2
131.此时利用随机重新生成的第三随机数对allow_num取余所可得到的余值只能为0或1,假设余值为1,即为ckg2的第1个ck选取出的所属存储节点为存储节点列表n3中处于位置标识为1的存储节点,即存储节点4。之后,更新存储节点列表n3,获得更新后的存储节点列表n3(即存储节点列表n4);对assign_time和assign_cnt的值均增加一,即assign_time的值由0增至为1、assign_cnt的值由2增至为3,以便在为ckg2的第2个ck选取所属存储节点时,根据更新后的assign_time和更新后的assign_cnt,重新确定存储节点列表n4中的可选存储节点个数;至此完成了ckg2的第1个ck所属存储节点的选取。之后,基于为ckg2的第1个ck选取出的所属存储节点4,可以利用本实施例提供的均衡随机选取算法从存储节点4对应的存储硬盘列表中选取出一存储硬盘,从而再从选取出的存储硬盘中选取出一空闲分块,
将该空闲分块作为ckg2中的第1个ck,具体如何从存储节点4对应的存储硬盘列表中选取存储硬盘的过程将在下述示例中进行详细描述,此处不作具体赘述。
132.进一步地,基于存储节点列表n4,准备为ckg2的第2个ck选取所属存储节点时,由于assign_time=1、assign_cnt=3,assign_time小于assign_cnt,为此可重新确定出存储节点列表n4中的可选存储节点个数为:
133.allow_num=node_num

assign_cnt=4

3=1
134.此时利用重新生成的第四随机数对allow_num取余所可得到的余值必为0,因此为ckg2的第2个ck选取出的所属存储节点为存储节点列表n4中处于位置标识为0的存储节点,即存储节点1,至此完成了ckg2的第2个ck所属存储节点的选取,之后基于为ckg2的第2个ck选取出的所属存储节点1,可以利用本实施例提供的均衡随机选取算法从存储节点1对应的存储硬盘列表中选取出一存储硬盘,从而再从选取出的存储硬盘中选取出一空闲分块,将该空闲分块作为ckg2中的第2个ck,具体如何从存储节点1对应的存储硬盘列表中选取存储硬盘的过程将在下述示例中进行详细描述,此处不作具体赘述。更新存储节点列表n4,可获得更新后的存储节点列表4(即存储节点列表n5),对assign_time和assign_cnt的值均增加一,即assign_time由1增为2、assign_cnt由3增为4。此时,由于assign_cnt等于node_num,为此将assign_cnt置为第二初始值,如零。至此,ckg2中的分块数量达到了组建ckg2要求的数量(即2),ckg2组建完成。
135.综上可以看出,在进行分块组组建过程中,利用本实施例提供的均衡随机选取算法为所组建的分块组中分块选取所属存储节点时,是对存储节点列表中的存储节点进行循环随机选取的,有效保证了存储节点列表中的每个存储节点都能被均衡选取到,方案简单、高效。此外,所组建出的分块组同时具有最佳隔离等级,即兼顾了分块组的离散程度。
136.为了便于理解在为分块组中的分块选取出所属存储节点的基础上,如何进一步地利用本实施例提供的均衡随机选取算法,基于选取出的存储节点来从存储节点对应的存储硬盘列表中选取出存储硬盘,以便基于选取出的存储硬盘选取空闲分块,从而将该空闲分块作为分块组中的分块,以完成分块组的组建,下面将承接上述图3a中示出的示例,在已为ckg1中的分块选取出相应的所属存储节点的基础上,继续以为ckg1中的分块选取所属存储硬盘为例,进行简要说明如何为分块组中的分块继续选取相应的所属存储硬盘的。具体地:
137.参见图3b并结合图2b,在图3b中,示意图10示出了为ckg1中的两个分块所选取出的所属存储节点,即ckg1的第1个分块(即ck1)所属存储节点为存储节点3,所述存储节点3下包含有4个存储硬盘,具体地为存储硬盘31、存储硬盘32、存储硬盘32和存储硬盘34,与存储节点3下的4个存储硬盘对应的存储硬盘列表即为示意图30中的硬盘列表c30;ckg1的第2个分块(即ck2)所属存储节点为存储节点2,所述存储节点2下包含有4个存储硬盘,具体地为存储硬盘21、存储硬盘22、存储硬盘22和存储硬盘24,与存储节点2下的4个存储硬盘对应的存储硬盘列表即为示意图20中的硬盘列表c20。
138.参见图3b中的示意图30,在继续准备为ckg1的ck1选取所属存储硬盘时,则要求从存储硬盘列表30中选取1个存储硬盘,在选取开始之初,已选取存储硬盘数量(即assign_time3)和选取存储硬盘次数(即assign_cnt3,其所能够达到的最大值与存储硬盘列表30中的存储硬盘总数相关)各自对应的值均为零,二者相等,为此所述存储硬盘列表c30中的可选取存储硬盘个数为:
139.allow_num3=node_num3

assign_time3=4

0=4
140.其中,node_num3表示存储节点3对应的存储硬盘列表c30中的存储硬盘总数,即node_num3=4;allow_num3表示当前存储硬盘列表c30中的可选取存储硬盘个数。此时利用随机生成的第五随机数对allow_num3取余所可得到的余值只可能为如下数值中的一个:0、1、2或3,这里假设余值为1,则为ck1选取出的所属存储硬盘为所述存储硬盘列表c30中处于位置标识为1的存储硬盘(即存储硬盘32)。更新存储硬盘列表c30,可得到更新后的存储元列表c30(即存储硬盘列表c31),需要说明的是:更新存储硬盘列表的原理同上述中存储节点列表的更新原理,具体可参见上述相关内容。之后,基于选取出的存储硬盘32,便可采用诸如随机选取方式从存储硬盘32中选取出一空闲分块,该空闲分块即为ck1。还需要说明的是:在上述为ck1选取出所属存储硬盘后,还需使assign_time3和assign_cnt3的值均增加一,即assign_time3、assign_cnt3的值均由0增至为1,由于此时assign_time3的值为1,达到了ckg1要求的从存储节点3所需选取出的存储硬盘的数量(即1),因此可表明为ckg1中的ck1所属存储硬盘选取完成。当在下一次的分块组组建时,若涉及到从存储节点3对应的存储硬盘列表中选取存储硬盘,assign_time3将被重置为第三初始值(如零),而由于assign_cnt3为1,小于node_num3(即4),若下一次的分块组组建时涉及到从存储节点3对应的存储硬盘列表选取存储硬盘,node_num3的值将会继续得到沿用,以便在下一次的分块组组建时,若涉及到从存储元节点3对应的存储硬盘列表中选取存储硬盘,基于重置为第三初始值的assign_time3及更新后的assign_cnt3,重新确定存储元节点3对应的改变后的存储硬盘列表中的可选存储硬盘个数。
141.进一步地,参见图3b中的示意图20,在继续准备为ckg1的ck2选取所属存储硬盘时,则要求从存储硬盘列表20中选取1个存储硬盘,在选取开始之初,已选取存储硬盘数量(assign_time2)和选取存储硬盘次数(assign_cnt2,其所能够达到的最大值与存储硬盘列表20中的存储硬盘总数相关)各自对应的值均为零,二者相等,为此所述存储硬盘列表c20中的可选取存储硬盘个数为:
142.allow_num2=node_num2

assign_time2=4

0=4
143.其中,node_num2表示所述存储硬盘列表c20中的存储硬盘总数,即node_num2=4;allow_num2表示当前存储硬盘列表c20中的可选取存储硬盘个数。此时利用随机生成的第六随机数对allow_num2取余所可得到的余值只可能为如下数值中的一个:0、1、2或3,这里假设余值为0,则为ck2选取出的所属存储硬盘为所述存储硬盘列表c20中处于位置标识为0的存储硬盘,即存储硬盘21。更新存储硬盘列表c20,得到更新后的存储元列表c20(即存储硬盘列表c21);之后分别更新assign_time2和assign_cnt2,即将assign_time2和assign_cnt2的值均增加一,也即assign_time2、assign_cnt2的值均由0增至为1;至此完成ckg1的ck2所属存储硬盘的选取。之后,基于所选取出的ck2所属的存储硬盘21,可利用诸如随机选取方式从存储硬盘21中选取一空闲分块,该空闲分块即为ck2。此时,由于assign_time2的值为1,达到了ckg1要求的从存储节点2中所需选取出的存储硬盘数量(即1),因此可表明为ckg1中的ck2所属存储硬盘选取完成。当在下一次的分块组组建时,若涉及到从存储节点2对应的更新后的存储硬盘列表c20中选取存储硬盘,assign_time3将被重置为第四初始值(如零),而由于assign_cnt2为1,小于node_num2(即4),若下一次的分块组组建涉及到从存储节点2对应的更新后的存储硬盘列表c20中选取存储硬盘,node_num2的值将会继续得到
沿用,以便在下一次的分块组组建若涉及到从存储元节点2对应的更新后的存储硬盘列表c20中选取存储硬盘,基于重置为第四初始值的assign_time2及更新后的assign_cnt2,重新确定存储元节点2对应的更新后的存储硬盘列表c20中的可选存储硬盘个数。
144.综上可见,在进行分块组组建时,利用本实施例提供的均衡随机算法在从选取出的存储节点中为分块组中的分块选取存储硬盘时,同样可以保证存储节点下的每个存储硬盘都能够被均衡选取到,即能够保证存储硬盘的存储空间均衡使用。
145.在实际应用中,考虑到分块组的隔离等级影响着组建该分块组所需的存储节点或存储硬盘的最低数量,例如:组建一个两副本类型分块组时,若要求该分块组的隔离等级为节点级隔离,则组建该分块组所需的存储节点的最低数量即为2,即也就是说,只有在保证存储池内的可用存储节点的数量大于或等于2的情况下,才能够完成该分块组组建,反之则无法完成该分块组组建;而若要求该分块组的隔离等级为硬盘级隔离,则组建该分块组所需的存储硬盘的最低数量即为2,即也就是说,只要保证存储池内的可用存储硬盘的数量大于或等于2的情况下,便能完成该分块组组建,反之则无法完成该分块组组建。可见,在要求组建的分块组包括的分块的数量相同情况下,节点级隔离的分块组组建能否完成主要受存储池内的可用存储节点的数量影响,硬盘级隔离的分块组组建能否完成则主要受存储池内的可用存储硬盘的数量影响。基于此,若在存储池内的可用存储节点或可用存储硬盘等资源无法满足分块组组建所需求的最低数量情况下,继续针对欲组建的分块组执行相关的存储节点或存储硬盘的选取步骤,这无疑将会导致无效动作的发生。
146.基于上文内容,针对分块组要求的不同隔离等级,本实施例将采用不同的存储资源判断内容及判断工作流程,来确定出存储池内的存储资源(如可用存储节点、可用存储硬盘)是否能对满足组建该分块组所需的存储节点或存储硬盘的最低数量,以便在不能满足组建该分块组所需的存储节点或存储硬盘的最低数量的情况下,直接终止该分块组的组建,从而避免无效动作的发生;此外,在直接终止分块组组建的同时,还可向用户反馈相应的选取失败的提示信息;所述提示信息可以为文本、图像、语音及符号等中的一种或组合。具体地,即在一种可实现的技术方案中,在接收到分块组组建请求后,若该分块组组建请求中携带隔离等级,则在准备执行步骤101中的确定存储元列表的可选存储元个数之前,本实施例提供的方法还可包括如下步骤:
147.100a、若所述隔离等级为节点级隔离或分块级隔离,则获取存储池内的可用存储节点数量,若所述可用存储节点数量小于组建第一分块组要求的存储节点数量,则向用户反馈选取失败的第一提示信息;若所述可用存储节点数量大于或等于组建第一分块组要求的存储节点数量,则根据所述存储池内的可用存储节点,确定所述存储元列表;
148.100b、若所述隔离类型为硬盘级隔离,则获取存储池内的可用存储硬盘数量,若所述可用存储硬盘数量小于组建第一分块组要求的存储硬盘数量,则向用户反馈选取失败的第二提示信息;若所述可用存储硬盘数量大于或等于组建第一分块组要求的存储硬盘数量,则根据所述存储池内的可用存储硬盘,确定所述存储元列表。
149.具体实施时,上述可用存储节点是指至少包含一块可用存储硬盘的存储节点,可用存储硬盘是指至少包含一个可用分块的存储硬盘。若分块组组建请求携带的隔离等级为节点级隔离或分块级隔离,在确定出存储池内的可用存储节点数量小于组建第一分块组要求的存储节点数量的情况下,可向用户反馈选取失败的第一提示信息;反之,在确定出存储
池内的可用存储节点数量大于或等于组建第一分块组要求的存储节点数量的情况下,则可根据存储池内的所有可用存储节点来确定出相应的存储节点列表,并根据每个可用存储节点下所包括的可用存储硬盘来确定出每个可用存储节点对应的存储硬盘列表,以便后续利用该存储节点列表以及存储节点列表中每个可用存储节点对应的存储硬盘列表组建第一分块组。若分块组组建请求携带的隔离等级为硬盘级隔离,在确定出存储池内的可用存储硬盘数量小于组建第一分块组要求的存储硬盘数量的情况下,可向用户反馈选取失败的第二提示信息;反之,反之,在确定出存储池内的可用存储硬盘数量大于或等于组建第一分块组要求的存储硬盘数量的情况下,可以根据存储池内的所有可用存储硬盘来确定出相应的存储硬盘列表,以便后续根据该存储硬盘列表组建第一分块组。有关上述不同情况下组建第一分块组的具体过程可参见上述相关内容,此处不作具体赘述。
150.这里需说明的是,上述第一提示信息或第一提示信息可以文本、图像、语音及符号等中的一种或组合,且第一提示信息和第二提示信息中的内容可以相同,也可以不同,本实施例对此不作具体限定。比如,第一提示信息的内容可以是能够反映存储池内的可用存储节点数量无法满足组建第一分块组要求的存储节点数量的信息内容;第二提示信息的内容可以是能够反映存储池内的可用存储硬盘数量无法满足组建第一分块组要求的存储硬盘数量的信息内容。
151.这里还需补充说明的是:由于硬盘级隔离的分块组是要求分块组中的每个分块来自于不同的存储硬盘即可,而节点级隔离的分块组是要求分块组中的每个分块来自于不同的存储节点且来自于不同的不存储硬盘,为此可将节点级隔离的分块组视为一种特殊的硬盘级隔离的分块组。基于此,组建一个硬盘级隔离的分块组时,若在存储池内的可用存储硬盘数量不小于该分块组所需的最低存储硬盘数量的情况下,同时该存储池内的可用存储节点数量也不小于组建相对应的节点级隔离的分块组所需的最低存储节点数量,则此时可将欲组建的硬盘级隔离的分块组中的每个分块优先分布于不同存储节点下的不同存储硬盘(即优先将该欲组建的硬盘级隔离的分块组,组建成相应的节点级隔离的分块组);之后,在继续组建相应的其他硬盘级隔离的分块组时,若在存储池内的可用存储硬盘数量仍不小于该其他分块组所需的最低存储硬盘数量的情况下,但该存储池内的可用存储节点数量却小于组建相对应的节点级隔离的分块组所需的最低存储节点数量,则此时可以进行降级来组建分块组,即此时可令组建出的硬盘级隔离的分块组中的分块存在两个分块来自于同一存储节点,这样将可以保证分块组中分块优先尽量分布至不同存储节点的不同存储硬盘,即优先保证组建出最佳隔离等级的分块组,从而利于提高分块组的存储数据的安全性,且同时还支持了动态适应不同的隔离级别的分块组组建。
152.举例来说,假设存在一存储池a,目前该存储池a内的存储资源未参与任何分块组的组建,且该存储池a包含4个存储节点(即存储节点5、存储节点6、存储节点7和存储节点8),该4个存储节点均为可用存储节点。具体地,存储节点5和存储节点6均包含一个可用存储硬盘,比如:存储节点5包含一个可用存储硬盘51,存储节点6包含一个可用存储硬盘61,且可用存储存储硬盘51和可用存储硬盘61均只包含有一个空闲分块;存储节点7包含2个可用存储硬盘,比如存储硬盘71和存储硬盘72,且存储硬盘71和存储硬盘72均包含一个空闲分块;存储节点8包含3个可用存储硬盘,比如存储硬盘81、存储硬盘82及存储硬盘83、且储硬盘81、存储硬盘82及存储硬盘83均包含2个空闲分块;综上即,该存储池内的可用存储节
点数量为4,可用存储硬盘数量为7。
153.假设欲利用该存储池a内的存储资源组建出两个具有硬盘级隔离的三副本类型分块组,由于该存储池a内的可用存储硬盘数量(即7)是不小于组建一个该硬盘级隔离的三副本类型分块组所需的最低存储硬盘数量(即3)的,且该存储池a内的可用存储节点数量(即4)也不小于组建与之相对应的节点级隔离的三副本类型分块组所需的最低存储节点数量(即3),所以在进行第一个硬盘级隔离的三副本类型分块组组建时,可以优先将该第一个硬盘级隔离的三副本类型分块组组建成相应的节点级隔离的分块组;例如,设定采用本技术实施例提供的方法在优先将该第一个硬盘级隔离的三副本类型分块组组建成相应的节点级隔离的分块组时,使得该第一个硬盘级隔离的三副本类型分块组中3个分块分别来自于存储节点5下的存储硬盘51、存储节点6下的存储硬盘61以及存储硬盘7下的存储硬盘71。则在完成该第一个硬盘级隔离的三副本类型分块组组建后,存储池a内剩余的可用存储节点数量为2(即仅剩余存储节点7和存储节点8为可用存储节点)以及剩余的可用存储硬盘数量为4(即仅剩余存储节点7下的存储硬盘72和存储节点8下的存储硬盘81、存储硬盘82和存储硬盘83为可用存储硬盘)。
154.由于上述在完成第一个硬盘级隔离的三副本类型分块组组建后,当欲继续针对第二个硬盘级隔离的三副本类型分块组组建时,虽然该在存储池a内的可用存储硬盘数量(即4)仍不小于该硬盘级隔离的三副本类型分块组组建所需的最低存储硬盘数量(即3),但该存储池内的可用存储节点数量(即2)却小于组建与之相对应的节点级隔离的三副本类型分块组所需的最低存储节点数量(即3),所以此时可以仅将该存储池内的所有可用存储硬盘(即存储硬盘72、存储硬盘81、存储硬盘82和存储硬盘83)组合在一起,创建形成一存储硬盘列表,进而利用本技术实施例提供的均衡随机选取算法从该存储硬盘列表中选取出3个存储硬盘,再分别从该3个存储硬盘中各选取出一个空闲分块,以此来完成第二个硬盘级隔离的三副本类型分块组组建,这样所组建出的第二个硬盘级隔离的三副本类型分块组中必然存在两个分块来自于同一存储节点。综上可见,以上是以降级方式来完成第一个硬盘级隔离的三副本类型分块组和第二个硬盘级隔离的三副本类型分块组的组建的,即利用本技术提供的均衡随机选取算法来组建分块组时,可以优先保证使分块组中的每个分块尽量分布至不同存储节点的不用存储硬盘(即优先保证组建出最佳隔离等级的分块组),且支持动态适应不同隔离等级的分块组组建。
155.综上所述,以上实施例提供的所述分块组组建方法可总结如图4所示出的过程。即,
156.步骤10、检验存储资源(如存储节点、存储硬盘等资源)能否满足欲组建的分块组所需的需求,若不能满足则直接返回选取失败,以避免无效动作;
157.步骤11、获取欲组建的分块组要求的存储节点数量;
158.步骤12、采用均衡随机选取算法选取存储节点;
159.步骤13、判断选取出的存储节点是否满足分块组组建的需求,若不满足则转步骤步骤12;
160.步骤14、采用均衡随机选取算法从选取出的存储节点中选取存储硬盘;
161.步骤15、判断选取出的存储硬盘是否满足分块组组建的需求,若不满足则转步骤步骤14;
162.步骤16、从选取出的存储硬盘中选取分块;
163.步骤17、判断分块是否满足分块组组建的需求,若否则转步骤步骤16;
164.步骤18、判断是否已完成分块组的组建,若未完成则转步骤步骤12;
165.步骤19、完成分块组的组建。
166.这里需要说明的是,对于步骤10可以在确定了欲组建的分块组所属类型(如两副本类型,即该分块组中需包含有两个分块)的基础上,进一步地根据欲组建的分块组对应的隔离等级来确定出欲组建的分块组所需的存储节点数量及存储硬盘数量,从而检验存储资源(如可用存储节点或可用存储硬盘等资源)能否满足欲组建的分块组的需求,若不能满足则可直接停止该分块组的组建,以避免无效动作。不过,针对不同的欲组建出的分块组的隔离等级需求,在检验存储资源能否满足欲组建的分块组所需的需求时,将会对应不同的存储资源校验内容及校验工作流程:
167.例如,对于有节点级隔离需求的欲组建出的分块组,可判断当前存储资源中的可用存储节点资源能否满足组建需求,所述可用存储节点是指至少包含一块可用存储硬盘的存储节点。在进行存储节点资源校验时,先分别获取组建ckg所需的存储节点数量和存储池内的当前可用存储节点总数;在可用存储节点总数大于或等于组建ckg所需的存储节点数量的情况下,则判定能满足组建需求,校验通过;反之,则不能满足组建需求,直接终止分块组的组建,同时向用户反馈相应的提示信息。
168.再例如,对于有硬盘级隔离需求的欲组建出的分块组,可判断当前可用存储硬盘资源能否满足组建需求,所述可用存储硬盘是指至少包含一个可用分块的存储硬盘。在进行存储硬盘资源校验时,先分别获得组建ckg所需的存储硬盘数量和存储池内的当前可用存储硬盘总数,在判定可用存储硬盘总数大于或等于组建ckg所需的存储硬盘数量情况下,则判定能满足组建需求,校验通过;反之,则不能满足组建需求,直接终止分块组组建,同时向用户反馈相应的提示信息。
169.又例如,对于有分块级隔离需求的欲组建出的分块组,可判断当前可用分块资源能否满足组建需求,所述可用分块是指未被占用且物理上可正常访问的存储硬盘空间。在进行分块资源校验时,具体校验工作流程同上述针对有节点隔离等级需求的所进行的存储节点资源校验,具体可参见上述相关内容,此处不再作赘述。
170.结合图4示出的流程图不难看出,本技术实施例提供的技术方案,既可以组建出具有最佳隔离等级的分块组,同时还适应支持不同隔离等级分块组组建。比如,欲组建一个具有最佳隔离等级的两副本类型分块组,即要求分块组的两个分块属于不同存储节点的不同存储硬盘,可依据图4示出的流程从存储资源中选取出两个存储节点,并进一步地分别从选取出的两个存储节点下各选取一个存储硬盘,从而再从选取出的存储硬盘中选取出相应的空闲分块即可完成组建,具体组建过程可参见上述相关内容,此处不作赘述;再比如,欲组建一个硬盘隔离等级的两副本类型分块组,即保证分块组中的两个分块属于同一存储节点下的不同存储硬盘,则可依据图4示出的流程从存储资源中选取一个存储节点,并从选取出的一个存储节点中选取出两个存储硬盘,从而再从选取出的两个存储硬盘中各选取一个空闲分块即可完成分块组组建,同样具体组建过程可参见上述相应内容,此处不作赘述。
171.这里需要说明的是,本技术实施例提供的技术方案适用于任何适应的场景,对此本技术实施例对具体的应用场景并不作具体限定。
172.综合上文中的内容可知,本技术实施例提供的技术方案除具有整体方案实现简单、高效,可均衡使用存储资源,可组建出具有最佳隔离等级的分组组,同时还支持动态适应不同隔离等级的分块组组建外,还具有如下至少几点有益效果:
173.1、提升业务性能。本技术实施例提供的技术方案可应用于在新增存储资源(存储节点、存储硬盘等)的场景下提升业务性能。现有技术中,当存储系统运行了一段时间后,若新增了存储资源,则往往会优先使用新增存储资源以期达到均衡使用率的效果,这将会导致新增存储资源负载,原有存储资源却未能得到充分利用等问题,从而降低了业务性能。本技术实施例提供的技术方案利用均衡随机选取算法在进行分块组组建过程中,将会公平对待存储池中的所有存储节点、所有存储硬盘,即在新增存储资源造成资源使用率不均衡的场景下仍能保证最大限度地利用存储内的所有存储硬盘的带宽资源,从而提升系统的读写性能。
174.2、提升重构性能。本技术实施例提供的技术方案是采用均衡随机算法完成分块组组建的,由于均衡随机选取算法在组建分块组能够充分利用存储池内的所述存储资源(如所有存储节点、所有存储硬盘)进行随机组合,可避免出现几个相同存储节点、存储硬盘一直进行功能组建分块组的情况发生,这能够有效保证了所组建的分块组的离散程度,且可使得当有一定数量在冗余范围内的存储节点发生异常而需重构数据时,存储池内剩余的所有存储节点的所有存储硬盘均能参与重构,提升了系统的重构性能。
175.可见,基于本技术实施例提供的技术方案在进行分块组组建时,既可有效保证存储资源的均衡使用,又能较好的兼顾组建出的分块组的离散程度,有助于提升服务集群的服务性能,且能够保证良好的重构性能,具有更广泛的应用前景。
176.图5示出了本技术一实施例提供的分块组组建装置的结构框图。如图5所示,该装置具体包括:
177.第一确定模块601,用于接收携带第一数量的分块组组建请求后,确定存储元列表的可选存储元个数;
178.第二确定模块602,用于基于随机数和所述可选存储元个数确定一个位置标识;
179.选取模块603,用于选取所述存储元列表中所述位置标识对应的存储元;
180.第三确定模块604,用于根据所述存储元确定第一分块组中的一个组元;
181.第四确定模块605,用于确定所述第一分块组包括的组元的数量是否小于第一数量;
182.执行模块606,用于若确定所述第一分块组包括的组元的数量小于所述所述第一数量,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定存储元列表的可选存储元个数的步骤;若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。
183.本实施例提供的技术方案,在接收携带第一数量的分块组组建请求后,将会确定存储元中可选存储元数量,并进一步地基于随机生成的随机数和所述可选存储元数量来确定出一个位置标识,从而选取所述存储元列表中所述位置标识对应位置处的存储元,并根据所述存储元确定第一分块组中的一个组元。之后,将再进一步地确定所述第一分块组包括的组元的数量是否小于所述第一数量,且若确定所述第一分块组包括的组元的数量小于第一数据时,则改变所述存储元在所述存储元列表中的位置,并返回执行所述确定所述存
储元列表中可选存储元个数的步骤;而若确定所述第一分块组包括的组元的数量等于所述第一数量,则完成组建所述第一分块组。利用本技术方案在选取存储元以组建分块组时,方案简单、高效,且既可以保证存储元列表中的存储元(如存储节点、存储硬盘)资源得到均衡使用,又可以确保能够组建出具有最佳隔离等级的分块组,同时还支持动态适应不同隔离等级的分块组组建。
184.进一步地,上述第一确定模块601,在用于确定存储元列表的可选存储元个数时,具体用于:确定第一选取参数集;获取所述存储元列表中的存储元总数;根据所述第一选取参数集和所述存储元总数,确定所述存储元列表中的可选存储元个数。
185.进一步地,上述第一选取参数集包括已选取存储元数量和选取次数;相应地,上述第一确定模块601,在用于根据所述第一选取参数集和所述存储元总数,确定所述存储元列表中的可选存储元个数时,具体用于:
186.确定所述已选取存储元数量的参数值是否小于所述选取次数的参数值;
187.若确定所述已选取存储元数量的参数值大于或等于所述选取次数的参数值,则根据所述存储元总数和所述已选取存储元数量确定所述可选存储元个数;
188.若确定所述已选取存储元数量的参数值小于所述选取次数的参数值,则根据所述存储元总数和所述选取次数确定所述可选存储元个数。
189.进一步地,本实施例提供的所述装置,还包括:
190.增加模块,用于在上述选取模块603用于选取所述存储元列表中所述位置标识对应的存储元后,将所述已选取存储元数量的参数值增加第一预设值,并将所述选取次数的参数值增加第二预设值;
191.第五确定模块,用于确定所述选取次数的参数值是否等于所述存储元总数;
192.第一重置模块,用于若确定所述选取次数的参数值等于所述存储元总数,则将所述选取次数的参数值置为第一初始值。
193.进一步地,本实施例提供的所述装置,还包括:
194.第二重置模块,用于在确定存储元列表的可选存储元个数之前,将所述已选取存储元数量的参数值重置为第二初始值;
195.进一步地,上述第二确定模块602,在用于基于随机数和所述可选存储元个数确定一个位置标识时,具体用于:利用所述随机数对所述可选存储元个数取余,得到余值;根据所述余值确定所述位置标识。
196.进一步地,上述执行模块606,在用于改变所述存储元在所述存储元列表中的位置时,具体用于:将选取出的所述存储元移至所述存储元列表的尾部。
197.进一步地,本实施例提供的所述装置,还包括:存储池,所述存储池包含多个存储节点,每个存储节点包含多个存储硬盘,每个存储硬盘包含多个分块;所述存储元列表含有顺序排列的多个存储节点或者多个存储硬盘。
198.进一步地,若上述存储元列表含有顺序排列的多个存储硬盘,则相应地,上述第三确定模块604,在用于根据所述存储元确定第一分块组中的一个组元时,具体用于:获取所述存储硬盘中的至少一个空闲分块;将所述至少一个空闲分块中的一个空闲分块作为所述第一分块组中的一个组元。
199.进一步地,若上述存储元列表含有顺序排列的多个存储节点;则相应地,上述第三
确定模块604,在用于根据所述第一存储元确定第一分块组中的一个组元时,具体用于:获取所述存储节点对应的存储硬盘列表;利用均衡随机选取算法从所述存储硬盘列表中选取存储硬盘;将选取出的存储硬盘中的一个空闲分块,作为所述第一分块组中的一个组元。
200.进一步地,上述第一确定模块601,在用于接收携带第一数量的分块组组建请求后,确定存储元列表的可选存储元个数时,具体还用于:
201.若所述分块组组建请求中携带节点级隔离或分块级隔离,则获取存储池内的可用存储节点数量,若所述可用存储节点数量小于组建第一分块组要求的存储节点数量,则向用户反馈选取失败的第一提示信息;若所述可用存储节点数量大于或等于组建第一分块组要求的存储节点数量,则根据所述存储池内的可用存储节点确定所述存储元列表;
202.若所述分块组组建请求中携带硬盘级隔离,则获取存储池内的可用存储硬盘数量,若所述可用存储硬盘数量小于组建第一分块组要求的存储硬盘数量,则向用户反馈选取失败的第二提示信息;若所述可用存储硬盘数量大于或等于组建第一分块组要求的存储硬盘数量,则根据所述存储池内的可用存储硬盘确定所述存储元列表。
203.这里需要说明的是:本实施例提供的分块组组建装置可实现上述图1示出的分块组组建方法实施例中描述的技术方案,上述各模块或单元具体实现的原理可参见上述图1示出的分块组组建方法实施例中的相应内容,此处不再赘述。
204.图6示出了本技术一实施例提供一个电子设备的结构示意图。如图6所示,所述电子设备包括:存储器701以及处理器702。存储器701可被配置为存储其它各种数据以支持在传感器上的操作。这些数据的示例包括用于在传感器上操作的任何应用程序或方法的指令。存储器701可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(sram),电可擦除可编程只读存储器(eeprom),可擦除可编程只读存储器(eprom),可编程只读存储器(prom),只读存储器(rom),磁存储器,快闪存储器,磁盘或光盘。
205.所述存储器701,用于存储一条或多条计算机指令;
206.所述处理器702,与所述存储器701耦合,用于执行所述存储器701中存储的所述一条或多条计算机指令,以实现上述各方法实施例提供的分块组组建方法。
207.进一步,如图6所示,电子设备还包括:通信组件703、显示器704、电源组件705及音频组件706等其它组件。图6中仅示意性给出部分组件,并不意味着电子设备只包括图6所示组件。
208.相应地,本技术实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各实施例提供的组建分块组方法步骤或功能。
209.以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
210.通过以上实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计
算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
211.最后应说明的是:以上实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1