负载均衡方法及设备与流程

文档序号:12271064阅读:285来源:国知局
负载均衡方法及设备与流程

本申请涉及计算机领域,尤其涉及一种负载均衡方法及设备。



背景技术:

在分布式数据存储系统中,会按照字典序对一个数据表进行切片,每一片称作一个分区,并把这些分区分发到集群中的服务器上。如何将这些分区均匀地分发或动态调整,就是系统中的负载均衡方法要解决的问题。负载均衡方法的好坏会直接影响到数据存储是否均匀、业务读写请求是否均匀。在极端的情况下,如果均衡失效,所有分区被调度到一台物理机上,那么整个集群的服务能力等价于一台物理机的服务能力,集群的性能就变成和单机一样了。

现有的分布式存储系统中的负载均衡方法一般都是基于分区负载数的均衡,其目标是使得各个服务器上的分区数目基本达到相近。其基本方式如下:首先获取所有服务器上的分区负载数,计算每个服务器上的平均分区负载数,将超过分区负载数过多的服务器上的分区迁移至分区负载数过少的服务器中,以实现负载均衡。当系统中的一些物理机重启后,分区会被重新分配,在这一过程中,由于在目前的负载均衡方法仅考虑分区负载数的因素,导致分区被分配到在各个服务器上的概率是一样的,从而使得分区数据远程读取的概率大大提高。由于在远程读取时,需要访问远程服务器上的磁盘数据,相比于本地读取,远程读取需要额外的网络开销,因此读取性能较差。

因此,在采用现有的负载均衡方法对分布式存储系统进行负载均衡时,分区分配后的数据本地化率不高,从而使得整个系统的读取性能较差。



技术实现要素:

本申请的一个目的是提供一种负载均衡方法及设备,以解决现有技术中分区的数据本地化率不高、读取性能较差的问题。

为实现上述目的,本申请提供了一种负载均衡方法,该方法包括:

获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;

将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;

若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

进一步地,将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器,包括:

若某一分区当前所在服务器的数据本地化率与其数据本地化率最高的服务器的数据本地化率之差大于预设值,则将所述分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器。

进一步地,在将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器之后,以及将所述分区迁移至该分区对应的目标服务器之前,还包括:

计算每个服务器的预测分区负载数,并根据所述预测分区负载数确定高负载服务器以及低负载服务器;其中,所述预测分区负载数为若将每个分区迁移至该分区对应的目标服务器后,每个服务器上将会存在的分区的数量;

若某一分区对应的目标服务器为高负载服务器,且所述分区为所述目标服务器上将会存在的所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数。

进一步地,根据所述预测分区负载数确定高负载服务器以及低负载服务器,包括:

将所述预测分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述预测分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

进一步地,N为所述高负载服务器的预测分区负载数与所有服务器的平均预测分区负载数之差。

进一步地,将所述分区迁移至该分区对应的目标服务器之后,还包括:

获取每个服务器的当前分区负载数,并根据所述当前分区负载数确定高负载服务器以及低负载服务器;

若某一分区当前所在的服务器为高负载服务器,且所述分区为当前所在的服务器上所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数;

若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

进一步地,根据所述当前分区负载数确定高负载服务器以及低负载服务器,包括:

将所述当前分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述当前分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

进一步地,N为所述高负载服务器的当前分区负载数与所有服务器的平均当前分区负载数之差。

进一步地,将所述分区对应的目标服务器变更为所述低负载服务器,包括:

当所述低负载服务器为多个时,根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。

进一步地,将所述分区迁移至该分区对应的目标服务器,包括:

根据预设的间隔时间依次将每个分区迁移至该分区对应的目标服务器。

基于本申请的另一方面,还提供了一种负载均衡设备,该设备包括:

本地化率获取装置,用于获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;

目标确定装置,用于将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;

分区迁移装置,用于若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

进一步地,所述目标确定装置,用于若某一分区当前所在服务器的数据本地化率与其数据本地化率最高的服务器的数据本地化率之差大于预设值,则将所述分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器。

进一步地,该设备还包括:

负载确定装置,用于在将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器之后,计算每个服务器的预测分区负载数,并根据所述预测分区负载数确定高负载服务器以及低负载服务器;其中,所述预测分区负载数为若将每个分区迁移至该分区对应的目标服务器后,每个服务器上将会存在的分区的数量;

目标变更装置,用于在将所述分区迁移至该分区对应的目标服务器之前,若某一分区对应的目标服务器为高负载服务器,且所述分区为所述目标服务器上将会存在的所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数。

进一步地,所述负载确定装置,用于将所述预测分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述预测分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

进一步地,N为所述高负载服务器的预测分区负载数与所有服务器的平均预测分区负载数之差。

进一步地,该设备还包括:

