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

文档序号:9891600阅读:来源:国知局
等间隔的子区间,得到1 ο个子区间(90 %,100 % ]、 (80% ,90% ]、(70% ,80% ]、(60% ,70% ]、···、[0%,10%],记为子区间9、子区间8、子区间 7、···、子区间0。相对空闲度落在同一子区间中的所有虚拟节点视为同一类别,则总共得到 10个类别,记为类别9、类别8、类别7、···、类别0。用长度为cn(此处cn=10)的数组Vnode_ counts_by_key来记录属于某一类别的虚拟节点个数,如化ode_counts_by_key [ 0 ]代表类 别0(对应子区间[0%,10% ])的虚拟节点个数。该数组在初始化时Vnode_counts_by_key kn-l ] =n,其余数组元素全为0。
[0074] 虚拟节点类别链表。用10个链表Listo,Listi,…,Lists存储属于对应类别号下的 所有虚拟节点编号。在初始化时,Lists中存储虚拟节点编号0、1、2、…、n-l (表示初始时所 有虚拟节点都属于类别9),其他9个链表均初始化为空表。
[0075] 虚拟节点的组别数。对虚拟节点进行分组的原则是:保证每个分组中虚拟节点所 属的类别尽可能最多,同时每个类别在所有分组中只能出现一次。虚拟节点的组别数gn表 示所有虚拟节点的当前分组总数,在初始时其值设为0,表示初始时尚未进行虚拟节点分 组。当前的所有即个组别记为分组0、分组1、…、分组即-1,并且用VNGo、VNGi、…、VNGgn-i表示 属于运些分组的虚拟节点编号集合(集合中元素是虚拟节点的编号)。
[0076] 虚拟节点所属组别号。用长度为η的数组Vnode_map记录各虚拟节点所属的组别 号,化ode_map[i]代表编号为i的虚拟节点所属的组别号。该数组在初始化时将所有元素置 为-1。
[0077] 第二,判别对虚拟节点进行分组的时间点。存储系统并不需要一开始就对虚拟节 点进行分组,因为在初始状态时虚拟节点的相对空闲度都为100%,此时可认为虚拟节点的 负载量是均衡的(所有虚拟节点的负载量都为0)。随着存储对象的不断增加,虚拟节点的相 对空闲度会逐渐发生变化,为了使多个虚拟节点实现负载均衡,需要在一定条件下对虚拟 节点进行分组。确定虚拟节点分组时间点的标准是:保证每个分组至少包含两种类别的虚 拟节点,并且在同一分组中属于一种类别的虚拟节点只有1个。
[0078] 在系统开始运行后的短期内,所有虚拟节点的相对空闲度值将集中在子区间 (90%,100% ],即所有虚拟节点都属于类别9,此时也不满足虚拟节点分组时间点的鉴别标 准。所W,对虚拟节点进行分组只会发生在系统运行一段时间之后,具体采用如下方法判别 对虚拟节点进行分组的合理时间点:
[0079] (21)创建与化〇(16_(3〇11]113_67_4巧相同的数组化〇(16_(3〇11]113_67_4巧_64,将当前 化 ode_counts_by_key 中的值复制到化 ode_counts_by_key_bk 中。
[0080] (22)遍历数组¥]1〇(16_(3〇11]113_67_467_化,选出非零的最小值1;[]1_(3〇11]11:,然后将 化ode_counts_by_key_bk中所有非零元素都减去Min_count。
[0081] (23)若此时数组所有元素都为0,则返回化ue,结束;若此时数组只有一个元素不 为0,其余都为0,则返回化Ise,结束;否则转至步骤(22)。
[0082] 若上述步骤(23)返回True,表示当前时刻是对虚拟节点进行分组的时间点,则按 照W下的虚拟节点分组过程进行分组;若返回化Ise,则意味着当前时刻不需要为虚拟节点 分组。
[0083] 第Ξ,虚拟节点的分组过程。一旦当前时刻被判定为虚拟节点分组时间点,就需要 对虚拟节点进行分组。分组的具体过程如下:
[0084] (31)定义长度为cn(此处cn = 10)的布尔型数组CBool,其10个元素均初始化为0。
[0085] (32)从数组化ode_counts_by_key中选出非零最小值,赋给临时变量me;同时对于 该数组中每一个值非零的元素所对应的类别j(〇含j含cn-1),设置CBool[ j] = l。
[0086] (33)建立me个字典结构68。,68。+1,一,68。+。。-1,它们代表新增加的111(3个分组。每个字 典结构包含多个字典元素,每个字典元素是一个"key(键):value(值Γ对,其中键为类别 号,值为与该类别号对应的虚拟节点类别链表。
[0087] (34)遍历布尔型数组CBool,对于其中每一个值为1的数组元素 CBooUk],进行如 下操作:首先建立me个字典元素 DE(k,o),DE(k,i),…,DE(k,me-i);然后从虚拟节点类别链表 Listk中依次取出me个虚拟节点编号,不妨记为Vno、化1、…乂血。-!,将它们分别加入字典元素 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。
[0088] (35)对数组Vnode_counts_by_key进行更新,使该数组中所有非零元素的值都减 去me。
[0089] (36)对虚拟节点组别数gn进行更新,gn = gn+mc。
[0090] (37)若此时化ode_counts_by_k巧数组中元素不全为0,则跳转至步骤(32);否则, 结束分组,同时保存由gn个字典结构组成的集合G={G〇,Gi,…,Ggn-i},它的元素包含了gn个 分组的信息。
[0091] 第四,分组合并过程。随着Swift存储系统中所存储的对象不断增多,可能会出现 某个分组内所有虚拟节点的相对空闲度都比较低的情况,运意味着该分组的负载已经很 高。运时,需要在所有分组中选出一个负载较低的分组,与该分组进行合并。假定在当前时 亥IJ,分组m(0含m含gn-1,该分组由字典结构Gm描述,对应虚拟节点编号集合VNGm)需要与另一 个分组进行合并,具体方法如下:
[0092] (41)遍历除分组m外的所有分组,找出其中包含有当前相对空闲度最大的虚拟节 点的一个分组k(0 < k <即-1且k辛m)。
[0093] (42)将分组m中的所有虚拟节点都加入分组k,相对应地将字典结构Gm中所有字典 元素并入字典结构Gk。在并入时,若两个字典元素的key(键)值相同,则只保留一个字典元 素,并且需要将它们的value(值)部分进行合并。
[0094] (43)删除Gm,并将组别号大于m的所有分组的组别号减去1,同时对数组化ode_map 中虚拟节点所属组别号进行对应更新。
[009引(44)最后对虚拟节点组别数gn进行更新,gn = gn-1。
[0096] 第五,对象的存储过程。该过程将主要根据系统中虚拟节点是否已经进行过分组, 而分情况实施。假定待存储对象大小为Ob j_size,对象存储具体过程如下:
[0097] (51)通过哈希函数将待存储对象映射到Ring环上的位置Loc,从位置Loc开始沿 Ring环W顺时针方向寻找第一个虚拟节点,不妨记为化t(0含t含n-1)。
[0098] (52)根据gn是否大于0,判断系统中虚拟节点是否已经进行过分组,若是,转至步 骤(56);否则,转至步骤(53)。
[0099] (53)采用虚拟节点分组时间点判别方法,判断当前时刻是否需要对虚拟节点进行 分组,若是,则转至步骤(55);否则,转至步骤(54)。
[0100] (54)将对象直接存储在虚拟节点化t对应的存储服务器中,转至步骤巧10)。
[0101] (55)按照虚拟节点的分组过程对虚拟节点进行分组。分组结束之后,虚拟节点化t 被分配到某一分组(该分组由相应的字典结构描述,并有对应的虚拟节点编号集合)。
[0102] (56)假定虚拟节点Vnt属于分组m,即VntEVNGm。为简便计,将数组Vnode_left_ percen化ge简记为VNLP,采用公式3进行判断:
[0103]
[0104] 若公式3取值为True,则将该对象存储在Vnt对应的存储服务器中,结束;若公式3 取值为化136,转至步骤(57)。
[0105] (57)在分组m中寻找虚拟节点化J,满足
之后判断 ΚΛ''Δ巧是否成立。若成立,则将对象存储在vw对应的存储服务器中, 转至步骤(510);否则转至步骤(58)。
[0106] (58)按照分组合并过程选取分组k与分组m进行合并,假定合并之后得到分组s(0 < S < gn-1,该分组由字典结构Gs描述,对应虚拟节点编号集合VNGs)。
[0107] (59)在分组S中寻找虚拟节点Vnk,满足
将对象存 储在化k对应的存储服务器中。
[0108] (510)由于对象被存储到虚拟节点中,需要重新计算该虚拟节点的相对空闲度。如 果因为相对空闲度改变而引起虚拟节点类别变化,将该虚拟节点从它当前所在的类别链表 中移除,并加入到新类别所对应的类别链表中。结束。
[0109] 第六,对象的检索过程。在存储系统中对一个对象进行检索的具体过程如下:
[0110] (61)通过哈希函数将待检索对象映射到Ring环上的位置Loc,从位置Loc开始沿 Ring环W顺时针方向寻找第一个虚拟节点,不妨记为化t(0含t含n-1)。
[0111] (62)查询虚拟节点化t所对应的存储服务器,若它存储了该对象,则该对象被检索 到,结束;否则,转至步骤(63)。
[0112] (63)该对象一定存储在Vnt所属分组的其他虚拟节点对应的存储服务器中。假定 虚拟节点化t属于分组m,即化t E VNGm。遍历集合VNGm内所有虚拟节点,查询它们所对应的存 储服务器,
当前第3页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1