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

文档序号:9891600阅读:来源:国知局
直到找到对象,结束。
[0113] 下面根据附图,对基于虚拟节点存储优化的Swift负载均衡算法的实施例进行详 细介绍:
[0114] 1,假定Swift存储系统的Ring环上共有η个虚拟节点,首先设置与虚拟节点相关的 参数。构造长度为η的数组Vnode_l ef t_pe;rcentage,该数组所有元素 Vnode_lef t_ percentage[ i]的初值设为100%。构造长度为10(cn = 10)的数组化ode_counts_by_key,将 化ode_counts_by_k^[9]初值设为n,其余数组元素初值全设为0。构建10个虚拟节点类别 链表Listo、Listi、-'、List9,其中类别链表Lists在初始化时存储所有虚拟节点编号0、1、 2、…、n-l,其他9个类别链表均初始化为空表。构造长度为η的数组化ode_map,该数组在初 始化时将所有元素置为-1。设置虚拟节点的组别数gn的初值为0。
[0115] 2,图3给出了虚拟节点分组时间点的判别流程示例。假定某一时刻数组Vnode_ counts_by_key的值为[8,0,7,5,8,3,1,8,2,3],表示有8个虚拟节点属于类别0 (对应相对 空闲度子区间[0%,10%]),有0个虚拟节点属于类别1(对应子区间(10%,20%]),有7个虚 拟节点属于类别2(对应子区间(20 %,30 % ]),依次类推。首先复制数组Vnode_counts_by_ key到数组化ode_counts_by_key_bk,并在数组化ode_counts_by_key_bk的各元素中找出 非零的最小值Min_count,此时为1。然后将数组化ode_counts_by_key_bk的每一个非零元 素都减去最小值Min_count,该数组的值变为[7,0,6,4,7,2,0,7,1,2]。不断重复上述过程, 最终数组化〇de_counts_by_key_bk的元素可能出现两种可能:(1).该数组中所有的元素的 值都为0,则当前时刻是对虚拟节点进行分组的时间点;(2).该数组中有某一个元素的值不 为0,其余元素的值都为0,则当前时刻不能为虚拟节点进行分组。
[0116] 3,假定某一时刻数组化 ode_counts_by_ke5y的值为[8,0,7,5,8,3,1,8,2,3],根据 图3所示流程判定当前时刻是虚拟节点分组时间点,则立即对虚拟节点进行分组。记虚拟节 点类别链表Listi(0含i含9)中第j个虚拟节点为化(i,j),由字典结构组成的集合G记录了当 前时刻的所有分组信息。则具体的虚拟节点分组过程如图4所示:
[0117] (1)定义长度为10(cn = 10)的布尔型数组CBool,所有元素均初始化为0。
[0118] (2)找出数组Vnode_counts_by_key中所有元素的非零最小值me。对于图4的第一 步而言,此时me值为1。
[0119] (3)根据数组化ode_counts_by_k巧中每一个值非零的元素所对应的类别,设置数 组 CB〇〇1 = [1,0,1,1,1,1,1,1,1,1]。
[0120] (4)新建me个空的字典结构Ggn,Ggn+i,一,G即+mc-i。对于图4的第一步而言,此时me值 为1,故新建1个空的字典结构Go。
[0121] (5)遍历布尔型数组CBool,对于其中每一个值为1的数组元素 CBool比],都从相应 的虚拟节点类别链表Listk中取出me个虚拟节点,W类别号为键(图4中为清楚显示,用相对 空闲度子区间来代表类别号),包含该虚拟节点的类别列表为值,构造字典元素并加入到字 典结构Ggn , Ggn+l ,…,Ggn+mc-1中。对于图4的束步而曰,此时HlC值为1 ,故从Li S to , , Li S, Lists,...,List冲各取出1个虚拟节点(即化(日,日),化(2,日),化(3,0),...,化(9,0)),构造9个字典 元素,并加入字典结构Go。
[0122] (6)更新数组Vnode_counts_by_key,使该数组中所有非零元素的值都减去me。对 于图 4 的第一步而言,更新之后化 ode_counts_by_key = [7,0,6,4,7,2,0,7,1,2]。
[0123] (7)更新变量gn = gn+mc。对于图4的第一步而言,更新后gn = l。
[0124] (8)判断数组化ode_counts_by_key是否存在非零值,若存在,则转至步骤(2);否 则,结束分组。对于图4而言,在第一步完成之后,数组化ode_counts_by_key中仍存在非零 值,故转至步骤(2)继续循环至图4的第六步完成之后,此时数组化ode_counts_by_k巧中元 素全零,结束分组,最后总共得到8个分组。
[0125] 4,W图4例最后一步所得的8个分组Go,Gi,-',G7为例,说明虚拟节点的分组合并过 程。假设分组G2需要合并,则分组合并过程如下:
[0126] (1)在所有分组中找出其中包含有当前相对空闲度最大的虚拟节点的一个分组 Gso
[0127] (2)将分组G2中所有虚拟节点加入分组G3,并删除G2。
[0128] (3)将分组G3,G4,…,G?的组别号减去1,得到分组G2,G3,…,G6。同时对数组化ode_ map中虚拟节点所属组别号进行对应更新。
[0129] (4)最后对虚拟节点组别数gn进行更新,gn = 7。
[0130] 5,假定某一时刻要存储对象Ob jx,所需空间为Ob j_size。通过判断参数gn的值,知 道虚拟节点已经进行过分组。则对Ob jx对象的存储过程如下:
[0131] (1)通过哈希函数将待存储对象Ob jx映射到Ring环上的位置Loc,从该位置找到顺 时针方向第一个虚拟节点,假设为化(2,2)。
[0132] (2)经判断,虚拟节点化(2,2)不满足公式3,转至步骤(3)。
[0133] ( 3 )假定在G 2中未能找到满足
(趴心。*巧0/V _旅6 )的虚拟节点V化转至步骤(4)。
[0134] (4)在所有的分组中找出其中包含有当前相对空闲度最大的虚拟节点的一个分组 G3,将G2与G3合并。原来的分组G3中,化(8,3)所属类别的类别号最大,因此将对象Ob jx存储到 虚拟节点化(8,則所对应的存储服务器中。
[0135] 6,假定某一时刻要在系统中检索对象Ob jx,具体的检索过程如下:
[0136] (1)通过哈希函数将待检索对象Ob jx映射到Ring环上的位置Loc,从该位置找到顺 时针方向第一个虚拟节点,假设为化(2,2)。
[0137] (2)查询虚拟节点Vn(2,2)所对应的存储服务器,发现它没有存储对象Ob jx,则转至 步骤(3)。
[0138] (3)找到虚拟节点化(2,引所在分组G3,遍历分组3内所有虚拟节点,结果在虚拟节点 化(8,則所对应的存储服务器中找到对象Objx,结束。
【主权项】
1. 一种基于虚拟节点存储优化的Swift负载均衡方法,其特征在于,包括如下步骤: (1) 与虚拟节点相关参数的初始化;为了达到存储负载均衡的效果,Swift存储系统需 要记录虚拟节点的相关参数,包括虚拟节点的相对空闲度、虚拟节点所属类别、虚拟节点类 别链表、虚拟节点的组别数、虚拟节点所属组别号等。在Swift存储系统开始运行时,需要对 运些参数进行初始化; (2) 对象的存储过程;该过程将主要根据系统中虚拟节点是否已经进行过分组,而分情 况实施;若系统中虚拟节点尚未进行过分组,紧接着判断采用虚拟节点分组时间点判别方 法,判断当前时刻是否需要对虚拟节点进行分组;如果无需分组,直接进行对象存储;如果 需要分组,则先按照虚拟节点的分组过程对虚拟节点进行分组;一旦系统中虚拟节点进行 过分组,判断对象被映射到的分组是否能够存储该对象;如果能够存储,将对象存储在合适 的存储服务器;否则,先按照分组合并过程将对象被映射到的分组与另一个分组进行合并, 然后在合并后的分组中完成对象存储; (3) 对象的检索过程;当系统收到读取某一对象的请求时,首先根据Swift中的Ring环 找到该对象对应的虚拟节点,然后查询该虚拟节点所对应的存储服务器。如果在存储服务 器中找到所请求的对象,则直接读取;否则,先找出该虚拟节点所在的分组,然后遍历分组 内所有虚拟节点对应的存储服务器,直至找到所请求的对象。2. 如权利要求1所述的基于虚拟节点存储优化的Swift负载均衡方法,其特征在于,系 统运行时需要设置与虚拟节点的相关参数,运些参数主要包括:虚拟节点的相对空闲度、虚 拟节点所属类别、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等; 虚拟节点的相对空闲度;假定Ring环上共有n个虚拟节点,编号为i(0<i<n-l)的虚拟 节点Vm的相对空闲度RFi是指其剩余空间占总存储空间的百分比,取值范围为区间[0%, 100%];具体采用公式1进行计算:(公式]) 其中,巧",表示编号为i的虚拟节点化1的存储空间大小,HH表示编号为i的虚拟节点目前 已存储的对象个数,Mj表示编号为i的虚拟节点存储的第j(0 ^ j ^mi)个对象的大小;当编号 为i的虚拟节点新增一个大小为a的存储对象时,则其相对空闲度RFi采用公式2进行更新: 属巧=化' -听" (公式2) 用长度为n的数组Vnode_left_pe;rcentage来记录Ring环上n个虚拟节点的相对空闲 度,其中化〇de_left_pe;rcentage[i]表示编号为i的虚拟节点的相对空闲度,初始化时将该 数组所有元素初值设为100% ; 虚拟节点所属类别;假定类别数目为cn,首先将相对空闲度取值区间[0%,100%]划分 成cn个等间隔的子区间,得到cn个子区间,记为子区间cn-1、子区间cn-2、…、子区间0;相对 空闲度落在同一子区间中的所有虚拟节点视为同一类别,则总共得到cn个类别,记为类别 cn-1、类别cn-2、…、类别0;用长度为cn的数组Vnode_counts_by_key来记录属于某一类别 的虚拟节点个数;该数组在初始化时化〇de_counts_
当前第4页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1