负载确定装置,用于在将所述分区迁移至该分区对应的目标服务器之后,获取每个服务器的当前分区负载数,并根据所述当前分区负载数确定高负载服务器以及低负载服务器;

目标变更装置,用于若某一分区当前所在的服务器为高负载服务器, 且所述分区为当前所在的服务器上所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数;

所述分区迁移装置,还用于在所述目标变更装置将所述分区对应的目标服务器变更为所述低负载服务器之后,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

进一步地,所述负载确定装置,用于将所述当前分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述当前分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

进一步地,N为所述高负载服务器的当前分区负载数与所有服务器的平均当前分区负载数之差。

进一步地,当所述低负载服务器为多个时,所述目标变更装置,用于根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。

进一步地,所述分区迁移装置,用于根据预设的间隔时间依次将每个分区迁移至该分区对应的目标服务器。

与现有技术相比,本申请提供的技术方案中通过获取分区在每个服务器上的数据本地化率,并且根据数据本地化率将每个分区分配至本地化率最高的服务器中,在处理数据查询请求时,由于每个分区当前被分配到的服务器中数据本地化率较高,大部分的数据能够在本地服务器的磁盘中获取,因此能够很大程度上降低分区数据远程读取的概率,提高读取性能。此外,通过结合分区负载数进一步调整分区的分配,能够在优化读取性能的同时,避免某些服务器在特定情况下(例如数据热点或者系统扩容)可能出现的分区负载相对集中的问题。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:

图1为本申请实施例提供的一种负载均衡方法的流程图;

图2为本申请实施例涉及的基于分布式文件系统的分布式数据存储系统的存储原理图;

图3为本申请实施例提供的一种优选的负载均衡方法的流程图;

图4为本申请实施例提供的一种更优选的负载均衡方法的流程图;

图5为本申请实施例提供的一种负载均衡设备的结构示意图;

图6为本申请实施例提供的一种优选的负载均衡设备的结构示意图;

图7为本申请实施例提供的一种更优选的负载均衡设备的结构示意图;

附图中相同或相似的附图标记代表相同或相似的部件。

具体实施方式

下面结合附图对本申请作进一步详细描述。

在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

图1示出了本申请实施例提供的一种负载均衡方法,该方法包括以下几个步骤:

步骤S101,获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;

步骤S102,将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;

步骤S103,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

由于现有的负载均衡方法一般都是基于分区负载数的均衡,仅考虑到分区负载数的因素,使得分区在重新分配时分区被分配至各个服务器上的概率是一样的,因此容易造成分区所在的服务器中该分区的数据本地化率较低,对于大部分数据查询请求往往需要通过远程访问其它物理机的磁盘才能够获取,这将大大降低系统的读取性能。例如,对于一台采用SSD(Solid State Drive,固态硬盘)的物理机,如果随机读取请求都是本地读取,那么可以提供的QPS(Query Per Second,每秒查询数)能力接近于30000次;如果都是远程读取,以千兆网卡提供的100MB/S能力计算,一个随机读取至少访问一个16KB的数据块,那么可以提供的QPS能力只能达到6000次。在不考虑QPS吞吐的情况下,从响应延迟上来说,远程读取会比本地读取至少有0.5ms的额外开销。因此,通过获取分区在每个服务器上的数据本地化率,并且根据数据本地化率将每个分区分配至本地化率最高的服务器中,在处理数据查询请求时,由于每个分区当前被分配到的服务器中数据本地化率较高,大部分的数据能够在本地服务器的磁盘中获取,因此能够很大程度上降低分区数据远程读取的概率,提高读取性能。

在基于分布式文件系统的分布式数据存储系统中,例如基于HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)的Hbase(Hadoop Datebase,Hadoop数据库),分区(Region)即为一个逻辑表(Table)按照一个按照预设的规则切分后的数据单元,各个分区之间没有交集,所有分区构成一张完整的逻辑表。一个分区会包含多个文件(File),而一个文件(File) 会由一个或多个数据块(Block)组成,数据块是物理存储的基本单元。在分布式文件系统中,每个数据块会有多个副本,被分配到分布式文件系统的多台服务器中进行冗余存储。图2示出了基于分布式文件系统的分布式数据存储系统的存储原理图,分布式数据存储系统中包含3个服务器分别为服务器1、服务器2以及服务器3,每个服务器上分别分配有多个分区,例如服务器1的分区为分区A、分区B。对于每个分区,又包含多个文件,例如分区A包含文件1和文件2,文件1又进一步包含数据块11、数据块12,文件2包含数据块21、数据块22。在分布式文件系统中,服务器1’、服务器2’以及服务器3’分别与服务器1、服务器2以及服务器3是同一台物理机。每个数据块均有两个副本,部署与分布式文件系统的服务器中,其中,数据块11的两个副本分别部署于服务器1’和服务器3’,数据块12的两个副本分别部署于服务器2’和服务器3’,数据块21的两个副本分别部署于服务器1’和服务器3’,数据块22的两个副本分别部署于服务器2’和服务器3’。由此可知,分区A的数据本地化率分布(即分区A在每台服务器上的数据本地化率)为:

