基于虚拟节点存储优化的Swift负载均衡方法_2

文档序号:9891600阅读:来源:国知局
为0,其余都为0,则返回化Ise,结束;否则转至步骤(22)。
[0025] 若上述步骤(23)返回True,表示当前时刻是对虚拟节点进行分组的时间点,则按 照W下的虚拟节点分组过程进行分组;若返回化Ise,则意味着当前时刻不需要为虚拟节点 分组。
[0026] 第Ξ,虚拟节点的分组过程。一旦当前时刻被判定为虚拟节点分组时间点,就需要 对虚拟节点进行分组。分组的具体过程如下:
[0027] (31)定义长度为cn(此处cn = 10)的布尔型数组CBool,其10个元素均初始化为0。 [002引 (32)从数组化ode_counts_by_k巧中选出非零最小值,赋给临时变量me;同时对于 该数组中每一个值非零的元素所对应的类别j(0含j含cn-1),设置CBool[ j] = l。
[0029] (33)建立me个字典结构68。,68。+1,一,68。+。。-1,它们代表新增加的111(3个分组。每个字 典结构包含多个字典元素,每个字典元素是一个"key(键):value(值Γ对,其中键为类别 号,值为与该类别号对应的虚拟节点类别链表。
[0030] (34)遍历布尔型数组CBool,对于其中每一个值为1的数组元素 CBooUk],进行如 下操作:首先建立me个字典元素 DE(k,o),DE(k,i),…,DE(k,me-i);然后从虚拟节点类别链表 Listk中依次取出me个虚拟节点编号,不妨记为化日、化1、…Vnmc-i,将它们分别加入字典元素 DE(k,o),DE(m),…,DE(k,mc-i)中,即在每个字典元素的虚拟节点编号链表中加入1个虚拟节点 编号;最后将运me个字典元素对应加入到me个字典结构Ggn,Ggn+l,…,Ggn+m。-冲,即把编号为 Vnt(0 < t <mc-l)的虚拟节点加入新的分组即W,同时对数组化ode_map进行更新,化〇(16_ map[Vnt] = gn+t。
[0031] (35)对数组Vnode_counts_by_key进行更新,使该数组中所有非零元素的值都减 去me。
[0032] (36)对虚拟节点组别数gn进行更新,gn = gn+mc。
[0033] (37)若此时化ode_counts_by_k巧数组中元素不全为0,则跳转至步骤(32);否则, 结束分组,同时保存由gn个字典结构组成的集合G={G〇,Gi,…,Ggn-i},它的元素包含了gn个 分组的信息。
[0034] 第四,分组合并过程。随着Swift存储系统中所存储的对象不断增多,可能会出现 某个分组内所有虚拟节点的相对空闲度都比较低的情况,运意味着该分组的负载已经很 高。运时,需要在所有分组中选出一个负载较低的分组,与该分组进行合并。假定在当前时 亥IJ,分组m(0含m含gn-1,该分组由字典结构Gm描述,对应虚拟节点编号集合VNGm)需要与另一 个分组进行合并,具体方法如下:
[0035] (41)遍历除分组m外的所有分组,找出其中包含有当前相对空闲度最大的虚拟节 点的一个分组k(0 < k <即-1且k辛m)。
[0036] (42)将分组m中的所有虚拟节点都加入分组k,相对应地将字典结构Gm中所有字典 元素并入字典结构Gk。在并入时,若两个字典元素的key(键)值相同,则只保留一个字典元 素,并且需要将它们的value(值)部分进行合并。
[0037] (43)删除Gm,并将组别号大于m的所有分组的组别号减去1,同时对数组化ode_map 中虚拟节点所属组别号进行对应更新。
[003引(44)最后对虚拟节点组别数gn进行更新,gn = gn-1。
[0039] 第五,对象的存储过程。该过程将主要根据系统中虚拟节点是否已经进行过分组, 而分情况实施。假定待存储对象大小为Ob j_size,对象存储具体过程如下:
[0040] (51)通过哈希函数将待存储对象映射到Ring环上的位置Loc,从位置Loc开始沿 Ring环W顺时针方向寻找第一个虚拟节点,不妨记为化t(0含t含n-1)。
[0041] (52)根据gn是否大于0,判断系统中虚拟节点是否已经进行过分组,若是,转至步 骤(56);否则,转至步骤(53)。
[0042] (53)采用虚拟节点分组时间点判别方法,判断当前时刻是否需要对虚拟节点进行 分组,若是,则转至步骤(55);否则,转至步骤(54)。
[0043] (54)将对象直接存储在虚拟节点化t对应的存储服务器中,转至步骤巧10)。
[0044] (55)按照虚拟节点的分组过程对虚拟节点进行分组。分组结束之后,虚拟节点化t 被分配到某一分组(该分组由相应的字典结构描述,并有对应的虚拟节点编号集合)。
[0045] (56)假定虚拟节点Vnt属于分组m,即VntEVNGm。为简便计,将数组Vnode_left_ percen化ge简记为VNLP,采用公式3进行判断:
[0046]
[0047] 若公式3取值为True,则将该对象存储在Vnt对应的存储服务器中,结束;若公式3 取值为化Ise,转至步骤(57)。
[004引(57)在分组m中寻找虚拟节点Vn^,满巧
之后判断 {/.\心节'",]>?',,,>=0/)/_."'2-。是否成立。若成立,则将对象存储在乂〇拥应的存储服务器中, 转至步骤(510);否则转至步骤(58)。
[0049] (58)按照分组合并过程选取分组k与分组m进行合并,假定合并之后得到分组s(0 < S < gn-1,该分组由字典结构Gs描述,对应虚拟节点编号集合VNGs)。
[0050] (59)在分组S中寻找虚拟节点Vnk,满足
,将对象存 储在化k对应的存储服务器中。
[0051] (510)由于对象被存储到虚拟节点中,需要重新计算该虚拟节点的相对空闲度。如 果因为相对空闲度改变而引起虚拟节点类别变化,将该虚拟节点从它当前所在的类别链表 中移除,并加入到新类别所对应的类别链表中。结束。
[0052] 第六,对象的检索过程。在存储系统中对一个对象进行检索的具体过程如下:
[0053] (61)通过哈希函数将待检索对象映射到Ring环上的位置Loc,从位置Loc开始沿 Ring环W顺时针方向寻找第一个虚拟节点,不妨记为化t(0含t含n-1)。
[0054] (62)查询虚拟节点化t所对应的存储服务器,若它存储了该对象,则该对象被检索 到,结束;否则,转至步骤(63)。
[0055] (63)该对象一定存储在Vnt所属分组的其他虚拟节点对应的存储服务器中。假定 虚拟节点化t属于分组m,即化t E VNGm。遍历集合VNGm内所有虚拟节点,查询它们所对应的存 储服务器,直到找到对象,结束。
[0056] 有益效果:本发明与现有技术相比,具有W下优点:
[0057] 1.保持了 Swift原有存取机制的优良扩展性和分散性,可保证Swift存储系统在运 行过程中不但各组内保持负载均衡,而且各组之间也保持负载均衡。
[005引2.采取对虚拟节点进行分组的方法,将存储系统负载均衡的处理规模从针对所有 虚拟节点,缩减至主要针对每个分组内的虚拟节点。
[0059] 3.当有存储对象的请求到来时,若首选虚拟节点不满足存储条件,也不需要绕环 寻找,而只需在组内寻找合适的节点。
[0060] 4.采取全局和局部相结合的动态负载均衡方法,充分提高云存储系统的存取效 率,尤其适用于大规模、分布式云存储服务需求。
【附图说明】
[0061 ]图1是Swift的对象存取过程;
[0062] 图2是采用一致性哈希将对象映射到Ring环上虚拟节点的原理;
[0063] 图3是对虚拟节点分组时间点进行判别的流程示例图;
[0064] 图4是对虚拟节点进行分组的流程示例图。
【具体实施方式】
[0065] 下面结合具体实施例,进一步阐明本发明,应理解运些实施例仅用于说明本发明 而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价 形式的修改均落于本申请所附权利要求所限定的范围。
[0066] 基于虚拟节点存储优化的Swift负载均衡算法,包括:
[0067] 第一,与虚拟节点相关的参数及其计算。本方法在实现负载均衡时的主要依据是 与虚拟节点有关的一些参数,运些参数主要包括:虚拟节点的相对空闲度、虚拟节点所属类 另IJ、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等。
[0068] 虚拟节点的相对空闲度。假定Ring环上共有η个虚拟节点,W其中一个虚拟节点为 起始点,顺时针进行编号为虚拟节点0、虚拟节点1、···、虚拟节点η-1,则编号为i(0 < i < η- 1)的虚拟节点化1的相对空闲度RFi是指其剩余空间占总存储空间的百分比,取值范围为区 间[0%,100% ]。具体采用公式1进行计算:
[隱]
(公式1)
[0070] 其中,,表示编号为i的虚拟节点Vru的存储空间大小,mi表示编号为i的虚拟节 点目前已存储的对象个数,表示编号为i的虚拟节点存储的第j(〇含j含ΠΗ)个对象的大小。 当编号为i的虚拟节点新增一个大小为a的存储对象时,则其相对空闲度RFi采用公式2进行 更新:
[0071]
(公式 2)
[0072] 相对空闲度反映了虚拟节点的存储负载状态,相对空闲度高代表负载高,相对空 闲度低则代表负载低。同时,用长度为η的数组化ode_left_pe;rcentage来记录化ng环上η个 虚拟节点的相对空闲度,其中化〇de_lef ^percentage [ i ]表示编号为i的虚拟节点的相对 空闲度,初始化时将该数组所有元素初值设为100 %。
[0073] 虚拟节点所属类别。它是在对虚拟节点进行分组时的重要参考因素,区分类别的 基础是虚拟节点的相对空闲度。假定类别数目为cn(此处Wcn=10为例),首先将相对空闲 度取值区间[ο %,100 % ]划分成cn个
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1