一种基于MongoDB负载均衡优化系统及方法与流程

文档序号:14216562阅读:182来源:国知局

本发明属于数据库的数据处理性能优化领域,尤其是负载均衡改进方法,提升数据库的高并发读写能力。



背景技术:

由于大数据时代的到来,云存储技术的快速发展,人们的日常生活以及各种科学实验产生了海量数据。对于如何有效和快速地存储和提取这些海量数据,传统的关系型数据库,暴露了很多难以解决的问题。尤其在面对高并发量的读写请求,海量数据的快速访问、高效存储方面和数据库高扩展性等方面,需求难以得到满足。

因此,非关系型数据库nosql应运而生。nosql数据库以支持海量数据、高可用性、高扩展性而闻名,解决了关心型数据库所面临的问题。其中mongodb作为文档型数据库的代表,因其高性能、易部署、易使用、存储效率高等优点,获得很多大中型企业和网站的使用。

mongodb为了存储海量数据,依据其自动分片机制来实现数据库的水平扩展(是指加入更多的服务器来加大存储空间,提升运算性能),而且水平扩展的过程是系统自动实现,无需人工添加。另外数据存储在每个分片中(将数据划分为一定大小的数据块,然后放入各个服务器中),当各个服务器中的数据块个数不均衡时,依靠系统自带的负载均衡算法来实现,自动实现数据再分配。

目前mongodb中负载均衡算法依靠的是balancer模块来实现。它是一个后台运行服务,统计各服务器中数据块的个数。当任意两个服务器的数据块个数的差值达到阈值时,balancer模块就会将数据块从数据块数多的服务器转移到数据块数少的服务器中,直到两者数量之差小于阈值。

但是通过仔细研究发现,这个分片机制并没有那么智能。分片机制只是根据各个服务器上数据块数量上的差异进行,只能满足个服务器数据数量上的平衡,但没有考虑服务器的负载情况。在面对大量高并发请求时,有可能导致各服务器的访问情况千差万别。进一步来说,一部分服务器满负荷,一部分服务器却无人问津。同样balancer模块只统计了各服务器上数据块个数,没有将数据块的使用情况统计出来,即数据块的操作热度数。总之,不能达到服务器资源利用率的最大化。



技术实现要素:

本发明的目的在于解决mongodb现有的自动分片机制造成各服务器负载不均衡的问题。将服务器实时负载和数据块的操作热度数综合考虑,来实现mongodb动态负载均衡,使mongodb性能得到优化。

本发明的技术方案如下:

一种基于mongodb负载均衡优化系统,包括mongodb分布式存储系统,所述mongodb分布式存储系统的数据存储在每个分片中,将数据划分为一定大小的数据块,然后放入各个服务器中,当各个服务器中的数据块个数不均衡时,通过balancer模块来实现负载均衡,其在所述mongodb系统框架上增加一个负载监听器模块,负责周期性动态监听各个服务器的cpu利用率ncpu、内存memory利用率nmemory、带宽bandwidth利用率nbandwidth,并分别设置cpu利用率权值k1、内存memory利用率权值k2、带宽bandwidth利用率权值k3,服务器根据实时判断是否超载和数据块的操作热度数综合考虑调节,实现mongodb动态负载均衡。

进一步的,所述cpu利用率权值k1和内存利用率权值k2均比带宽利用率权值k3要大。

进一步的,所述cpu利用率权值k1、内存memory利用率权值k2、带宽bandwidth利用率权值k3还满足k1+k2+k3=1。

进一步的,服务器负载超载的判断步骤包括:

设系统有x个服务器,当前第r个服务器的负载为:

load(r)=k1×ncpu+k2×nmemory+k3×nbandwidth

则系统的总负载

系统服务器的平均负载

设当前服务器中最大负载为maxload,并设为服务器a,当前服务器中最小负载为minload,设为服务器b;

若(maxload-avg)/avg≥λ,则当前最大负载服务器maxload超载;上式中λ为系统负载阈值,为常数。

进一步的,所述据块的操作热度数的获取具体包括:在mongodb原有的balancer模块中加入对数据块操作类型以及次数的统计,获取其数据块的操作热度数h,对数据块的操作分为读操作read、写操作write、更新操作update及删除操作delete,并分别对其四种操作设赋予o1、o2、o3、o4权值,并满足o1+o2+o3+o4=1;