其中,AServer1、AServer2、AServer3分别表示分区A在服务器1~3的数据本地化率,Block11、Block12、Block21、Block22分别表示数据块11、数据块12、数据块21、数据块22的大小,File1、File2分别表示文件1和文件2的大小。

在此,本领域技术人员还应能理解图2中仅为简明起见而示出的各类服务器、分区、文件、数据块的数量可能小于实际应用中的数量,但此种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。

通常情况下,文件的数据块的多个副本是对等的,即多个部分的存储介质相同,例如各个副本都存储在HDD(Hard Disk Drive,硬盘驱动器)或者SSD中,此时在计算数据本地化率时,每个物理机存储介质上的数据块都会被计算。但是在多个多副本异构存储介质的混合存储场景中,文件的数据块 的多个副本是不对等的,如前述数据块11的两个副本,一个存储在HDD中,另一个存储在SSD中,由于SSD的读取性能明显高于HDD,在数据本地化计算中,只有存储在SSD中的数据块会被计算,例如对于数据块11的两个副本,在服务器1’中被存储在HDD中,在服务器3’中则被存储在SSD中,则在计算数据本地化率时,仅计算在服务器3’中的数据,分区A在服务器1上的数据本地化率则变为:

在此,所述负载均衡方法的执行主体可以是分布式数据存储系统中的中心服务器。所述中心服务器包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。所述中心服务器能够通过心跳报告的方式定时收集分区在各个服务器上的数据本地化率。

根据步骤S101中获取到的每一分区在每个服务器上的数据本地化率,能够确定每个分区的数据本地化率最高的服务器,该服务器即为对应分区的优选服务器,将作为分区迁移的目标服务器。仍以图2所示的场景为例,假设数据块11、数据块12、数据块21、数据块22的大小相同,此时分区A的数据本地化率分布为:

由此,会产生一个分区迁移计划,将服务器3确定为分区A的目标服务器。由于分区A当前部署的服务器为服务器1,与其目标服务器不是同一个服务器,因此执行分区迁移计划,将分区A迁移至该分区对应的目标服务器,即服务器3。若分区当前所在的服务器与其目标服务器为同一个服务器, 则表示分区当前部署的服务器已经拥有最高的数据本地化率,因为无需进行分区迁移。在完成迁移之后,分区A在服务器3中的数据本地化率能够达到100%,即对于任意的数据查询请求,只需要在服务器3所在的物理机的本地磁盘进行本地读取,即可获取到需要数据,因此读取性能大大提高。

此外,在实际应用中,由于涉及的服务器、分区、文件以及数据块的数量将会明显多于图2所示的数量。在一般情况下,对于某一服务器而言,当某几个分区的数据本地化率高时,由于存储空间的限制,其余分区的数据块保存于该服务器对应的物理机上的数量就会相对较少,使得其余分区在该服务器上的数据本地化率相对较低,因此在根据数据本地化率进行分区迁移后,每个服务器上的分区负载数也会较为平衡,使得各个服务器的负载较为接近。

由于在进行分区迁移时,会对分布式数据存储系统带来一定的处理负载,为了防止分区迁移次数过多而对系统的正常运行造成影响,当迁移带来的数据本地化率提高较小时,可以不做迁移。具体地,将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器,包括:若某一分区当前所在服务器的数据本地化率与其数据本地化率最高的服务器的数据本地化率之差大于预设值,则将所述分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器。其中,所述预设值可以根据实际应用场景来设置,如可以设置为10%,即分区在当前服务器的数据本地化率和能够达到的最高的数据本地化率之差如果大于10%,才进行将这个最高的数据本地化率的服务器作为目标服务器。

以分区A为例,假设分区A在当前部署的服务器1中的数据本地化率为70%,并且其在服务器2和服务器3的数据本地化率分别为30%和75%。此时,对于分区A,数据本地化率最高的服务器为服务器3,但是与其当前所在的服务器的数据本地化率之差仅有5%,在进行迁移后对于整体读取性能的提升不明显,因此可以不进行迁移,在实际处理过程中可以将分区A的目标服务器设定为其当前所在的服务器(即服务器1)。若分区在服务器3的数据本地化率达到了90%,那么进行迁移以后数据本地化率可以提升20%,此时对于读取性能的提升则较为明显,因此将服务器 3作为分区A的目标服务器。

