分布式存储系统的负载监控方法及设备与流程

文档序号:12157227阅读:182来源:国知局
分布式存储系统的负载监控方法及设备与流程

本申请涉及计算机领域,尤其涉及一种分布式存储系统的负载监控方法及设备。



背景技术:

分布式存储系统是一种使用集群提供存储服务的分布式系统,用户使用键码(Key)作为索引对相应的键值(Value)进行读写等操作。对于一个键码(Key),用户可以对其进行写入键值(Value)、读取对应的键值(Value)或者删除对应的键值(Value)等不同类型的操作,每个操作称为一个请求。分布式存储系统中的线程池是一种拥有一定数目线程的服务单元,请求先加入线程池的队列中进行等待,线程池中的线程会在空闲的时候依次从队列中取出请求进行处理。分区(Partition)是分布式存储系统调度的基本单元,键码(Key)通过分区(Partition)的开始键码(BeginKey)和结束键码(EndKey)来唯一的确定隶属的分区(Partition),不同的分区(Partition)之间不存在重叠。分布式存储系统中的服务器(Server)是提供服务的基本单元,每个服务器(Server)上拥有若干个分区(Partition),不同键码(Key)的请求根据所属的分区(Partition)的不同从而被不同的服务器(Server)所处理,服务器(Server)内部使用线程池作为实际处理单元来处理不同的请求。

用户的键码(Key)是分成分区(Partition)然后按照顺序存储在分布式文件系统中,由于单个分区只能隶属于一台服务器(Server),因此,单个分区范围内的用户请求增多的时候,会导致服务器的负载增大,用户的延时(Latency)增高等,而且还会对这台服务器上的其他分区造成影响。因此,为了保证充分利用集群内部的所有服务器的服务能力,需要一种负载监控的 方案来分散热点,提高服务质量。目前解决请求热点的手段是分区的分裂和迁移。其中,分裂是将分区(Partition)按照不同的键码范围(Keys)分成多个分区(Partition),分裂之后的分区(Partition)会随机分散到其他的服务器(Server)上;迁移是将分区(Partition)从一台服务器(Server)移动到另外一台服务器(Server)上。

已有的解决请求热点的手段大致有如下三种:

1.当单个分区(Partition)的大小超过一定的限制之后,将Partition分成平均分裂成若干个分区(Partition)。但是,按照单个分区(Partition)的大小切分的方案中并不能准确的反映分区(Partition)的处理能力,用户的请求模式不一致,导致分区(Partition)大小对其的影响也不一样,有时候在很小的分区(Partition)大小的情况下也会因为用户请求集中在很小范围内的原因导致热点的出现。

2.当单个分区(Partition)的请求的每秒查询率(QPS)大于某个阈值之后,将分区(Partition)按照用户请求的范围进行分裂划分。但是,按照请求的的每秒查询率(QPS)作为阈值来划分需要测定不同服务器(Server)的处理能力,因此在不同的服务器(Server)上需要配置不同的值,而且在服务器(Server)上还运行有其他的程序情况下有时候并不能达到理论的处理能力。

3.获取请求执行的一些参数,比如IO操作时间,Cache命中次数等,然后配置一定的规则,当满足预设的条件的时候执行分裂。根据参数配置一定的规则来进行分裂的方案虽然具有很强的灵活性,但是,也正是因为这个原因,在不同的场景下配置的规则也不尽相同,而且需要根据用户的请求模式更新规则,不够自动化。



技术实现要素:

本申请的一个目的是提供一种用于分布式存储系统的负载监控方法及设 备,能够解决分布式存储系统的出现热点的问题。

根据本申请的一个方面,提供了一种分布式存储系统的负载监控方法,该方法包括:

确定分布式存储系统中每台服务器上所有负载压力超标的线程池;

对每个负载压力超标的线程池进行报警或负载均衡。

进一步的,上述方法中,确定分布式存储系统中每台服务器上所有负载压力超标的线程池,包括:

获取每台服务器上的每个线程池的队列中一个请求的等待时间与逗留时间的比值,所述逗留时间为每个线程池的队列中一个请求的等待时间与实际处理时间之和;

当所述等待时间与逗留时间的比值超过预设超标阈值时,确定该请求所在的服务器上的线程池的负载压力超标。

进一步的,上述方法中,所述预设超标阈值根据线程池的请求到达率的预设阈值确定,其中,所述线程池的请求到达率为请求到达线程池的队列的速率与该线程池的单位时间的服务能力的比值,当线程池的请求到达率超过线程池的请求到达率的预设阈值时,对应的等待时间与逗留时间的比值开始急剧上升,所述预设超标阈值超过所述开始急剧上升时等待时间与逗留时间的比值。

