当前位置: 首页 > 专利查询>东南大学专利>正文

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

技术编号:15031590 阅读:65 留言:0更新日期:2017-04-05 08:30
本发明专利技术公开了一种基于虚拟节点存储优化的Swift负载均衡方法,该方法可以动态均衡云存储服务组件Swift中各存储服务器的负载。与传统负载均衡方法不同的是,该方法既非单一的全局负载均衡,也非单一的局部负载均衡,而是通过采用分组、合并的机制,实现全局和局部相结合的动态负载均衡。该方法既能保证云存储系统的负载保持平衡状态,提升存储资源的利用率,又能提高云存储系统的存取效率,更加适用于大规模、分布式云存储服务需求。

【技术实现步骤摘要】

本专利技术涉及一种基于虚拟节点存储优化的Swift负载均衡方法,该方法可以用于实现大规模、分布式的存储系统,属于互联网

技术介绍
Swift是开源云计算平台OpenStack中的云存储服务组件,是目前业界非常重要的一种云存储解决方案。Swift的对象存取策略主要采取两层映射机制,该机制在对象与存储服务器之间增加一个虚拟节点层,一起形成两层映射:(1)对象层与虚拟节点层之间的映射,该映射主要通过一致性哈希算法完成;(2)虚拟节点层与存储服务器层之间的映射,该映射主要根据存储服务器的物理位置,将虚拟节点分散地分布于服务器集群中。其中第一层映射较为复杂,也是影响整个Swift存取性能的关键。在两层映射关系下,Swift中对象的存取过程如图1所示,主要分为两步:第一步,利用哈希函数对请求中的对象进行哈希,根据哈希计算的结果找到对应的虚拟节点;第二步,根据第二层映射找到该虚拟节点对应的存储服务器,进而完成对象的存储或读取。一致性哈希算法(ConsistentHash)在Swift存取过程中起到非常重要的作用,其原理如图2所示:该算法维护一个逻辑环(Ring环),它可视为一个环形的Hash空间,对象和虚拟节点都将映射到此Hash空间中。当有存储对象的请求到来时,利用哈希函数将对象映射到环上某一点,并以该位置为起点,沿环顺时针方向遇到的第一个虚拟节点为该对象所对应的虚拟节点。如图2所示,对象Object2在环上的位置是L2,则Object2映射到虚拟节点Vnode3。Swift将虚拟节点均匀地分布在Ring环上,确保每个虚拟节点可存储的对象个数相等。但是,由于每个对象所占存储空间大小存在差异,所以这样做并不能保证存储服务器的空间利用率负载均衡。此外,当在Ring环上顺时针方向遇到的第一个虚拟节点不满足存储条件时,Swift将继续沿顺时针方向直至找到合适的虚拟节点为止,最坏情况下将绕环一周,影响对象的存取效率。由于Swift存储对象具有随机性,并且不同存储服务器的性能不同,为了避免因存储服务器负载不均而使个别存储服务器出现存储瓶颈,Swift在存储对象时需要对各存储服务器进行负载均衡。实现负载均衡的关键在于,如何以尽可能小的开销来平衡各服务器的负载,从而提高存储系统的资源利用率。从Swift存储的负载均衡需求来看,目前已有的一些动态负载均衡方法,在效率、可扩展性和性能等方面仍存在欠缺。例如,基于加权最小连接(weightedleast-connections)的方法,用权值来反映各服务器间的性能差异,并采用请求的连接数作为衡量负载量的标准,在分配请求时尽可能使服务器的连接数与性能权值成比例,但该方法并没有考虑请求之间的差异。而基于双加权最小连接的方法虽然考虑了请求之间的差异,并因此增加了表示请求的权值,但该方法对于Swift而言,由于比较次数过多,致使效率较低。
技术实现思路
专利技术目的:针对现有技术中存在的问题与不足,本专利技术提供一种基于虚拟节点存储优化的Swift负载均衡方法。该方法综合考虑了存储服务器的性能差异和对象所占空间的大小差异,通过采用分组、合并的机制,可实现全局和局部相结合的动态负载均衡,提升云存储系统的资源利用率和提高云存储系统的存取效率,更加适用于大规模、分布式云存储服务需求。技术方案:一种基于虚拟节点存储优化的Swift负载均衡方法,包括如下步骤:(1)与虚拟节点相关参数的初始化。为了达到存储负载均衡的效果,Swift存储系统需要记录虚拟节点的相关参数,包括虚拟节点的相对空闲度、虚拟节点所属类别、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等。在Swift存储系统开始运行时,需要对这些参数进行初始化。(2)对象的存储过程。该过程将主要根据系统中虚拟节点是否已经进行过分组,而分情况实施。若系统中虚拟节点尚未进行过分组,紧接着判断采用虚拟节点分组时间点判别方法,判断当前时刻是否需要对虚拟节点进行分组。如果无需分组,直接进行对象存储;如果需要分组,则先按照虚拟节点的分组过程对虚拟节点进行分组。一旦系统中虚拟节点进行过分组,判断对象被映射到的分组是否能够存储该对象。如果能够存储,将对象存储在合适的存储服务器;否则,先按照分组合并过程将对象被映射到的分组与另一个分组进行合并,然后在合并后的分组中完成对象存储。(3)对象的检索过程。当系统收到读取某一对象的请求时,首先根据Swift中的Ring环找到该对象对应的虚拟节点,然后查询该虚拟节点所对应的存储服务器。如果在存储服务器中找到所请求的对象,则直接读取;否则,先找出该虚拟节点所在的分组,然后遍历分组内所有虚拟节点对应的存储服务器,直至找到所请求的对象。第一,与虚拟节点相关的参数及其计算。本方法在实现负载均衡时的主要依据是与虚拟节点有关的一些参数,这些参数主要包括:虚拟节点的相对空闲度、虚拟节点所属类别、虚拟节点类别链表、虚拟节点的组别数、虚拟节点所属组别号等。虚拟节点的相对空闲度。假定Ring环上共有n个虚拟节点,以其中一个虚拟节点为起始点,顺时针进行编号为虚拟节点0、虚拟节点1、…、虚拟节点n-1,则编号为i(0≤i≤n-1)的虚拟节点Vni的相对空闲度RFi是指其剩余空间占总存储空间的百分比,取值范围为区间[0%,100%]。具体采用公式1进行计算:其中,表示编号为i的虚拟节点Vni的存储空间大小,mi表示编号为i的虚拟节点目前已存储的对象个数,Mj表示编号为i的虚拟节点存储的第j(0≤j≤mi)个对象的大小。当编号为i的虚拟节点新增一个大小为a的存储对象时,则其相对空闲度RFi采用公式2进行更新:相对空闲度反映了虚拟节点的存储负载状态,相对空闲度高代表负载高,相对空闲度低则代表负载低。同时,用长度为n的数组Vnode_left_percentage来记录Ring环上n个虚拟节点的相对空闲度,其中Vnode_left_percentage[i]表示编号为i的虚拟节点的相对空闲度,初始化时将该数组所有元素初值设为100%。虚拟节点所属类别。它是在对虚拟节点进行分组时的重要参考因素,区分类别的基础是虚拟节点的相对空闲度。假定类别数目为cn(此处以cn=10为例),首先将相对空闲度取值区间[0%,100%]划分成cn个等间隔的子区间,得到10个子区间(90%,100%]、(80%,90%]、(70%,80%]、(60%,70%]、…、[0%,10%],记为子区间9、子区间8、子区间7本文档来自技高网
...

【技术保护点】
一种基于虚拟节点存储优化的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

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1