基于虚拟环负载均衡算法的分布式存储控制方法与流程

文档序号:11236815阅读:655来源:国知局
基于虚拟环负载均衡算法的分布式存储控制方法与流程

本发明涉及数据处理技术领域,特别涉及一种基于虚拟环负载均衡算法的分布式存储控制方法。



背景技术:

随着分布式云存储技术的发展和应用,业界逐渐接受在云存储系统中采用分片存储、分布式负载均衡为主要的技术实现手段,将大容量文件切分为多个对象(object),分别存储到不同的物理介质中。

在分布式对象存储中的一个关键问题是数据该如何存放。环状映射空间是其中最重要的概念,它用于记录存储对象与物理位置间映射关系。

映射环用来确定数据驻留在集群中的位置。映射环空间中每个节点的位置由逻辑“环”来维护,并存储在映射中。环空间使用映射的概念来保证数据的隔离。每个节点都确保对应不同的映射,一个映射可以是一个硬盘,一个服务器,一个机架,一个交换机,甚至是一个数据中心。

如一个普通hash算法与场景分析的例子,假设有n台存储服务器(以下简称node),打算用于图片文件存储,为了使服务器的负载均衡,需要把对象均匀地映射到每台服务器上,通常会使用哈希算法来实现,计算步骤如下:

1.计算object的hash值key

2.计算keymodn值

有n个存储节点,将key模n得到的余数就是该key对应的值需要存放的节点。比如,n是2,那么值为0、1、2、3、4的key需要分别存放在0、1、0、1和0号节点上。如果哈希算法是均匀的,数据就会被平均分配到两个节点中。如果每个数据的访问量比较平均,负载也会被平均分配到两个节点上。

但是,当数据量和访问量进一步增加,两个节点无法满足需求的时候,需要增加一个节点来服务客户端的请求。这时,n变成了3,映射关系变成了keymod(n+1),因此,上述哈希值为2、3、4的数据需要重新分配(2->server2,3->server0,4->server1)。如果数据量很大的话,那么数据量的迁移工作将会非常大。当n已经很大,从n加入一个节点变成n+1个节点的过程,会导致整个哈希环的重新分配,这个过程几乎是无法容忍的,几乎全部的数据都要重新移动一遍。

举例说明,假设有100个node的集群,将107项数据使用md5hash算法分配到每个node中。通过计算我们发现,为了提高集群1%的存储能力,需要移动9900989个数据项,也就是99.01%的数据项!显然,这种算法严重地影响了系统的性能和可扩展性。

显然该种低效率、高成本的实现方法不是好的解决方案,有必要设计出一种新的存储控制方法,通过使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,使存储容量可达更高量级,并且实现成本可控。



技术实现要素:

有鉴于此,本发明的目的是提供一种基于虚拟环负载均衡算法的分布式存储控制方法,本方法通过引入“虚拟环”概念,并采用基于“虚拟环”映射空间的分布式存储映射计算方法,从而能够在改变集群的node数量时(增加/删除服务器),能够尽可能少地改变已存在key和node的映射关系,以满足单调性,使存储容量可达更高量级,并且实现成本可控。

本发明的目的是通过以下技术方案实现的:

本发明的方法包括以下步骤:

步骤一:用户通过客户端远程上传保存大容量数据;

步骤二:对数据作切分处理;

步骤三:对每个数据切分块做hash算法计算key值;

步骤四:客户端将切分数据块的key值、数据唯一标识信息和时间戳信息等进行处理封装,提交到服务器,服务器回传每个数据分块对应的节点ip地址给客户端,随后开始并发数据上传;

步骤五:虚拟环节点根据数据的时间戳和历史模数获取相应的映射存储节点,将接收到的数据保存到物理介质中,具体是依据存储时间戳,判断有无历史存储;如果有,则进入步骤六,如果没有,根据当前存储节点模数映射到相应存储节点,保存数据,得到物理存储节点;

步骤六:根据存储节点历史模数记录,取模运算,映射到历史存储节点,得到物理存储节点;

用户需要远程下载数据时,通过远程客户端提交数据读取请求,给出数据的唯一标识信息和时间戳,从服务器获取所有相关key值和映射到的虚拟环节点ip,访问节点下载数据。

所述虚拟环上的节点数量在环形空间保持恒定不变,而每个节点对应了若干个物理存储节点,虚拟环节点在哈希空间中以哈希值排列。

进一步,所述步骤二中,原始数据经过切分后进入map函数处理,经过map函数处理的数据会在整个环形缓冲区里进行第一次排序。

进一步,所述步骤三中,map函数的输出结果根据key值进行hash映射,将数据量庞大的map输出分割为n份来实现数据的并行处理,n为reduce数目

本发明的有益效果是:

本发明通过引用一致性哈希算法,可以减少由于增加结点导致数据项的数量来提高单调性,通过引入虚拟环和历史模数表,可以避免由于存储节点数变化导致数据移动的问题。通过本发明的方法,消除了存储介质规模对数据映射的影响,在保证负载均衡的基础上,实现了云存储容量的良好的冗余特性和高扩展性。