进一步的,上述方法中,对每个负载压力超标的线程池进行负载均衡,包括:

将经过每个负载压力超标的线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列;

判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,

若是,对该请求个数最多的分区进行分裂操作。

进一步的,上述方法中,对该请求个数最多的分区进行分裂操作,包括:

将该分区分成若干个子分区,将子分区分散到其它服务器上,其中,每个子分区对应该分区的键码范围内的一个子键码范围,每个子分区隶属的请求个数基本相等。

进一步的,上述方法中,判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半之后,还包括:

若否,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半;

对选择的分区进行迁移操作。

进一步的,上述方法中,将选择的分区进行迁移操作,包括:

将每个选择的分区迁移到没有负载压力超标的线程池的服务器上。

进一步的,上述方法中,将每个选择的分区迁移到没有负载压力超标的线程池的服务器上,包括:

查找符合条件的没有负载压力超标的线程池的服务器,若查找到,将该选择的分区迁移到该查找到的服务器上。

进一步的,上述方法中,所述符合条件的没有负载压力超标的线程池的服务器包括:

若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器。

进一步的,上述方法中,每个线程池的线程平均使用率通过如下公式(λ1+λ)*B/n获取,其中,

λ1表示在迁移前服务器上的某个线程池中的请求到达线程池的队列的速率;

λ表示待迁移到的目标服务器在迁移前其上的某个对应线程池中的请求到达线程池的队列的速率;

B表示待迁移到的目标服务器的某个对应线程池中的每个线程对一个请求的实际处理时间;

n表示待迁移到的目标服务器的某个对应线程池中的线程个数。

根据本申请的另一个方面,还提供一种分布式存储系统的负载均衡设备,该设备包括:

负载监控装置,用于确定分布式存储系统中每台服务器上所有负载压力超标的线程池;

报警或负载均衡装置,用于对每个负载压力超标的线程池进行报警或负载均衡。

进一步的,上述设备中,所述负载监控装置,用于获取每台服务器上的每个线程池的队列中一个请求的等待时间与逗留时间的比值,所述逗留时间为每个线程池的队列中一个请求的等待时间与实际处理时间之和;当所述等待时间与逗留时间的比值超过预设超标阈值时,确定该请求所在的服务器上的线程池的负载压力超标。

进一步的,上述设备中,所述预设超标阈值根据线程池的请求到达率的预设阈值确定,其中,所述线程池的请求到达率为请求到达线程池的队列的速率与该线程池的单位时间的服务能力的比值,当线程池的请求到达率超过线程池的请求到达率的预设阈值时,对应的等待时间与逗留时间的比值开始急剧上升,所述预设超标阈值超过所述开始急剧上升时等待时间与逗留时间的比值。

进一步的,上述设备中,所述报警或负载均衡装置,用于将经过每个负载压力超标的线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列;判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若 是,对该请求个数最多的分区进行分裂操作。

进一步的,上述设备中,所述报警或负载均衡装置,用于将该分区分成若干个子分区,将子分区分散到其它服务器上,其中,每个子分区对应该分区的键码范围内的一个子键码范围,每个子分区隶属的请求个数基本相等。

进一步的,上述设备中,所述报警或负载均衡装置,用于判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若否,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半;对选择的分区进行迁移操作。

进一步的,上述设备中,所述报警或负载均衡装置,用于将每个选择的分区迁移到没有负载压力超标的线程池的服务器上。

进一步的,上述设备中,所述报警或负载均衡装置,用于查找符合条件的没有负载压力超标的线程池的服务器,若查找到,将该选择的分区迁移到该查找到的服务器上。

进一步的,上述设备中,所述符合条件的没有负载压力超标的线程池的服务器包括:

若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器。

进一步的,上述设备中,每个线程池的线程平均使用率通过如下公式(λ1+λ)*B/n获取,其中,

λ1表示在迁移前服务器上的某个线程池中的请求到达线程池的队列的速率;

λ表示待迁移到的目标服务器在迁移前其上的某个对应线程池中的请求到达线程池的队列的速率;

B表示待迁移到的目标服务器的某个对应线程池中的每个线程对一个请求的实际处理时间;

n表示待迁移到的目标服务器的某个对应线程池中的线程个数。

