【技术实现步骤摘要】
本专利技术涉及一种基于虚拟节点存储优化的Swift负载均衡方法,该方法可以用于实现大规模、分布式的存储系统,属于互联网
技术介绍
Swift是开源云计算平台OpenStack中的云存储服务组件,是目前业界非常重要的一种云存储解决方案。Swift的对象存取策略主要采取两层映射机制,该机制在对象与存储服务器之间增加一个虚拟节点层,一起形成两层映射:(1)对象层与虚拟节点层之间的映射,该映射主要通过一致性哈希算法完成;(2)虚拟节点层与存储服务器层之间的映射,该映射主要根据存储服务器的物理位置,将虚拟节点分散地分布于服务器集群中。其中第一层映射较为复杂,也是影响整个Swift存取性能的关键。在两层映射关系下,Swift中对象的存取过程如图1所示,主要分为两步:第一步,利用哈希函数对请求中的对象进行哈希,根据哈希计算的结果找到对应的虚拟节点;第二步,根据第二层映射找到该虚拟节点对应的存储服务器,进而完成对象的存储或读取。一致性哈希算法(ConsistentHash)在Swift存取过程中起到非常重要的作用,其原理如图2所示:该算法维护一个逻辑环(Ring环),它可视为一个环形的Hash空间,对象和虚拟节点都将映射到此Hash空间中。当有存储对象的请求到来时,利用哈希函数将对象映射到环上某一点,并以该位置为起点,沿环顺时针方向遇到的第一个虚拟节点为该对象所对应的虚拟节点。如图2所示,对象Object2在环 ...
【技术保护点】
一种基于虚拟节点存储优化的Swift负载均衡方法,其特征在于,包括如下步骤:(1)与虚拟节点相关参数的初始化;为了达到存储负载均衡的效果,Swift存储系统需要记录虚拟节点的相关参数,包括虚拟节点的相对空闲度、虚拟节点所属类别、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等。在Swift存储系统开始运行时,需要对这些参数进行初始化;(2)对象的存储过程;该过程将主要根据系统中虚拟节点是否已经进行过分组,而分情况实施;若系统中虚拟节点尚未进行过分组,紧接着判断采用虚拟节点分组时间点判别方法,判断当前时刻是否需要对虚拟节点进行分组;如果无需分组,直接进行对象存储;如果需要分组,则先按照虚拟节点的分组过程对虚拟节点进行分组;一旦系统中虚拟节点进行过分组,判断对象被映射到的分组是否能够存储该对象;如果能够存储,将对象存储在合适的存储服务器;否则,先按照分组合并过程将对象被映射到的分组与另一个分组进行合并,然后在合并后的分组中完成对象存储;(3)对象的检索过程;当系统收到读取某一对象的请求时,首先根据Swift中的Ring环找到该对象对应的虚拟节点,然后查询该虚拟节点所对应的存储服务器 ...
【技术特征摘要】
1.一种基于虚拟节点存储优化的Swift负载均衡方法,其特征在于,包括如
下步骤:
(1)与虚拟节点相关参数的初始化;为了达到存储负载均衡的效果,Swift
存储系统需要记录虚拟节点的相关参数,包括虚拟节点的相对空闲度、虚拟节点
所属类别、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等。在
Swift存储系统开始运行时,需要对这些参数进行初始化;
(2)对象的存储过程;该过程将主要根据系统中虚拟节点是否已经进行过分
组,而分情况实施;若系统中虚拟节点尚未进行过分组,紧接着判断采用虚拟节
点分组时间点判别方法,判断当前时刻是否需要对虚拟节点进行分组;如果无需
分组,直接进行对象存储;如果需要分组,则先按照虚拟节点的分组过程对虚拟
节点进行分组;一旦系统中虚拟节点进行过分组,判断对象被映射到的分组是否
能够存储该对象;如果能够存储,将对象存储在合适的存储服务器;否则,先按
照分组合并过程将对象被映射到的分组与另一个分组进行合并,然后在合并后的
分组中完成对象存储;
(3)对象的检索过程;当系统收到读取某一对象的请求时,首先根据Swift
中的Ring环找到该对象对应的虚拟节点,然后查询该虚拟节点所对应的存储服
务器。如果在存储服务器中找到所请求的对象,则直接读取;否则,先找出该虚
拟节点所在的分组,然后遍历分组内所有虚拟节点对应的存储服务器,直至找到
所请求的对象。
2.如权利要求1所述的基于虚拟节点存储优化的Swift负载均衡方法,其特
征在于,系统运行时需要设置与虚拟节点的相关参数,这些参数主要包括:虚拟
节点的相对空闲度、虚拟节点所属类别、虚拟节点类别链表、虚拟节点的组别数、
虚拟节点所属组别号等;
虚拟节点的相对空闲度;假定Ring环上共有n个虚拟节点,编号为i(0≤i
≤n-1)的虚拟节点Vni的相对空闲度RFi是指其剩余空间占总存储空间的百分比,
取值范围为区间[0%,100%];具体采用公式1进行计算:
其中,表示编号为i的虚拟节点Vni的存储空间大小,mi表示编号为i
\t的虚拟节点目前已存储的对象个数,Mj表示编号为i的虚拟节点存储的第j(0
≤j≤mi)个对象的大小;当编号为i的虚拟节点新增一个大小为a的存储对象时,
则其相对空闲度RFi采用公式2进行更新:
用长度为n的数组Vnode_left_percentage来记录Ring环上n个虚拟节点的
相对空闲度,其中Vnode_left_percentage[i]表示编号为i的虚拟节点的相对空闲
度,初始化时将该数组所有元素初值设为100%;
虚拟节点所属类别;假定类别数目为cn,首先将相对空闲度取值区间[0%,
100%]划分成cn个等间隔的子区间,得到cn个子区间,记为子区间cn-1、子区
间cn-2、…、子区间0;相对空闲度落在同一子区间中的所有虚拟节点视为同一
类别,则总共得到cn个类别,记为类别cn-1、类别cn-2、…、类别0;用长度
为cn的数组Vnode_counts_by_key来记录属于某一类别的虚拟节点个数;该数
组在初始化时Vnode_counts_by_key[cn-1]=n,其余数组元素全为0;
虚拟节点类别链表;用cn个链表List0,List1,…存储属于对应类别号下的
所有虚拟节点编号;在初始化时,Listcn-1中存储虚拟节点编号0、1、2、…、n-1,
其他cn-1个链表均初始化为空表;
虚拟节点的组别数;用参数gn表示所有虚拟节点的当前分组总数,在初始
时其值设为0,表示初始时尚未进行虚拟节点分组;某一时刻系统中所有gn个
组别记为分组0、分组1、…、分组gn-1,并且用VNG0、VNG1、…、VNGgn-1表示属于这些分组的虚拟节点编号集合;
虚拟节点所属组别号。用长度为n的数组Vnode_map记录各虚拟节点所属
的组别号,Vnode_map[i]代表编号为i的虚拟节点所属的组别号;该数组在初始
化时将所有元素置为-1。
3.如权利要求1所述的基于虚拟节点存储优化的Swift负载均衡方法,其特
征在于,采用分组鉴别方法判断是否可以为虚拟节点进行分组;随着存储对象的
不断增加,虚拟节点的相对空闲度逐渐发生变化且各虚拟节点的变化不同。但可
以确定的是,在存储系统开始运行后的短期内,虚拟节点的相对空闲度的值还比
较聚集在某个范围...
【专利技术属性】
技术研发人员:杨鹏,赵丹丹,袁志伟,刘旋,
申请(专利权)人:东南大学,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。