进一步的,所述read操作分配的权值o1要小些,因为有一些数据可以在物理缓存中找到,而且也可以从副节点读取;delete操作权重o4设置最低;

write操作和update操作两者设置的权重都要比read和delete要高,write权重o2设置最高,update权重o3设置次之。

进一步的,所述服务器根据实时判断是否超载和数据块的操作热度数综合考虑调节,实现mongodb动态负载均衡具体包括步骤:

统计各服务器中数据块个数,若存在两个服务器上数据块个数之差大于或等于系统设定的数量阈值,则启动负载均衡算法,步骤如下:

设数据块个数较多的服务器为a,为数据转移的源服务器,数据块个数较小的服务器为b,为数据转移的目标服务器,计算a、b两个服务器的平均数据块操作热度数,分别设为h(a-avg)、h(b-avg),并比较两者大小;

如果h(a-avg)>h(b-avg),则将服务器a中操作热度数最大的数据块转移到服务器b中;如果h(a-avg)<h(b-avg),则将服务器a中操作热度数最小的数据块转移到服务器b中;反复重复上述步骤,直到a、b两服务器数据块个数之差小于阈值;若不存在服务器之间数据差值大于或等于数量阈值,则计算各服务器的负载;若同时也不存在当前maxload的服务器过载,则无需数据迁移,维持原状;若存在maxload的服务器过载,将其设为服务器a,则从剩下的服务器中找出负载最小即minload的服务器,设为服务器b,因为此时a与b之间数据块差值小于阈值,无法满足触发负载均衡算法的条件,所以分别统计服务器a、b的数据块个数,将a中数据块操作热度数排名前几的数据块从中间的片键分开,这样一个数据快就变成了两个数据块,再次判定maxload服务器是否超载,如果没有,则结束,如果有则再次进行上一步的操作。

一种基于所述系统的基于mongodb负载均衡优化方法,其包括以下步骤:在mongodb系统框架上增加一个负载监听器模块,负责周期性动态监听各个服务器的cpu利用率ncpu、内存memory利用率nmemory、带宽bandwidth利用率nbandwidth,并分别设置cpu利用率权值k1、内存memory利用率权值k2、带宽bandwidth利用率权值k3,服务器根据实时判断是否超载和数据块的操作热度数综合考虑调节,实现mongodb动态负载均衡。

本发明的优点及有益效果如下:

本发明创造与现有的技术相比较,计入新的负载参考指标,将服务器实时负载和数据块的操作热度数综合考虑,将服务器资源利用率的最大化,实现了mongodb动态负载均衡。

一方面本发明详细探测定位了那些热点数据块。在满足一定条件下,通过转移热点数据块,在一定程度上能够均衡每个服务器的操作热度数,促使服务器的资源利用率最大化。

另一方面本发明还加入了服务器实时负载参考指标,能够实时监测每个服务器的运行情况,对其有异常的做出相应处理,使其系统达到真正的动态平衡。

附图说明

图1是本发明提供优选实施例基于mongodb负载均衡优化方法流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、详细地描述。所描述的实施例仅仅是本发明的一部分实施例。

本发明解决上述技术问题的技术方案是:

本发明在原有的mongodb系统框架上增加一个负载监听器模块,负责周期性动态监听各个服务器的cpu利用率ncpu、内存memory利用率nmemory、带宽bandwidth利用率nbandwidth(为了避免因获取太多指标,影响系统性能,只考虑这3者)。并分别对其设置权值。

经过多次实验发现,cpu利用率和内存(momery)利用率对服务器的性能影响较大,所以对其设置权重应该比带宽要大。设其权值分别为k1,k2,k3(分别对应cpu利用率、内存memory利用率、带宽bandwidth利用率),且满足k1+k2+k3=1。在实际的集群使用中,管理员应根据实际情况做出合理设置。

设系统有x个服务器,当前第r个服务器的负载为:

load(r)=k1×ncpu+k2×nmemory+k3×nbandwidth

则系统的总负载

系统服务器的平均负载

设当前服务器中最大负载为maxload,并设为服务器a.当前服务器中最小负载为minload,设为服务器b。