与现有技术相比,本申请通过确定分布式存储系统中每台服务器上所有负载压力超标的线程池,对每个负载压力超标的线程池进行报警或负载均衡,能够根据服务器的线程池状态即单台服务器的负载超出服务能力,来进行报警或自动地在服务器之间均衡分配负载,不依赖于用户请求模式,能正确的处理不同用户同时达到的请求,也不依赖于服务器的服务能力,在分布式存储系统的集群内部服务器的服务能力不一致的情况下也能正确执行的报警或负载均衡,从而防止出现热点,提高分布式存储系统服务质量。

进一步的,本申请通过等待时间Wq与逗留时间W的比值和预设超标阈值th的比较,能够精确地得到每台服务器上所有负载压力超标的线程池。

进一步的,本申请根据线程池的请求到达率的预设阈值确定精确的预设超标阈值,从而能够更精确地得到每台服务器上所有负载压力超标的线程池。

进一步的,本申请将经过每个负载压力超标的线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列,当请求个数最多的分区的请求数量超过该线程池的所有分区的请求的总数的一半时,对该请求个数最多的分区进行分裂操作,可以精确找到需要进行分裂操作的分区,从而有效地实现负载均衡。

进一步的,本申请中当请求个数最多的分区的请求数量未超过该线程池的所有分区的请求的总数的一半时,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半,对选择的分区进行迁移操作,能够精确地找到一个线程池中需要迁移的分区,从而更好地实现负载均衡。

进一步的,本申请在查找符合条件的没有负载压力超标的线程池的服务器的前提下,才将选择的分区迁移到该查找到的服务器上,从而更好地实现负载均衡。

进一步的,本申请中若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器,能够精确地找到符合条件的没有负载压力超标的线程池的服务器,从而更好地实现负载均衡。

附图说明

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

图1示出根据本申请一个方面的一种分布式存储系统的负载监控方法的流程图;

图2示出本申请分布式存储系统的负载监控方法一优选的实施例的流程图;

图3示出根据本申请一个实施例的预设超标阈值确定原理图;

图4示出根据本申请分布式存储系统的负载监控方法另一优选的实施例的流程图;

图5示出根据本申请分布式存储系统的负载监控方法再一优选的实施例的流程图;

图6示出根据本申请分布式存储系统的负载监控方法一具体应用实施例的流程图;

图7示出根据本申请另一个方面的分布式存储系统的负载监控设备的结构图。

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

具体实施方式

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

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

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

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

如图1所示,本申请提供一种分布式存储系统的负载监控方法,该方法包括:

步骤S1,确定分布式存储系统中每台服务器上所有负载压力超标的线程池;

步骤S2,对每个负载压力超标的线程池进行报警或负载均衡。本实施例中根据服务器(Server)的线程池状态即单台服务器(Server)的负载超出服务能力,来进行报警或自动地在服务器之间均衡分配负载,不依赖于用 户请求模式,能正确的处理不同用户同时达到的请求,也不依赖于服务器的服务能力,在分布式存储系统的集群内部服务器的服务能力不一致的情况下也能正确执行的报警或负载均衡,从而防止出现热点,提高分布式存储系统服务质量。具体的,可根据服务器(Server)的线程池基本信息,确定分布式存储系统中每台服务器上所有负载压力超标的线程池,或对每个负载压力超标的线程池进行报警或负载均衡。单个服务器(Server)上一般拥有若干个线程池,典型的线程池可以用一个单队列模型来描述,线程池基本信息可体现为队列参数,具体的队列参数可包括如下内容:

a)Wq:表示某个线程池的队列中一个请求的等待时间。

b)B:表示某个线程池的队列中一个请求的实际处理时间。

c)W:表示某个线程池的队列中一个请求的逗留时间,即等待时间Wq加上实际处理时间B。

d)λ:表示某个线程池中的请求到达该线程池的队列的速率。

e)μ:表示某个线程池的单位时间的服务能力。

如图2所示,本申请的分布式存储系统的负载监控方法一优选的实施例中,步骤S1,确定分布式存储系统中每台服务器上所有负载压力超标的线程池,包括:

步骤S11,获取每台服务器上的每个线程池的队列中一个请求的等待时间Wq与逗留时间W的比值,所述逗留时间W为每个线程池的队列中一个请求的等待时间Wq与实际处理时间B之和;

步骤S12,当所述等待时间Wq与逗留时间W的比值超过预设超标阈值th时,确定该请求所在的服务器上的线程池的负载压力超标。对每台服务上的每个线程池参数进行分析,找出负载压力超标的线程池,关于如何判断超标负载的线程池,可以使用如下公式判断:

Wq/W>th