在根据前述方法进行分区迁移后,可以使得调整后的分布式数据存储系统中每个分区的数据本地化率达到最高,同时在一般情况下可以使得服务器之间的负载相对较为平衡。但是,对于数据热点或者系统扩容的情况等特殊情况,某些服务器节点上的数据可能较为集中,造成个别服务器上会负载很多分区,而另外一些服务器负载的分区较少,造成分区负载数的不均衡。为此,本申请实施例还提供了一种优选的负载均衡方法,结合图1所示的方案,该方法的处理流程如图3所示,包括以下步骤:

步骤S101,获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;

步骤S102,将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;

步骤S103,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器;

步骤S104,获取每个服务器的当前分区负载数,并根据所述当前分区负载数确定高负载服务器以及低负载服务器;

步骤S105,若某一分区当前所在的服务器为高负载服务器,且所述分区为当前所在的服务器上所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数;

步骤S106,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

在根据分区的数据本地化率进行分区迁移之后,再结合所有服务器的分区负载数再一次进行调整,减少因仅数据本地化率进行分区迁移后可能引起的分区负载不平衡的情况,在保证数据读取性能的前提下,使得服务器的分区负载数达到更加平衡的状态。

在此,所述低负载服务器和高负载服务器分别是指部署的分区数量低于和高于平均分区负载数的服务器。在实际应用中,可以根据平均分区负载数 设置一个预设负载范围,根据预设负载范围的上限和下限值来判断某一服务器是否属于低负载服务器或者高负载服务器。由此,步骤S104可以为:获取每个服务器的当前分区负载数,并将所述当前分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述当前分区负载数低于预设负载范围下限的服务器确定为低负载服务器。例如,可以将预设负载范围上限设定为:平均分区负载数×(1+系数),预设负载范围上限设定为:平均分区负载数×(1+系数),该系数可以根据具体的应用场景来设定,例如本实施例中设定为0.1,若根据获取到的每个服务器的当前分区负载数计算得到平均分区负载数为50个,则预设负载范围上限为50×(1+0.1)=55,预设负载范围下限为50×(1-0.1)=45,即将所述当前分区负载数高于55的服务器确定为高负载服务器,将所述当前分区负载数低于45的服务器确定为低负载服务器。

例如,若服务器3的当前分区负载数为57,被确定为高负载服务器,而服务器1的当前分区负载数为40,被确定为低负载服务器,可以将服务器3中数据本地化率最低的几个分区迁移至服务器1中,使得分区负载更加均衡。此时,迁移的数量可以根据实际需求确定,可以是一个或者多个,当仅迁移一个数据本地化率最低的分区时,虽然无法将服务器3的分区负载数降低至预设负载范围内,但是仍然能够使得负载趋于均衡。作为一种优选的方式,由高负载服务器向低负载服务器迁移的分区数量可以根据平均分区负载数确定。即步骤S105中,N为所述高负载服务器的当前分区负载数与所有服务器的平均当前分区负载数之差。对于本例中的服务器3,其需要迁移的分区数量为7个,即若某一分区为当前所在服务器上所有分区中数据本地化率较低的7个分区之一,则该分区对应的目标服务器会变更为服务器1。对于其余6个数据本地化率较低的分区,其目标服务器同样会被变更为低负载服务器。

当所述低负载服务器为多个时,可以通过随机分配的方式,将分区对应的目标服务器变更为某一个低负载服务器。此外,根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。例如,服务器1为高负载服务 器,服务器3、服务器4、服务器6均为低负载服务器,分区B为服务器1中的数据本地化率最低的分区,为52%,该分区B在服务器3、服务器4、服务器6上的数据本地化率分别为40%、33%和17%。分区B仍然会由高负载服务器中迁移至低负载服务器中,以保证分区负载数的均衡。在选择目标服务器时,仍然可以根据数据本地化率选取最优的服务器,如对于分区B其最优的低负载服务器为服务器3。

在本方案中,结合上例可能出现以下情况:若在步骤S101时,分区B当前所在的服务器为服务器6,其数据本地化率为17%;在步骤S102时,确定该分区B的目标服务器为服务器1,其数据本地化率为52%;在步骤S103时,将分区B迁移至当前设定的目标服务器中,使其拥有最优的数据本地化率。但是在步骤S104至步骤S106中,基于分区负载数的考虑,又需要将分区B的目标服务器变更为服务器3,并进行迁移。在此过程中,对分区B进行了两次迁移,而从最终结果上来说分区B由服务器6迁移至了服务器3,理论上仅需要一次迁移即可完成。因此,上述方案中S103中进行迁移有可能是无效的。

为了避免可能出现的无效迁移的情形,本申请实施例还提供了一种更优选的负载均衡方法,结合图1所示的方案,该方法的处理流程如图4所示,包括以下步骤:

步骤S101,获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;

步骤S102,将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;