本发明的其他优点、目标和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。本发明的目标和其他优点可以通过下面的说明书和权利要求书来实现和获得。

附图说明

为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步的详细描述,其中:

图1为本发明的方法流程示意图;

图2为本发明的虚拟环结构示意图;

图3为本发明所述系统的结构示意图。

具体实施方式

以下将参照附图,对本发明的优选实施例进行详细的描述。应当理解,优选实施例仅为了说明本发明,而不是为了限制本发明的保护范围。

如图1所示,本发明的方法包括以下步骤:

步骤一:用户通过客户端远程上传保存大容量数据;

步骤二:对数据作切分处理;

步骤三:对每个数据切分块做hash算法计算key值;

步骤四:客户端将切分数据块的key值、数据唯一标识信息和时间戳信息等进行处理封装,提交到服务器,服务器回传每个数据分块对应的节点ip地址给客户端,随后开始并发数据上传;

步骤五:虚拟环节点根据数据的时间戳和历史模数获取相应的映射存储节点,将接收到的数据保存到物理介质中,具体是依据存储时间戳,判断有无历史存储;如果有,则进入步骤六,如果没有,根据当前存储节点模数映射到相应存储节点,保存数据,得到物理存储节点;

步骤六:根据存储节点历史模数记录,取模运算,映射到历史存储节点,得到物理存储节点;

用户需要远程下载数据时,通过远程客户端提交数据读取请求,给出数据的唯一标识信息和时间戳,从服务器获取所有相关key值和映射到的虚拟环节点ip,访问节点下载数据。

其中,在步骤二中,原始数据经过切分后进入map函数处理,经过map函数处理的数据会在整个环形缓冲区里进行第一次排序。

步骤三中,map函数的输出结果根据key值进行hash映射,将数据量庞大的map输出分割为n份来实现数据的并行处理,n为reduce数目。

有鉴于哈希算法在改变node数时会带来巨大的数据迁移。为了解决这个问题,本方法引入“虚拟环”的概念,并采用基于“虚拟环”映射空间的分布式存储映射计算方法,主要目的是在改变集群的node数量时(增加/删除服务器),能够尽可能少地改变已存在key和node的映射关系,以满足单调性。在该方法中,引入“虚拟环”映射空间概念,通过计算虚结点,能够减少移动为特点来实现集群容量的自适应性。具体步骤如下:

1、引入“虚拟环”映射空间

“虚拟环”上的节点数量在环形空间保持恒定不变,而每个节点对应了若干个“物理”存储节点,“虚拟环”节点在哈希空间中以哈希值排列。如图2所示,引入了“虚拟环”后,映射关系就从【object--->node】转换成了【object--->virtualnode--->cachenode】。

2、虚拟环节点到存储节点的映射

由于虚拟环节点个数在集群的整个生命周期中是恒定不变的,它与数据项的映射关系不会发生变化,改变的仅是虚拟环node与存储node的映射关系,所以需对以上代码进行优化。在虚拟环节点上建立“存储节点历史模数表”,表中的数据项记录虚拟环节点在某个历史时间点所映射到的存储节点的模数。

如1000个虚结点对应着100个存储结点,存储结点变动时,虚结点就需要重新分配到结点。当100个结点扩展到101个结点时,此时至少有一个结点分配不到虚结点,那么就需要再在历史模数表中增加一项新的存储节点数记录,而虚结点是与数据项对应的哈希关系,如果改变了虚节点数,那么就需要重新分配所有的数据项,这将导致移动大量的数据。

3、预设合理的存储节点数

所以在设置虚结点数的时候,需要对系统预期的规模做充分考虑,假如集群的规模不会超过6000个结点,那么可以将虚结点数设置为结点数的100倍。这样,变动任意一个结点的负载仅影响1%的数据项。此时有6百万个vnode数,使用2bytes来存储结点数(0~65535)。基本的内存占用是6*106*2bytes=12mb,对于服务器来说完全可以承受。

4、存储节点映射的取模运算

由于在虚拟环的节点上记录了历史模数表,存取数据时访问端数据应携带时间戳,根据时间在虚拟环节点上通过获取历史模数表来进行取模运算,从而获取数据的具体存储节点。

如图3所示,根据本发明的方法思路,本发明的系统包括云存储客户端和云存储服务器端,云存储客户端包括若干终端和hash算法模块,云存储服务器端包括云存储服务器、虚拟环控制模块、存储节点映射模块、hash算法模块、http数据传输接口模块、物理介质读写模块和数据库访问接口模块。各组成部分有机结合,用于实现如前述的方法各步骤。本发明的方法和系统引用一致性哈希算法是为了减少由于增加结点导致数据项的数量来提高单调性,引入虚拟环和历史模数表的目的是为了避免由于存储节点数变化导致数据移动的问题。通过本发明的方法从理论上消除了存储介质规模对数据映射的影响,在保证负载均衡的基础上,实现了云存储容量的良好的冗余特性和高扩展性。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1