该公式的含义是当所述等待时间Wq与逗留时间W的比值超过预设超标阈值th时,确定该请求所在的服务器上的线程池的负载压力超标。本实施例通过等待时间Wq与逗留时间W的比值和预设超标阈值th的比较,能够精确地得到每台服务器上所有负载压力超标的线程池。

本申请的分布式存储系统的负载监控方法一优选的实施例中,步骤S12中所述预设超标阈值根据线程池的请求到达率的预设阈值确定,其中,所述线程池的请求到达率为请求到达线程池的队列的速率λ与该线程池的单位时间的服务能力μ的比值,当线程池的请求到达率λ/μ超过线程池的请求到达率的预设阈值时,对应的等待时间与逗留时间的比值Wq/W开始急剧上升,所述预设超标阈值超过所述开始急剧上升时等待时间与逗留时间的比值Wq/W。具体的,线程池的请求到达率的预设阈值可以通过图3来判断,图3中,每一条线表一个线程池,n分别表示对应的线程池中的线程个数,其中,第一个线程池中的线程有1个,第二个线程池中的线程有2个,第三个线程池中的线程有5个,第四个线程池中的线程有10个,第五个线程池中的线程有24个,图3中横坐标表示请求到达率λ/μ,纵坐标表示等待时间Wq与逗留时间W的比值Wq/W。从图3中,可以看出Wq/W在请求到达率λ/μ超过一定的数值(线程池的请求到达率的预设阈值)之后就开始急剧上升,Wq/W的这一开始急剧上升的点的值即为拐点,因此Wq/W的预设超标阈值只要超过拐点即可,例如,实际中可将拐点的值设定为0.5,则所述预设超标阈值只要大于0.5即可。本实施例根据线程池的请求到达率的预设阈值确定精确的预设超标阈值,从而能够更精确地得到每台服务器上所有负载压力超标的线程池。

如图4所示,本申请的分布式存储系统的负载监控方法一优选的实施例中,步骤S2中的对每个负载压力超标的线程池进行负载均衡,包括:

步骤S21,将经过每个负载压力超标的线程池的请求按照分区进行统计, 统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列;

步骤S22,判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若是,转到步骤S23,

步骤S23,对该请求个数最多的分区进行分裂操作。具体的,例如,某个负载压力超标的线程池中有三个分区分别为分区A、分区B和分区C,其中,隶属于分区A的请求数为100,隶属于分区B的请求数为20,隶属于分区C的请求数为10,则求个数最多的分区A的请求数量100超过了该线程池的所有分区的请求的总数的一半65=(100+20+10)/2。本实施例中,对于每个负载压力超标的线程池提取请求信息进行分析,因为线程池和分区(Partition)并不是一一对应的,分区(Partition)只是一个逻辑单元,隶属于该分区(Partition)的请求可能会使用多个线程池进行处理。将经过该线程池的请求按照分区(Partition)进行统计,统计出隶属于不同分区(Partition)的请求个数,然后按照请求个数降序排列。如果一个线程池中请求数目最多的某个分区(Partition)请求数目超过了该线程池的所有分区的请求的总数的一半,那么选择将该分区(Partition)并跳转到步骤S23,步骤S23中,因为隶属于该选择的分区(Partition)的请求数目占了该线程池的所有分区的请求的总数的一半或一半以上,因此,需要对该选择的分区(Partition)进行分裂,分裂之后处理结束。本实施例中通过找到超过该线程池的所有分区的请求的总数的一半的请求个数最多的分区,该分区可以认为是该线程池中的对负载压力超标有显著影响的分区,因此,需要将其选择出来,对其进行分裂,从而有效地实现负载均衡。

本申请的分布式存储系统的负载监控方法一优选的实施例中,步骤S23,对该请求个数最多的分区进行分裂操作,包括:

将该分区分成若干个子分区,将子分区分散到其它服务器上,其中,每个子分区对应该分区的键码范围内的一个子键码范围,每个子分区隶属的请 求个数基本相等。具体的,分裂点是从该分区(Partition)落在该线程池上的请求排序之后按照分区范围内的请求数平均选取,例如,某个分区范围的键码范围是0.1~0.4,其中,0.1~0.2范围的请求个数有200个,0.2~0.3范围的请求个数有200个,0.3~0.4范围的请求个数有200个,则可以将该分区分成三个子分区,对应的子键码范围分别为0.1~0.2、0.2~0.3和0.3~0.4,从而更好地实现负载均衡。

如图5所示,本申请的分布式存储系统的负载监控方法一优选的实施例中,步骤S22,判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半之后,还包括:

若否,则转到步骤S24,

步骤S24,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半;