步骤S107,计算每个服务器的预测分区负载数,并根据所述预测分区负载数确定高负载服务器以及低负载服务器;其中,所述预测分区负载数为若将每个分区迁移至该分区对应的目标服务器后,每个服务器上将会存在的分区的数量;

步骤S108,若某一分区对应的目标服务器为高负载服务器,且所述分区为所述目标服务器上将会存在的所有分区中数据本地化率较低的N个 分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数;

步骤S103,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

该方案在将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器之后,通过模拟计算的方式,预测出根据确定的目标服务器迁移对应分区之后,每个服务器将会存在的分区负载数。通过预测的分区负载数,并且集合分区负载数的平衡变更分区的目标服务器,集合此时确定的目标服务器再统一进行分区的迁移。由于模拟计算需要付出的运算代价远小于实际迁移,因此可以在付出较小的运算代价的前提下,避免无效的迁移,节约处理开支,提升负载均衡的效率。

在此,用于确定高负载服务器以及低负载服务器的预测分区负载数是一个根据第一次确定的目标服务器得出的计算值,并非由各个服务器直接获取到的实际值。根据该预测分区负载数确定高负载服务器和低负载服务器的方式以及当所述低负载服务器有多个时,如何选取其中之一作为目标服务器的方式均与前述图3所示的负载均衡方法类似,为简明起见,此处不再举例论述。

具体地,在步骤S107中,根据所述预测分区负载数确定高负载服务器以及低负载服务器,包括:将所述预测分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述预测分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

在步骤S108中,N为所述高负载服务器的预测分区负载数与所有服务器的平均预测分区负载数之差。并且将所述分区对应的目标服务器变更为所述低负载服务器,具体包括:当所述低负载服务器为多个时,根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。

进一步地,对于本实施例中所述的任意一种负载均衡方法,在进行多个分区迁移时,将所述分区迁移至该分区对应的目标服务器,具体包括:根据预设的间隔时间依次将每个分区迁移至该分区对应的目标服务器。由 于在分区迁移的过程中,分布式数据存储系统的相关设置会发生变化,若短时间内进行大量的迁移,可能造成系统内部设置变化过快,导致系统发生抖动。为避免此种情况,可以在每个分区进行迁移的时,设置一定的间隔时间(例如100ms),防止分区迁移带来的抖动。

基于本申请的另一方面,本申请实施例还提供了一种负载均衡设备,该设备的结构如图5所示,该设备5包括本地化率获取装置510、目标确定装置520以及分区迁移装置530。具体地,本地化率获取装置510用于获取每一分区在每个服务器上的数据本地化率,其中,所述数据本地化率为所述分区存储于某一服务器所对应的物理机上的本地数据与所述分区的总数据的比值;目标确定装置520用于将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器;分区迁移装置530用于若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。

由于现有的负载均衡设备一般都是基于分区负载数的均衡,仅考虑到分区负载数的因素,使得分区在重新分配时分区被分配至各个服务器上的概率是一样的,因此容易造成分区所在的服务器中该分区的数据本地化率较低,对于大部分数据查询请求往往需要通过远程访问其它物理机的磁盘才能够获取,这将大大降低系统的读取性能。例如,对于一台采用SSD的物理机,如果随机读取请求都是本地读取,那么可以提供的QPS能力接近于30000次;如果都是远程读取,以千兆网卡提供的100MB/S能力计算,一个随机读取至少访问一个16KB的数据块,那么可以提供的QPS能力只能达到6000次。在不考虑QPS吞吐的情况下,从响应延迟上来说,远程读取会比本地读取至少有0.5ms的额外开销。因此,通过获取分区在每个服务器上的数据本地化率,并且根据数据本地化率将每个分区分配至本地化率最高的服务器中,在处理数据查询请求时,由于每个分区当前被分配到的服务器中数据本地化率较高,大部分的数据能够在本地服务器的磁盘中获取,因此能够很大程度上降低分区数据远程读取的概率,提高读取性能。

在基于分布式文件系统的分布式数据存储系统中,例如基于HDFS,分 区即为一个逻辑表按照一个按照预设的规则切分后的数据单元,各个分区之间没有交集,所有分区构成一张完整的逻辑表。一个分区会包含多个文件,而一个文件会由一个或多个数据块组成,数据块是物理存储的基本单元。在分布式文件系统中,每个数据块会有多个副本,被分配到分布式文件系统的多台服务器中进行冗余存储。图2示出了基于分布式文件系统的分布式数据存储系统的存储原理图,分布式数据存储系统中包含3个服务器分别为服务器1、服务器2以及服务器3,每个服务器上分别分配有多个分区,例如服务器1的分区为分区A、分区B。对于每个分区,又包含多个文件,例如分区A包含文件1和文件2,文件1又进一步包含数据块11、数据块12,文件2包含数据块21、数据块22。在分布式文件系统中,服务器1’、服务器2’以及服务器3’分别与服务器1、服务器2以及服务器3是同一台物理机。每个数据块均有两个副本,部署与分布式文件系统的服务器中,其中,数据块11的两个副本分别部署于服务器1’和服务器3’,数据块12的两个副本分别部署于服务器2’和服务器3’,数据块21的两个副本分别部署于服务器1’和服务器3’,数据块22的两个副本分别部署于服务器2’和服务器3’。由此可知,分区A的数据本地化率分布(即分区A在每台服务器上的数据本地化率)为:

其中,AServer1、AServer2、AServer3分别表示分区A在服务器1~3的数据本地化率,Block11、Block12、Block21、Block22分别表示数据块11、数据块12、数据块21、数据块22的大小,File1、File2分别表示文件1和文件2的大小。

在此,本领域技术人员还应能理解图2中仅为简明起见而示出的各类服务器、分区、文件、数据块的数量可能小于实际应用中的数量,但此种省略无疑地是以不会影响对本发明进行清楚、充分的公开为前提的。

通常情况下,文件的数据块的多个副本是对等的,即多个部分的存储介质相同,例如各个副本都存储在HDD或者SSD中,此时在计算数据本地化 率时,每个物理机存储介质上的数据块都会被计算。但是在多个多副本异构存储介质的混合存储场景中,文件的数据块的多个副本是不对等的,如前述数据块11的两个副本,一个存储在HDD中,另一个存储在SSD中,由于SSD的读取性能明显高于HDD,在数据本地化计算中,只有存储在SSD中的数据块会被计算,例如对于数据块11的两个副本,在服务器1’中被存储在HDD中,在服务器3’中则被存储在SSD中,则在计算数据本地化率时,仅计算在服务器3’中的数据,分区A在服务器1上的数据本地化率则变为:

在此,所述设备5可以是分布式数据存储系统中的中心服务器。所述中心服务器包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现。在此,云由基于云计算的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟计算机。所述中心服务器能够通过心跳报告的方式定时收集分区在各个服务器上的数据本地化率。

本地化率获取装置510根据获取到的每一分区在每个服务器上的数据本地化率,能够确定每个分区的数据本地化率最高的服务器,该服务器即为对应分区的优选服务器,将作为分区迁移的目标服务器。仍以图2所示的场景为例,假设数据块11、数据块12、数据块21、数据块22的大小相同,此时分区A的数据本地化率分布为:

由此,会产生一个分区迁移计划,将服务器3确定为分区A的目标服务器。由于分区A当前部署的服务器为服务器1,与其目标服务器不是同一个服务器,因此执行分区迁移计划,将分区A迁移至该分区对应的目标服务器,即服务器3。若分区当前所在的服务器与其目标服务器为同一个服务器, 则表示分区当前部署的服务器已经拥有最高的数据本地化率,因为无需进行分区迁移。在完成迁移之后,分区A在服务器3中的数据本地化率能够达到100%,即对于任意的数据查询请求,只需要在服务器3所在的物理机的本地磁盘进行本地读取,即可获取到需要数据,因此读取性能大大提高。

此外,在实际应用中,由于涉及的服务器、分区、文件以及数据块的数量将会明显多于图2所示的数量。在一般情况下,对于某一服务器而言,当某几个分区的数据本地化率高时,由于存储空间的限制,其余分区的数据块保存于该服务器对应的物理机上的数量就会相对较少,使得其余分区在该服务器上的数据本地化率相对较低,因此在根据数据本地化率进行分区迁移后,每个服务器上的分区负载数也会较为平衡,使得各个服务器的负载较为接近。

由于在进行分区迁移时,会对分布式数据存储系统带来一定的处理负载,为了防止分区迁移次数过多而对系统的正常运行造成影响,当迁移带来的数据本地化率提高较小时,可以不做迁移。具体地,所述目标确定装置520用于若某一分区当前所在服务器的数据本地化率与其数据本地化率最高的服务器的数据本地化率之差大于预设值,则将所述分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器。其中,所述预设值可以根据实际应用场景来设置,如可以设置为10%,即分区在当前服务器的数据本地化率和能够达到的最高的数据本地化率之差如果大于10%,才进行将这个最高的数据本地化率的服务器作为目标服务器。

以分区A为例,假设分区A在当前部署的服务器1中的数据本地化率为70%,并且其在服务器2和服务器3的数据本地化率分别为30%和75%。此时,对于分区A,数据本地化率最高的服务器为服务器3,但是与其当前所在的服务器的数据本地化率之差仅有5%,在进行迁移后对于整体读取性能的提升不明显,因此可以不进行迁移,在实际处理过程中可以将分区A的目标服务器设定为其当前所在的服务器(即服务器1)。若分区在服务器3的数据本地化率达到了90%,那么进行迁移以后数据本地化率可以提升20%,此时对于读取性能的提升则较为明显,因此将服务器3作为分区A的目标服务器。