若(maxload-avg)/avg≥λ,则当前最大负载服务器maxload超载。

上式中λ为系统负载阈值,为常数。系统负载阈值应根据多次实验系统平均负载和最大负载而得。

在本发明中,在mongodb原有的balancer模块中加入对数据块操作类型以及次数的统计,获取其数据块的操作热度数h。对数据块的操作分为读操作read,写操作write,更新操作update,删除操作delete。并分别对其四种操作设赋予o1、o2、o3、o4权值,并满足o1+o2+o3+o4=1。

权值要求:

read操作分配的权值o1要小些,因为有一些数据可以在物理缓存中找到,而且也可以从副节点读取,在一定程度上减小了负载。

delete操作会导致今后被删除的数据不存在数据的输出过程,在一定程度上也减小了负载,而且比read操作过程少了一步数据输出的过程,因此delete权重o4设置最低。

write操作和update操作首先是从主节点开始,而且要同步到副节点,所以它们两者设置的权重都要比read和delete要高。最重要的是write操作会增加数据量,进一步增加了被write、update、delete的可能性,同时也有可能导致各节点数据量不一样,有可能触发负载均衡操作,更加加重节点负载,所以write权重o2设置最高,update权重o3设置次之。

综上,o1、o2、o3、o4设置要满足以上原则。

设当前服务器r有n个数据块,第i个数据块的总操作热度数为h(i),read、write、update、delete四种操作数分别h(ri)、h(wi)、h(ui)、h(di)。

则h(i)=h(ri)+h(wi)+h(ui)+h(di)。

将上述权值参数带入上式得

第i个数据块的总操作热度数为h(i)

h(i)=o1×h(ri)+o2×h(wi)+o3×h(ui)+o3×h(di)

当前服务器r总操作热度数

当前服务器r平均操作热度数

具体步骤如下:

统计各服务器中数据块个数

若存在两个服务器上数据块个数之差大于或等于系统设定的数量阈值8,则启动负载均衡算法,进一步操作如下:

设数据块个数较多的服务器为a,为数据转移的源服务器。数据块个数较小的服务器为b,为数据转移的目标服务器。计算a、b两个服务器的平均数据块操作热度数,分别设为h(a-avg)、h(b-avg),并比较两者大小。

如果h(a-avg)>h(b-avg),则将服务器a中操作热度数最大的数据块转移到服务器b中;如果h(a-avg)<h(b-avg),则将服务器a中操作热度数最小的数据块转移到服务器b中;

反复重复上述步骤,直到a、b两服务器数据块个数之差小于阈值。

若不存在服务器之间数据差值大于或等于数量阈值,则计算各服务器的负载。

若同时也不存在当前maxload的服务器过载,则无需数据迁移,维持原状。

若存在maxload的服务器过载,将其设为服务器a。则从剩下的服务器中找出负载最小(即minload)的服务器,设为服务器b。

因为此时a与b之间数据块差值小于阈值,无法满足触发负载均衡算法的条件,所以我们分别统计服务器a、b的数据块个数,将a中数据块操作热度数排名前几的数据块从中间的片键分开,这样一个数据快就变成了两个数据块(具体是前几个要依据服务器a与b的数据块个数差值)。例如a中数据块个数为56,b中数据块个数为52,两者数据块个数之差为4,无法达到系统限定的8,所以我们将a中排名为前4的数据块从中间片键分裂开来,这样4个数据块变成了8个数据块。此时a中数据块个数为60,刚好与b中数据块个数差值达到数量阈值8,满足触发数据迁移的条件。

因为服务器a为maxload,b为minload,故h(a-avg)>h(b-avg)。应该将刚分裂的那几个操作热度数排名前几的数据块从a转移到b中,移动顺序为数据块操作热度数从大到小,直到a、b两服务器数据块个数之差小于阈值。如流程图所示,系统这一步结束之后,会再次判定maxload服务器是否超载,如果没有,则结束,如果有则再次进行上一步的操作。

以上操作若分裂了数据块或转移了数据块应当到系统配置服务器中修改数据块相对应的服务器信息。

本发明创造与现有技术相比,加入新的负载参考指标,将服务器实时负载和数据块的操作热度数综合考虑,将服务器资源利用率的最大化,实现了mongodb动态负载均衡。

以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。

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