步骤S25,对选择的分区进行迁移操作。在此,若请求个数最多的分区未超过该线程池的所有分区的请求的总数的一半,则将从该线程池中降序排列的第一个分区(Partition)开始依次往后选择分区(Partition)直到剩下的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半,并跳转到步骤S25,步骤S25中,因为,请求个数最多的分区未超过该线程池的所有分区的请求的总数的一半,所以该线程池的请求中没有具有显著影响的分区(Partition),因此将从第一分区开始依次选择出来的分区(Partition)进行逐个迁移。例如,某个负载压力超标的线程池中有五个分区分别为分区D、分区E、分区F、分区G和分区H,其中,隶属于分区D的请求数为100,隶属于分区E的请求数为100,隶属于分区F的请求数为100,隶属于分区G的请求数为100,隶属于分区H的请求数为100,则需要选择前三个分区D、E和F进行逐个迁移,从而剩下的分区G和H所隶属的请求的总数200=100+100小于该线程池的所有分区的请求的总数的一半250= (100+100+100+100+100)/2。本实施例能够精确地找到一个线程池中需要迁移的分区,从而更好地实现负载均衡。

本申请的分布式存储系统的负载监控方法一优选的实施例中,将选择的分区进行迁移操作,包括:

将每个选择的分区迁移到没有负载压力超标的线程池的服务器上,从而实现负载均衡。

本申请的分布式存储系统的负载监控方法一优选的实施例中,将每个选择的分区迁移到没有负载压力超标的线程池的服务器上,包括:

查找符合条件的没有负载压力超标的线程池的服务器,若查找到,将该选择的分区迁移到该查找到的服务器上。本实施例在查找符合条件的没有负载压力超标的线程池的服务器的前提下,才将选择的分区迁移到该查找到的服务器上,从而更好地实现负载均衡。

本申请的分布式存储系统的负载监控方法一优选的实施例中,所述符合条件的没有负载压力超标的线程池的服务器包括:

若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器。具体的,从待迁移集合即所有选择的分区中取一个分区(Partition),获取其在目前服务器上所有线程池上的请求数目,例如,服务器M上某个选择的分区使用两个线程池处理隶属于其的请求,分别为读请求线程池Q1和写请求线程池Q2,在没有超负载线程池的服务器集合中随机选择一个,例如选择了服务器N,然后计算该选择的分区(Partition)的读请求线程池Q1和写请求线程池Q2分别迁移到服务器N上对应的读请求线程池Q1+和写请求线程池Q2+之后,即将读请求线程池Q1迁移到读请求线程池Q1+,及将写请求线程池Q2迁移到写请求线程池Q2+之后,服务器N上读请求线程池Q1+和写请求线程池Q2+的线程平均使 用率均没有超过预设使用率阈值,预设使用率阈值可以是一经验值,即如果迁移之后所有的对应线程池的使用率都不超过预设使用率阈值,则判定允许迁移,否则选择另外一台没有负载压力超标的线程池的服务器重复本过程,直到所有的没有负载压力超标的线程池的服务器都已经检查完毕,没有找到符合条件的没有负载压力超标的线程池的服务器,即放弃迁移该分区(Partition)。本实施例能够精确地找到符合条件的没有负载压力超标的线程池的服务器,从而更好地实现负载均衡。

本申请的分布式存储系统的负载监控方法一优选的实施例中,每个线程池的线程平均使用率通过如下公式(λ1+λ)*B/n获取,其中,

λ1表示在迁移前服务器上的某个线程池中的请求到达该线程池的队列的速率;

λ表示待迁移到的目标服务器在迁移前其上的某个对应线程池中的请求到达该线程池的队列的速率;

B表示待迁移到的目标服务器的某个对应线程池中的每个线程对一个请求的实际处理时间;

n表示待迁移到的目标服务器的某个对应线程池中的线程个数。具体的,以上述迁移前的服务器M和待迁移到的目标服务器N为例,需要分别计算读请求线程池Q1+和写请求线程池Q2+的线程平均使用率是否均没有没有超过预设使用率阈值,其中,读请求线程池Q1+的线程平均使用率计算公式为(λQ1Q1+)*BQ1+/nQ1+,写请求线程池Q2+的线程平均使用率的计算公式为(λQ2Q2+)*BQ2+/nQ2+,本实施例可以精确地计算得到每个线程池的线程平均使用率,从而更好地实现负载均衡。

如图6所示,本申请一具体的应用实例中,分布式存储系统的负载监控方法包括如下步骤:

步骤S61,获取分布式存储系统中未处理的一个线程池,并判断是否获取到,若未获取到,则转到步骤S62,若获取到,则转到步骤S63,