在根据前述设备5进行分区迁移后,可以使得调整后的分布式数据存储系统中每个分区的数据本地化率达到最高,同时在一般情况下可以使得服务器之间的负载相对较为平衡。但是,对于数据热点或者系统扩容的情况等特殊情况,某些服务器节点上的数据可能较为集中,造成个别服务器上会负载很多分区,而另外一些服务器负载的分区较少,造成分区负载数的不均衡。为此,本申请实施例还提供了一种优选的负载均衡设备,该设备5的结构如图6所示,除如图5所示的本地化率获取装置510、目标确定装置520和分区迁移装置530之外,还包括负载确定装置540以及目标变更装置550。具体地,负载确定装置540用于在将所述分区迁移至该分区对应的目标服务器之后,获取每个服务器的当前分区负载数,并根据所述当前分区负载数确定高负载服务器以及低负载服务器;目标变更装置550用于若某一分区当前所在的服务器为高负载服务器,且所述分区为当前所在的服务器上所有分区中数据本地化率较低的N个分区之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数。所述分区迁移装置530,除了用于根据所述目标确定装置确定的目标服务器迁移所述分区之外,还用于在所述目标变更装置将所述分区对应的目标服务器变更为所述低负载服务器之后,若所述分区当前所在服务器与其对应的目标服务器为不同的服务器,则将所述分区迁移至该分区对应的目标服务器。在此,本领域技术人员应当理解,所述本地化率获取装置510和目标确定装置520分别与图5实施例中对应装置的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。

在根据分区的数据本地化率进行分区迁移之后,再结合所有服务器的分区负载数再一次进行调整,减少因仅数据本地化率进行分区迁移后可能引起的分区负载不平衡的情况,在保证数据读取性能的前提下,使得服务器的分区负载数达到更加平衡的状态。

在此,所述低负载服务器和高负载服务器分别是指部署的分区数量低于和高于平均分区负载数的服务器。在实际应用中,可以根据平均分区负载数设置一个预设负载范围,根据预设负载范围的上限和下限值来判断某一服务器是否属于低负载服务器或者高负载服务器。由此,所述负载确定装置540 在确定高负载服务器和低负载服务器时,将所述当前分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述当前分区负载数低于预设负载范围下限的服务器确定为低负载服务器。例如,可以将预设负载范围上限设定为:平均分区负载数×(1+系数),预设负载范围上限设定为:平均分区负载数×(1+系数),该系数可以根据具体的应用场景来设定,例如本实施例中设定为0.1,若根据获取到的每个服务器的当前分区负载数计算得到平均分区负载数为50个,则预设负载范围上限为50×(1+0.1)=55,预设负载范围下限为50×(1-0.1)=45,即将所述当前分区负载数高于55的服务器确定为高负载服务器,将所述当前分区负载数低于45的服务器确定为低负载服务器。

例如,若服务器3的当前分区负载数为57,被确定为高负载服务器,而服务器1的当前分区负载数为40,被确定为低负载服务器,可以将服务器3中数据本地化率最低的几个分区迁移至服务器1中,使得分区负载更加均衡。此时,迁移的数量可以根据实际需求确定,可以是一个或者多个,当仅迁移一个数据本地化率最低的分区时,虽然无法将服务器3的分区负载数降低至预设负载范围内,但是仍然能够使得负载趋于均衡。作为一种优选的方式,由高负载服务器向低负载服务器迁移的分区数量可以根据平均分区负载数确定。即目标变更装置550中使用的N为所述高负载服务器的当前分区负载数与所有服务器的平均当前分区负载数之差。对于本例中的服务器3,其需要迁移的分区数量为7个,即若某一分区为当前所在服务器上所有分区中数据本地化率较低的7个分区之一,则该分区对应的目标服务器会变更为服务器1。对于其余6个数据本地化率较低的分区,其目标服务器同样会被变更为低负载服务器。

当所述低负载服务器为多个时,所述目标变更装置550可以通过随机分配的方式,将分区对应的目标服务器变更为某一个低负载服务器。此外,所述目标变更装置550也根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。例如,服务器1为高负载服务器,服务器3、服务器4、服务器6均为低负载服务器,分区B为服务器1中的数据本地化率最低的 分区,为52%,该分区B在服务器3、服务器4、服务器6上的数据本地化率分别为40%、33%和17%。分区B仍然会由高负载服务器中迁移至低负载服务器中,以保证分区负载数的均衡。在选择目标服务器时,仍然可以根据数据本地化率选取最优的服务器,如对于分区B其最优的低负载服务器为服务器3。

