本发明涉及分布式块存储技术领域,尤其涉及一种分布式块数据的访问方法和装置。
背景技术:
作为云存储的核心基础平台,分布式存储的重要性日益凸显。分布式存储系统通常采用多副本的方式来保存数据。数据的最小单元称之为数据块,同一个数据块的多个副本分别存放在不同服务器节点上。这种机制主要用来提升系统的可用性,即在一个副本数据损坏后,还有其他副本数据备份可用。
用户对数据的访问是很消耗服务器资源的。如果某些访问集中在当前压力很大的服务器节点上时,就会导致负载的严重失衡,使得系统难以发挥出应有的性能,上层业务受到影响。因此,需要一种能解决访问数据副本的选择的负载均衡算法。
当前负载均衡有许多算法,如轮询法、随机法。
随机法是通过系统随机函数,根据节点列表的编号来随机选择其中一台进行访问。由概率统计理论可以得知,随着调用量的增大,其实际效果越来越接近于平均分配流量到每一个节点,也就是轮询的效果,该算法没有考虑每个服务器节点的动态负载,因此,会造成服务器节点的负载不均衡。
技术实现要素:
本发明的实施例提供了一种分布式块数据的访问方法和装置,能够更好地实现均衡节点服务器的负载的效果。
为了实现上述目的,本发明采取了如下技术方案。
一种分布式块数据的访问方法,包括:
根据接收的数据访问请求,获取待访问数据块;
获取所述待访问数据块的至少两个副本分别所在的至少两个节点服务器;
根据所述至少两个节点服务器的负载值,形成至少两个数值区间;
在所述至少两个数值区间内生成一个随机数;
根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
从选择的所述节点服务器,访问所述待访问数据块的一副本。
所述根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器的步骤包括:
从各个所述数值区间的最大值中,选取大于所述随机数的最小的数值区间最大值;
获取选取的所述数值区间最大值对应的节点服务器的序号;
根据所述节点服务器的序号,选择一节点服务器。
所述根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器的步骤包括:
获取所述随机数所在的数值区间;
获取所述随机数所在的数值区间的最大值;
获取所述随机数所在的所述数值区间的最大值对应的节点服务器的序号;
根据所述节点服务器的序号,选择一节点服务器。
所述根据所述至少两个节点服务器的负载值,形成至少两个数值区间的步骤包括:
根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h];其中,h为数值区间的序号,h为整数,1≤h≤r,r为数据块的至少两个副本分别所在的节点服务器的总数量;
将Interval[h]作为第h个数值区间的最大值;将Interval[h-1]作为第h个数值区间的最小值,将第一个数值区间的最小值设为0,形成至少两个数值区间,并记录所述数值区间的最大值与所述节点服务器的序号之间的对应关系。
所述根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h]的步骤具体为根据以下公式计算:
其中,i为数据块的副本所在的节点服务器的序号,i为整数,1≤i≤r;
loadi为第i个节点服务器的负载值;
Max为所述至少两个节点服务器的负载值中的最大值。
所述根据所述随机数所在的数值区间,从所述至少两个节点服务器中,选择一节点服务器的步骤包括:
获取所述随机数所在的数值区间;
根据所述数值区间的序号与所述节点服务器的序号之间的对应关系,获取所述数值区间所在的数值区间的序号对应的节点服务器的序号;
根据获取的所述节点服务器的序号,选择一节点服务器。
所述根据所述至少两个节点服务器的负载值,形成至少两个数值区间的步骤包括:
根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h];h为数值区间的序号,h为整数,1≤h≤r,r为数据块的至少两个副本分别所在的节点服务器的总数量;
将Interval[h]作为第h个数值区间的最大值;将Interval[h-1]作为第h个数值区间的最小值,将第一个数值区间的最小值设为0,形成至少两个数值区间,并记录所述数值区间的序号与所述节点服务器的序号之间的对应关系。
所述获取所述随机数所在的数值区间的步骤包括:
当所述随机数为当前数值区间的最小值时,则将所述当前数值区间作为所述随机数所在的数值区间。
一种分布式块数据的访问装置,包括:
第一获取单元,根据接收的数据访问请求,获取待访问数据块;
第二获取单元,获取所述待访问数据块的至少两个副本分别所在的至少两个节点服务器;
第一生成单元,根据所述至少两个节点服务器的负载值,生成至少两个数值区间;
第二生成单元,在所述至少两个数值区间内生成一个随机数;
选择单元,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
访问单元,从选择的所述节点服务器,访问所述待访问数据块的副本。
所述选择单元包括:
选取子单元,从各个所述数值区间的最大值中,选取大于所述随机数的最小的数值区间最大值;
获取子单元,获取选取的所述数值区间最大值对应的节点服务器的序号;
选择子单元,根据所述节点服务器的序号,选择一节点服务器。
为所述至少两个节点服务器的负载值中的最大值。由上述本发明的实施例提供的技术方案可以看出,本发明实施例中,获取待访问数据块的至少两个副本所在的至少两个节点服务器;根据所述至少两个节点服务器的负载值,形成至少两个数值区间;在所述至少两个数值区间内生成一个随机数;根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;从选择的所述节点服务器,访问所述待访问数据块的副本,本发明能够根据节点服务器的负载来选择节点服务器,因此能够比较好地均衡节点服务器的负载。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种分布式块数据的访问方法的处理流程图;
图2为本发明实施例二提供的一种分布式块数据的访问方法的处理流程图;
图3为本发明实施例三提供的一种分布式块数据的访问方法的处理流程图;
图4为本发明实施例四提供的一种分布式块数据的访问方法的处理流程图;
图5为本发明实施例五提供的一种分布式块数据的访问方法的处理流程图;
图6为本发明实施例提供的一种分布式块数据的访问方法的区间的示意图;
图7为本发明实施例五提供的一种分布式块数据的访问装置的连接示意图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
为便于对本发明实施例的理解,下面将结合附图以几个具体实施例为例做进一步的解释说明,且各个实施例并不构成对本发明实施例的限定。
实施例1:
该实施例以三个节点服务器为例,结合图6进行描述。
如图1所示,为本发明所述的一种分布式块数据的访问方法,包括:
步骤11,根据接收的数据访问请求,获取待访问数据块;
步骤12,获取所述待访问数据块的至少两个副本所在的至少两个节点服务器。本发明实施例中,以同一个数据块有三个副本,三个副本分别分布在3个节点服务器上,也就是说,三个节点服务器分别存储有同一数据块的副本。
步骤13,根据所述至少两个节点服务器的负载值,形成至少两个数值区间;至少两个数值区间之间为连续的。图6中以连续区间为例。本发明实施例中,根据三个节点服务器的负载值,形成三个数值区间,三个数值区间分别为[0,Interval[1]],[Interval[1],Interval[2]],[Interval[2],Interval[3]]。
步骤14,在所述至少两个数值区间内生成一个随机数;
步骤15,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器。该实施例中,随机数落在数值区间的位置如图6中的箭头所示,根据随机数选择第二节点服务器。
步骤16,从选择的所述节点服务器,访问所述待访问数据块的副本。
上述实施例中,可以根据待访问数据块的副本所在的节点服务器的负载值来选择节点服务器,因此,能够很好的均衡节点服务器的负载。
实施例2:
该实施例以同一个数据块有三个副本,三个副本分别分布在3个节点服务器上为例,结合图6进行描述,与上一实施例相同的步骤不再赘述。
如图2所示,为本发明所述的一种分布式块数据的访问方法,包括:
步骤21,根据接收的数据访问请求,获取待访问数据块;
步骤22,获取所述待访问数据块的至少两个副本所在的至少两个节点服务器;
步骤23,根据所述至少两个节点服务器的负载值,形成至少两个数值区间;
其中,步骤23包括:
步骤231,根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h];其中,h为数值区间的序号,h为整数,1≤h≤r,r为数据块的至少两个副本分别所在的节点服务器的总数量;
其中,步骤231具体为根据以下公式计算:
loadi为第i个节点服务器的负载值;
Max为所述至少两个节点服务器的负载值中的最大值。
该实施例中,该步骤具体为:使用三个节点服务器的负载值,根据上述公式,计算得到Interval[1]、Interval[2]、Interval[3],其中,Interval[3]大于Interval[2],Interval[2]大于Interval[1]。
步骤232,将Interval[h]作为第h个数值区间的最大值;将Interval[h-1]作为第h个数值区间的最小值,将第一个数值区间的最小值设为0,形成至少两个数值区间,并记录所述数值区间的最大值与所述节点服务器的序号之间的对应关系。其中,数值区间的最大值和最小值为数值区间的边界值。h为数值区间的序号,h为整数,1≤h≤r。该实施例中的该步骤具体为:将第一个数值区间的最小值设为0,将Interval[1]作为第1个数值区间的最大值,形成第一数值区间;将Interval[1]作为第2个数值区间的最小值,将Interval[2]作为第2个数值区间的最大值,形成第2数值区间;将Interval[2]作为第3个数值区间的最小值,将Interval[3]作为第3个数值区间的最大值,形成第3数值区间;记录各个数值区间的最大值与各个节点服务器的序号之间的对应关系,对应关系具体为:Interval[1]与第一节点服务器对应,Interval[2]与第二节点服务器对应;Interval[3]与第三节点服务器对应。
步骤24,在所述至少两个数值区间内生成一个随机数;
步骤25,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
其中,步骤25包括:
步骤251,从各个所述数值区间的最大值中,选取大于所述随机数的最小的数值区间最大值。该实施例中的该步骤具体为:随机数为箭头所指的位置;大于所述随机数的最小的数值区间最大值为Interval[2]。
步骤252,获取选取的所述数值区间最大值对应的节点服务器的序号。该实施例中的该步骤具体为:Interval[2]对应的节点服务器的序号为2。
步骤253,根据所述节点服务器的序号,选择一节点服务器。该实施例中的该步骤具体为:选择第二节点服务器。
步骤26,从选择的所述节点服务器,访问所述待访问数据块的副本。该实施例中的该步骤具体为:从第二节点服务器,访问所述待访问数据块的副本。
上述实施例中,可以根据待访问数据块的副本所在的节点服务器的负载值来选择节点服务器,因此,能够很好的均衡节点服务器的负载。
实施例3
本发明实施例中,同一个数据块有三个副本,三个副本分别分布在3个节点服务器上,也就是说,三个节点服务器分别存储有同一数据块的副本。结合图6进行描述,与上一实施例相同的步骤不再赘述。
如图3所示,为本发明所述的一种分布式块数据的访问方法,包括:
步骤31,根据接收的数据访问请求,获取待访问数据块;
步骤32,获取所述待访问数据块的至少两个副本所在的至少两个节点服务器;
步骤33,根据所述至少两个节点服务器的负载值,形成至少两个数值区间;
其中,步骤33包括:
步骤331,根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h];其中,h为数值区间的序号,h为整数,1≤h≤r,r为数据块的至少两个副本分别所在的节点服务器的总数量;
其中,步骤331具体为根据以下公式计算:
其中,i为数据块的副本所在的节点服务器的序号,i为整数,1≤i≤r;
loadi为第i个节点服务器的负载值;
Max为所述至少两个节点服务器的负载值中的最大值。
该实施例中,该步骤具体为:使用三个节点服务器的负载值,根据上述公式,计算得到Interval[1]、Interval[2]、Interval[3]。Interval[1]、Interval[2]、Interval[3]分别根据以下公式计算:
h为数值区间的序号,h为整数,1≤h≤3,i为数据块的副本所在的节点服务器的序号,i为整数,1≤i≤3。
步骤332,将Interval[h]作为第h个数值区间的最大值;将Interval[h-1]作为第h个数值区间的最小值,将第一个数值区间的最小值设为0,形成至少两个数值区间,并记录所述数值区间的最大值与所述节点服务器的序号之间的对应关系;h为数值区间的序号,h为整数,1≤h≤r。该实施例中的该步骤具体为:将第一个数值区间的最小值设为0,将Interval[1]作为第1个数值区间的最大值,形成第一数值区间;将Interval[1]作为第2个数值区间的最小值,将Interval[2]作为第2个数值区间的最大值,形成第2数值区间;将Interval[2]作为第3个数值区间的最小值,将Interval[3]作为第3个数值区间的最大值,形成第3数值区间;记录各个数值区间的最大值与各个节点服务器的序号之间的对应关系,对应关系具体为:Interval[1]与第一节点服务器对应,Interval[2]与第二节点服务器对应;Interval[3]与第三节点服务器对应。
步骤34,在所述至少两个数值区间内生成一个随机数;
步骤35,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
其中,步骤35包括:
步骤351,获取所述随机数所在的数值区间;该实施例中的该步骤具体为:随机数为图6中所示箭头所指的位置;随机数所在的数值区间为第二数值区间。
步骤352,获取所述随机数所在的数值区间的最大值;该实施例中的该步骤具体为:获取第二数值区间的最大值为Interval[2]。
步骤353,获取所述随机数所在的所述数值区间的最大值对应的节点服务器的序号;该实施例中的该步骤具体为:获取Interval[2]对应的节点服务器的序号为2。
步骤354,根据所述节点服务器的序号,选择一节点服务器。该实施例中的该步骤具体为:选择第二节点服务器。
步骤36,从选择的所述节点服务器,访问所述待访问数据块的副本。该实施例中的该步骤具体为:从第二节点服务器,访问所述待访问数据块的副本。
上述实施例中,可以根据待访问数据块的副本所在的节点服务器的负载值来选择节点服务器,因此,能够很好的均衡节点服务器的负载。
实施例4
本发明实施例中,同一个数据块有三个副本,三个副本分别分布在3个节点服务器上,也就是说,三个节点服务器分别存储有同一数据块的副本。结合图6进行描述,与上一实施例相同的步骤不再赘述。
如图4所示,为本发明所述的一种分布式块数据的访问方法,包括:
步骤41,根据接收的数据访问请求,获取待访问数据块;
步骤42,获取所述待访问数据块的至少两个副本所在的至少两个节点服务器;
步骤43,根据所述至少两个节点服务器的负载值,形成至少两个数值区间;
步骤43包括:
步骤431,根据所述至少两个节点服务器的负载值,分别计算数值区间的边界值Interval[h];其中,i为数据块的副本所在的节点服务器的序号,i为整数,1≤i≤r;r为数据块的副本所在的节点服务器的总数量;
其中,步骤431具体为根据以下公式计算:
其中,loadi为第i个节点服务器的负载值;
Max为所述至少两个节点服务器的负载值中的最大值。
步骤432,将Interval[h]作为第h个数值区间的最大值;将Interval[h-1]作为第h个数值区间的最小值,将第一个数值区间的最小值设为0,形成至少两个数值区间,并记录所述数值区间的序号与所述节点服务器的序号之间的对应关系,h为数值区间的序号,h为整数,1≤h≤r。该实施例中的该步骤具体为:Interval[3]大于Interval[2],Interval[2]大于Interval[1]。将第一个数值区间的最小值设为0,将Interval[1]作为第1个数值区间的最大值,形成第一数值区间;将Interval[1]作为第2个数值区间的最小值,将Interval[2]作为第2个数值区间的最大值,形成第2数值区间;将Interval[2]作为第3个数值区间的最小值,将Interval[3]作为第3个数值区间的最大值,形成第3数值区间;记录所述数值区间的序号与所述节点服务器的序号之间的对应关系,对应关系具体为:Interval[1]与第一节点服务器对应,Interval[2]与第二节点服务器对应;Interval[3]与第三节点服务器对应。
步骤44,在所述至少两个数值区间内生成一个随机数;
步骤45,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
步骤45包括:
步骤451,获取所述随机数所在的数值区间。当所述随机数落在数值区间的边界时,例如当所述随机数为当前数值区间的最小值时,则将所述当前数值区间作为所述随机数所在的数值区间。该实施例中的该步骤具体为:随机数为图6中所示箭头所指的位置;随机数所在的数值区间为第二数值区间。
步骤452,根据所述数值区间的序号与所述节点服务器的序号之间的对应关系,获取所述数值区间所在的数值区间的序号对应的节点服务器的序号。该实施例中的该步骤具体为:第二数值区间对应的节点服务器的序号为2。
步骤453,根据获取的所述节点服务器的序号,选择一节点服务器。该实施例中的该步骤具体为:选择第二节点服务器。
步骤46,从选择的所述节点服务器,访问所述待访问数据块的副本。
上述实施例中,可以根据待访问数据块的副本所在的节点服务器的负载值来选择节点服务器,因此,能够很好的均衡节点服务器的负载。
实施例5
本发明提供一种分布式块存储中的负载均衡方法,针对资源访问热度不均的问题,提供了一种简单有效的负载均衡算法。本发明根据系统各节点的负载统计,动态设置负载权重,并根据权重选择出最适合的节点,以此来解决负载均衡问题。
当每次读取数据(待访问数据块)时,依据算法选出的节点服务器来读取相应的副本。假设当前系统是三个副本,分别存放在三个节点服务器上,分别为node1,node2,node3。通过各节点服务器上的综合负载状态,量化出三个节点的负载值分别为load1,load2,load3。负载值可以根据任务完成状态统计得出,与系统的多种因素相关,节点服务器的负载状态与负载值成正比,负载越大,负载值越大。也就是说,负载值根据以下一个或者多个的因素综合计算得到:节点服务器的CPU的大小和使用率、节点服务器的内存的使用率、节点服务器的剩余存储空间、当前节点服务器与其他节点服务器通信的通道个数(连接数)。
如图5所示,该应用场景的方法包括以下步骤:
首先,接收到访问数据请求;
然后,访问到对应的数据块;
然后,获取数据块对应节点的负载值loadi,计算三个负载的最大值Max,即Max=max(load1,load2,load3)。
然后,取各个负载数值的倒数,并依次排序形成一个区间,计算各个节点所对应的区间。公式如下:
其中:
i为整数,1≤i≤r,表示节点服务器的序号。
r为副本的总数量,也就是存储同一副本的节点服务器的总数量,此处为3。
loadi表示第i个节点服务器的负载值。
Interval[h]表示第i个节点服务器所在的区间的最大边界值。
Max为负载值中的最大值,即Max=max(loadi)。
如果设区间的起点为0,可以得到如图6所示的区间图。
然后,当读取副本时,生成区间内的随机数,例如:在0和Interval[3]之间产生一个随机数;
然后,根据随机数选出对应节点。具体为:根据随机数落在区间的位置,选取大于随机数的最小Interval[h]所对应的节点作为读取副本节点。例如如图6所示,随机数落在Interval[1]和Interval[2]之间,则选取node2节点。
然后,访问到对应的节点。
此算法的整体思路是负载高的节点,倒数后的值小,被选中的概率低,最终实现负载平衡。
如图7所示,为本发明所述的分布式块数据的访问装置,包括:
第一获取单元71,根据接收的数据访问请求,获取待访问数据块;
第二获取单元72,获取存储所述待访问数据块的至少两个副本的至少两个节点服务器;
第一生成单元73,根据所述至少两个节点服务器的负载值,生成至少两个数值区间;
第二生成单元74,在所述至少两个数值区间内生成一个随机数;
选择单元75,根据所述随机数以及所述至少两个数值区间,从所述至少两个节点服务器中,选择一节点服务器;
访问单元76,从选择的所述节点服务器,访问所述待访问数据块的副本。
所述选择单元75包括:
选取子单元,从各个所述数值区间的最大值中,选取大于所述随机数的最小的数值区间最大值;
获取子单元,获取选取的所述数值区间最大值对应的节点服务器的序号;
选择子单元,根据所述节点服务器的序号,选择一节点服务器。
本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。