步骤S62,结束;

步骤S63,获取该线程池的队列中一个请求的等待时间Wq与逗留时间W的比值,所述逗留时间W为该线程池的队列中一个请求的等待时间Wq与实际处理时间B之和;

步骤S64,判断所述等待时间Wq与逗留时间W的比值是否超过预设超标阈值th,若否,转到步骤S61,若是,转到步骤S65,

步骤S65,将经过该线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列,判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若是,转到步骤S66,若否,转到步骤S67,

步骤S66,对该请求个数最多的分区进行分裂操作;

步骤S67,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半;

步骤S68,判断所述选择的分区中是否有未处理的分区,若有,则转到步骤S69,若无,则转到步骤S61,

步骤S69,取下一个未处理的分区;

步骤S70,查找符合条件的没有负载压力超标的线程池的服务器,并判断是否查找到,若未查找到,则转到步骤S68,以从所述选择的分区中取下一个未处理的分区并进行后续处理,直到所有选择的分区(Partition)都处理完毕,若查找到,则转到步骤S71,

步骤S71,将该选择的分区迁移到该查找到的服务器上后,转到步骤S68。

如图7所示,根据本申请的另一面,还提供一种分布式存储系统的负载监控设备,该设备100包括:

负载监控装置1,用于确定分布式存储系统中每台服务器上所有负载压力超标的线程池;

报警或负载均衡装置2,用于对每个负载压力超标的线程池进行报警或负载均衡。本实施例中根据服务器(Server)的线程池状态即单台服务器(Server)的负载超出服务能力,来进行报警或自动地在服务器之间均衡分配负载,不依赖于用户请求模式,能正确的处理不同用户同时达到的请求,也不依赖于服务器的服务能力,在分布式存储系统的集群内部服务器的服务能力不一致的情况下也能正确执行的报警或负载均衡,从而防止出现热点,提高分布式存储系统服务质量。具体的,可根据服务器(Server)的线程池基本信息,确定分布式存储系统中每台服务器上所有负载压力超标的线程池,或对每个负载压力超标的线程池进行报警或负载均衡。单个服务器(Server)上一般拥有若干个线程池,典型的线程池可以用一个单队列模型来描述,线程池基本信息可体现为队列参数,具体的队列参数可包括如下内容:

a)Wq:表示某个线程池的队列中一个请求的等待时间。

b)B:表示某个线程池的队列中一个请求的实际处理时间。

c)W:表示某个线程池的队列中一个请求的逗留时间,即等待时间Wq加上实际处理时间B。

d)λ:表示某个线程池中的请求到达该线程池的队列的速率。

e)μ:表示某个线程池的单位时间的服务能力。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述负载监控装置1,用于获取每台服务器上的每个线程池的队列中一个请求的等待时间Wq与逗留时间W的比值,所述逗留时间W为每个线程池的队列中一个请求的等待时间Wq与实际处理时间B之和;当所述等待时间Wq与逗留时间W的比值超过预设超标阈值th时,确定该请求所在的服务器上的线程池的负 载压力超标。对每台服务上的每个线程池参数进行分析,找出负载压力超标的线程池,关于如何判断超标负载的线程池,可以使用如下公式判断:

Wq/W>th