在本方案中,结合上例可能出现以下情况:若本地化率获取装置510在获取分区数据本地化率时,分区B当前所在的服务器为服务器6,其数据本地化率为17%;目标确定装置520根据本地化率获取装置510获得分区数据本地化率确定该分区B的目标服务器为服务器1,其数据本地化率为52%;此时,分区迁移装置530根据目标确定装置520确定的目标服务器,将分区B迁移至当前设定的目标服务器中,使其拥有最优的数据本地化率。但是负载确定装置540、目标变更装置550以及分区迁移装置530可能会在后续处理过程中基于分区负载数的考虑,又需要将分区B的目标服务器变更为服务器3,并进行迁移。在此过程中,对分区B进行了两次迁移,而从最终结果上来说分区B由服务器6迁移至了服务器3,理论上仅需要一次迁移即可完成。因此,上述方案中分区迁移装置530对于某一分区进行的第一次迁移(即根据目标确定装置520确定的目标服务器进行的迁移)有可能是无效的。

为了避免可能出现的无效迁移的情形,本申请实施例还提供了一种更优选的负载均衡设备,该设备5的结构如图7所示,除如图5所示的本地化率获取装置510、目标确定装置520和分区迁移装置530之外,还包括负载确定装置540’以及目标变更装置550’。负载确定装置540’用于在将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器之后,计算每个服务器的预测分区负载数,并根据所述预测分区负载数确定高负载服务器以及低负载服务器;其中,所述预测分区负载数为若将每个分区迁移至该分区对应的目标服务器后,每个服务器上将会存在的分区的数量;目标变更装置550’用于在将所述分区迁移至该分区对应的目标服务器之前,若某一分区对应的目标服务器为高负载服务器,且所述分区为所述目标服务器上将会存在的所有分区中数据本地化率较低的N个分区 之一,则将所述分区对应的目标服务器变更为所述低负载服务器,其中,N为正整数。在此,本领域技术人员应当理解,所述本地化率获取装置510、目标确定装置520和分区迁移装置530分别与图5实施例中对应装置的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。

该方案在将每一分区的数据本地化率最高的服务器确定为所述分区对应的目标服务器之后,通过模拟计算的方式,预测出根据确定的目标服务器迁移对应分区之后,每个服务器将会存在的分区负载数。通过预测的分区负载数,并且集合分区负载数的平衡变更分区的目标服务器,集合此时确定的目标服务器再统一进行分区的迁移。由于模拟计算需要付出的运算代价远小于实际迁移,因此可以在付出较小的运算代价的前提下,避免无效的迁移,节约处理开支,提升负载均衡的效率。

在此,负载确定装置540’中用于确定高负载服务器以及低负载服务器的预测分区负载数是一个根据第一次确定的目标服务器得出的计算值,并非由各个服务器直接获取到的实际值。负载确定装置540’根据该预测分区负载数确定高负载服务器和低负载服务器的方式以及当所述低负载服务器有多个时,目标变更装置550’如何选取其中之一作为目标服务器的方式均与前述图6所示的负载均衡设备中负载确定装置540和目标变更装置550所采用的方式类似。

具体地,所述负载确定装置540’用于将所述预测分区负载数高于预设负载范围上限的服务器确定为高负载服务器,将所述预测分区负载数低于预设负载范围下限的服务器确定为低负载服务器。

目标变更装置550’所使用的N为所述高负载服务器的预测分区负载数与所有服务器的平均预测分区负载数之差。当所述低负载服务器为多个时,所述目标变更装置550’用于根据所述分区在所述低负载服务器的数据本地化率,将所述分区对应的目标服务器变更为所述分区的数据本地化率最高的低负载服务器。

进一步地,对于本实施例中所述的任意一种负载均衡设备,所述分区迁移装置530在进行多个分区迁移时,根据预设的间隔时间依次将每个分 区迁移至该分区对应的目标服务器。由于在分区迁移的过程中,分布式数据存储系统的相关设置会发生变化,若短时间内进行大量的迁移,可能造成系统内部设置变化过快,导致系统发生抖动。为避免此种情况,可以在每个分区进行迁移的时,设置一定的间隔时间(例如100ms),防止分区迁移带来的抖动。

综上所述,本申请提供的技术方案中通过获取分区在每个服务器上的数据本地化率,并且根据数据本地化率将每个分区分配至本地化率最高的服务器中,在处理数据查询请求时,由于每个分区当前被分配到的服务器中数据本地化率较高,大部分的数据能够在本地服务器的磁盘中获取,因此能够很大程度上降低分区数据远程读取的概率,提高读取性能。此外,通过结合分区负载数进一步调整分区的分配,能够在优化读取性能的同时,避免某些服务器在特定情况下(例如数据热点或者系统扩容)可能出现的分区负载相对集中的问题。

需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。

另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。

对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。

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