该公式的含义是当所述等待时间Wq与逗留时间W的比值超过预设超标阈值th时,确定该请求所在的服务器上的线程池的负载压力超标。本实施例通过等待时间Wq与逗留时间W的比值和预设超标阈值th的比较,能够精确地得到每台服务器上所有负载压力超标的线程池。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述预设超标阈值根据线程池的请求到达率的预设阈值确定,其中,所述线程池的请求到达率为请求到达线程池的队列的速率与该线程池的单位时间的服务能力μ的比值,当线程池的请求到达率超过线程池的请求到达率λ/μ的预设阈值时,对应的等待时间与逗留时间的比值Wq/W开始急剧上升,所述预设超标阈值超过所述开始急剧上升时等待时间与逗留时间的比值Wq/W。每一条线表一个线程池,n分别表示对应的线程池中的线程个数,其中,第一个线程池中的线程有1个,第二个线程池中的线程有2个,第三个线程池中的线程有5个,第四个线程池中的线程有10个,第五个线程池中的线程有24个,图3中横坐标表示请求到达率λ/μ,纵坐标表示等待时间Wq与逗留时间W的比值Wq/W。从图3中,可以看出Wq/W在请求到达率λ/μ超过一定的数值(线程池的请求到达率的预设阈值)之后就开始急剧上升,Wq/W的这一开始急剧上升的点的值即为拐点,因此Wq/W的预设超标阈值只要超过拐点即可,例如,实际中可将拐点的值设定为0.5,则所述预设超标阈值只要大于0.5即可。本实施例根据线程池的请求到达率的预设阈值确定精确的预设超标阈值,从而能够更精确地得到每台服务器上所有负载压力超标的线程池。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述报警或 负载均衡装置2,用于将经过每个负载压力超标的线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列;判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若是,对该请求个数最多的分区进行分裂操作。具体的,例如,某个负载压力超标的线程池中有三个分区分别为分区A、分区B和分区C,其中,隶属于分区A的请求数为100,隶属于分区B的请求数为20,隶属于分区C的请求数为10,则求个数最多的分区A的请求数量100超过了该线程池的所有分区的请求的总数的一半65=(100+20+10)/2。本实施例中,对于每个负载压力超标的线程池提取请求信息进行分析,因为线程池和分区(Partition)并不是一一对应的,分区(Partition)只是一个逻辑单元,隶属于该分区(Partition)的请求可能会使用多个线程池进行处理。将经过该线程池的请求按照分区(Partition)进行统计,统计出隶属于不同分区(Partition)的请求个数,然后按照请求个数降序排列。如果一个线程池中请求数目最多的某个分区(Partition)请求数目超过了该线程池的所有分区的请求的总数的一半,那么选择将该分区(Partition)并跳转到步骤S23,步骤S23中,因为隶属于该选择的分区(Partition)的请求数目占了该线程池的所有分区的请求的总数的一半或一半以上,因此,需要对该选择的分区(Partition)进行分裂,分裂之后处理结束。本实施例中通过找到超过该线程池的所有分区的请求的总数的一半的请求个数最多的分区,该分区可以认为是该线程池中的对负载压力超标有显著影响的分区,因此,需要将其选择出来,对其进行分裂,从而有效地实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述报警或负载均衡装置2,用于将该分区分成若干个子分区,将子分区分散到其它服务器上,其中,每个子分区对应该分区的键码范围内的一个子键码范围,每个子分区隶属的请求个数基本相等。具体的,分裂点是从该分区(Partition)落在该线程池上的请求排序之后按照分区范围内的请求数平均选取,例如, 某个分区范围的键码范围是0.1~0.4,其中,0.1~0.2范围的请求个数有200个,0.2~0.3范围的请求个数有200个,0.3~0.4范围的请求个数有200个,则可以将该分区分成三个子分区,对应的子键码范围分别为0.1~0.2、0.2~0.3和0.3~0.4,从而更好地实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述报警或负载均衡装置2,用于判断请求个数最多的分区的请求数量是否超过该线程池的所有分区的请求的总数的一半,若否,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半;对选择的分区进行迁移操作。在此,若请求个数最多的分区未超过该线程池的所有分区的请求的总数的一半,则将从该线程池中降序排列的第一个分区(Partition)开始依次往后选择分区(Partition)直到剩下的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半,并对选择的分区进行迁移操作,因为,请求个数最多的分区未超过该线程池的所有分区的请求的总数的一半,所以该线程池的请求中没有具有显著影响的分区(Partition),因此将从第一分区开始依次选择出来的分区(Partition)进行逐个迁移。例如,某个负载压力超标的线程池中有五个分区分别为分区D、分区E、分区F、分区G和分区H,其中,隶属于分区D的请求数为100,隶属于分区E的请求数为100,隶属于分区F的请求数为100,隶属于分区G的请求数为100,隶属于分区H的请求数为100,则需要选择前三个分区D、E和F进行逐个迁移,从而剩下的分区G和H所隶属的请求的总数200=100+100小于该线程池的所有分区的请求的总数的一半250=(100+100+100+100+100)/2。本实施例能够精确地找到一个线程池中需要迁移的分区,从而更好地实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述报警或负载均衡装置2,用于将每个选择的分区迁移到没有负载压力超标的线程池的服务器上,从而实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述报警或负载均衡装置2,用于查找符合条件的没有负载压力超标的线程池的服务器,若查找到,将该选择的分区迁移到该查找到的服务器上。本实施例在查找符合条件的没有负载压力超标的线程池的服务器的前提下,才将选择的分区迁移到该查找到的服务器上,从而更好地实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,所述符合条件的没有负载压力超标的线程池的服务器包括:

若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器。具体的,从待迁移集合即所有选择的分区中取一个分区(Partition),获取其在目前服务器上所有线程池上的请求数目,例如,服务器M上某个选择的分区使用两个线程池处理隶属于其的请求,分别为读请求线程池Q1和写请求线程池Q2,在没有超负载线程池的服务器集合中随机选择一个,例如选择了服务器N,然后计算该选择的分区(Partition)的读请求线程池Q1和写请求线程池Q2分别迁移到服务器N上对应的读请求线程池Q1+和写请求线程池Q2+之后,即将读请求线程池Q1迁移到读请求线程池Q1+,及将写请求线程池Q2迁移到写请求线程池Q2+之后,服务器N上读请求线程池Q1+和写请求线程池Q2+的线程平均使用率均没有超过预设使用率阈值,预设使用率阈值可以是一经验值,即如果迁移之后所有的对应线程池的使用率都不超过预设使用率阈值,则判定允许迁移,否则选择另外一台没有负载压力超标的线程池的服务器重复本过程,直到所有的没有负载压力超标的线程池的服务器都已经检查完毕,没有找到符合条件的没有负载压力超标的线程池的服务器,即放弃迁移该分区(Partition)。本实施例能够精确地找到符合条件的没有负载压力超标的线程池的服务器,从而更好地实现负载均衡。

本申请分布式存储系统的负载监控设备一优选的实施例中,每个线程池的线程平均使用率通过如下公式(λ1+λ)*B/n获取,其中,

λ1表示在迁移前服务器上的某个线程池中的请求到达线程池的队列的速率;

λ表示待迁移到的目标服务器在迁移前其上的某个对应线程池中的请求到达线程池的队列的速率;

B表示待迁移到的目标服务器的某个对应线程池中的每个线程对一个请求的实际处理时间;

n表示待迁移到的目标服务器的某个对应线程池中的线程个数。具体的,以上述迁移前的服务器M和待迁移到的目标服务器N为例,需要分别计算读请求线程池Q1+和写请求线程池Q2+的线程平均使用率是否均没有没有超过预设使用率阈值,其中,读请求线程池Q1+的线程平均使用率计算公式为(λQ1Q1+)*BQ1+/nQ1+,写请求线程池Q2+的线程平均使用率的计算公式为(λQ2Q2+)*BQ2+/nQ2+,本实施例可以精确地计算得到每个线程池的线程平均使用率,从而更好地实现负载均衡。

综上所述,本申请通过确定分布式存储系统中每台服务器上所有负载压力超标的线程池,对每个负载压力超标的线程池进行报警或负载均衡,能够根据服务器的线程池状态即单台服务器的负载超出服务能力,来进行报警或自动地在服务器之间均衡分配负载,不依赖于用户请求模式,能正确的处理不同用户同时达到的请求,也不依赖于服务器的服务能力,在分布式存储系统的集群内部服务器的服务能力不一致的情况下也能正确执行的报警或负载均衡,从而防止出现热点,提高分布式存储系统服务质量。

进一步的,本申请通过等待时间Wq与逗留时间W的比值和预设超标阈值th的比较,能够精确地得到每台服务器上所有负载压力超标的线程池。

进一步的,本申请根据线程池的请求到达率的预设阈值确定精确的预 设超标阈值,从而能够更精确地得到每台服务器上所有负载压力超标的线程池。

进一步的,本申请将经过每个负载压力超标的线程池的请求按照分区进行统计,统计出该线程池中隶属于不同分区的请求的个数,并将分区按请求的个数降序排列,当请求个数最多的分区的请求数量超过该线程池的所有分区的请求的总数的一半时,对该请求个数最多的分区进行分裂操作,可以精确找到需要进行分裂操作的分区,从而有效地实现负载均衡。

进一步的,本申请中当请求个数最多的分区的请求数量未超过该线程池的所有分区的请求的总数的一半时,在所述降序排列的分区中从第一分区开始依次选择一个或多个分区,直至未选择的剩余的分区所隶属的请求的总数小于该线程池的所有分区的请求的总数的一半,对选择的分区进行迁移操作,能够精确地找到一个线程池中需要迁移的分区,从而更好地实现负载均衡。

进一步的,本申请在查找符合条件的没有负载压力超标的线程池的服务器的前提下,才将选择的分区迁移到该查找到的服务器上,从而更好地实现负载均衡。

进一步的,本申请中若将某个选择的分区迁移到某个没有负载压力超标的线程池的服务器的对应线程池上后,当该迁移到的目标服务器的每个对应线程池的线程平均使用率均没有超过预设使用率阈值,则该服务器为符合条件的没有负载压力超标的线程池的服务器,能够精确地找到符合条件的没有负载压力超标的线程池的服务器,从而更好地实现负载均衡。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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

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

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

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