负载均衡方法及装置的制造方法

文档序号:10578188阅读:407来源:国知局
负载均衡方法及装置的制造方法
【专利摘要】本发明实施例提供一种负载均衡的方法及装置。领导节点获取处理节点的负载能力信息;所述领导节点根据所述负载能力信息均衡分配待处理任务。实现了各处理节点的负载均衡以及高可用性。
【专利说明】
负载均衡方法及装置
技术领域
[0001]本发明实施例涉及计算机技术领域,尤其涉及一种负载均衡方法及装置。
【背景技术】
[0002]Canal是一个开源的实时数据同步的工具,基于数据库增量日志解析,提供增量数据订阅以及数据消费,目前主要支持了mysql (关系型数据库管理系统hmysql的主备复制实现原理,从上层来看,分成三步:首先,mas ter (主)将改变记录到二进制日志(binarylog)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlogevent s进行查看);其次,slave(备)将mas ter的binary log events拷贝到它的中继日志(relay log);最后,slave(备)重做中继日志中的事件,将改变反映它自己的数据。
[0003]Canal在工作实现时,模拟mysql的slave的交互协议,伪装自SSmysql slave,向mysql master发送dump协议;mysql master收到dumpi青求,开始推送binary log给slave(也就是Canal);Canal解析binary log对象。
[0004]Cana I的server模式,提供了高可用的方式,可以启动多个节点,一个节点因为机器宕机/进程挂掉等原因失败后,其上的所有的mysql库的同步任务会自动转移到另一个节点上。
[0005]然而,发明人在实现本发明的过程中发现,Canal提供的高可用机制,任务分配是抢占式的,可能会将所有的mysql库的任务都分配到同一个节点上执行,其他节点都是空闲的,会造成某个节点压力过大、其他节点资源的空闲浪费。
[0006]因此,一种负载均衡的方法亟待提出。

【发明内容】

[0007]本发明实施例提供一种负载均衡方法及装置,用以解决现有技术中用户抢占式的任务分配造成的各处理节点负载失衡的缺陷,实现了各处理节点的负载均衡以及高可用性。
[0008]本发明实施例提供一种负载均衡方法,包括:
[0009]领导节点获取处理节点的负载能力信息;
[0010]所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0011]本发明实施例提供一种负载均衡装置,包括:
[0012]信息获取模块,用于领导节点获取处理节点的负载能力信息;
[0013]任务分配模块,用于所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0014]本发明实施例提供的负载均衡方法及装置,通过根据获取到的处理节点的负载能力信息均衡分配待处理任务,改变了现有技术中进行任务处理时,抢占式的任务分配造成的各处理节点负载失衡的缺陷,实现了所有处理节点的负载均衡以及高可用性,避免单节点压力大、其他节点资源浪费,提高系统的整体性能和稳定。
【附图说明】
[0015]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0016]图1为本申请实施例一的技术流程图;
[0017]图1-1为本申请实施例一的不例图;
[0018]图1-2为本申请实施例一的另一示例图;
[0019]图2为本申请实施例二的技术流程图;
[0020]图3为本申请实施例三的技术流程图;
[0021]图4为本申请实施例四的装置结构示意图。
【具体实施方式】
[0022]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0023]本申请实施例适用于包含多个处理节点的集群系统。
[0024]图1是本申请实施例一的技术流程图,结合图1,本申请实施例一种负载均衡的方法,主要包括如下的步骤:
[0025]步骤S110、领导节点获取处理节点的负载能力信息;
[0026]具体的,在步骤SllO中,所述领导节点(leader)是从数据处理系统中,根据预设规则从启动状态下的处理节点中选出来的,其功能在于,获取所述数据处理系统中其他处理节点的负载能力信息并进行数据处理任务的分配。此处所述的处理节点均指启动状态下、能够进行任务处理的节点,后续不再赘述。具体的,所述负载能力信息包括处于启动状态下的所述处理节点的数量、每一所述处理节点当前正在处理的连接数量、每一所述处理节点的最快响应时间、每一所述处理节点的历史处理性能等能够表征所述处理节点处理能力的?目息O
[0027]步骤S120、所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0028]具体的,在步骤S120中,所述领导节点均衡分配所述待处理任务,根据已启动的所述处理节点的所述负载能力信息,采用预设算法对所述待处理任务进行均衡分配;其中,所述预设算法包括:一致性哈希算法、随机算法、轮循算法、加权轮循算法、动态轮循算法、最快算法、最少连接算法、预判算法中的任意组合。
[0029]其中,所述随机算法具体为,随机地把负载分配到各个可用的处理节点上,通过随机数生成算法选取一个处理节点用于任务处理。
[0030]其中,所述轮循算法为,按顺序把每个新的连接请求分配给下一个处理节点,最终把所有请求平分给所有的处理节点。
[0031]所述加权轮循算法中,每个机器接受的连接数量是按权重比例分配的。这是对上述轮循算法的改进,例如,当一处理节点的处理能力是另一处理节点的两倍,那么所述领导节点会把两倍的连接数量分配给所述另一处理节点。
[0032]所述动态轮询,类似于上述加权轮循,其不同之处在于,动态轮循的权重值基于对各个处理节点的持续监控获取的,并且是不断更新的。这是一个动态负载均衡算法,基于处理节点的实时性能分析分配连接,比如每个节点的当前连接数或者节点的最快响应时间等。
[0033]所述最快算法基于所有处理节点中的最快响应时间分配连接,尤其适用于处理节点跨不同网络的环境中。
[0034]所述最少连接算法是将新的任务处理连接分配给当前连接数目最少的处理节点。
[0035]除上述算法之外,本申请实施例中,所述预设算法还可以是上述多种算法的结合使用,例如,观察算法,同时利用最小连接算法和最快算法来实施负载均衡。处理节点根据当前的连接数和最快响应时间得到一个分数,分数较高代表性能较好,会得到更多的连接。
[0036]本申请实施例的所述预设算法还可以包括所述预判算法,所述预判算法使用上述观察算法来计算分数,分析分数的变化趋势来判断某一处理节点的性能正在改善还是降低。具有改善趋势的处理节点会得到更多的连接。
[0037]本申请实施例的技术方案中,在选择负载均衡算法时,优先选择所述一致性哈希算法。
[0038]所述一致性哈希算法(consistent hashing)是对简单哈希算法的纠正算法,其实现过程如下:
[0039]步骤S121、将处理节点所在系统的整体计算能力抽象为一个环,对每一所述处理节点进行第一次哈希值计算,并按照得到的哈希值将每一所述处理节点映射至所述环上。
[0040 ] 如图1 -1中的1、2、3三个节点就可以理解为三个可以执行任务处理的处理节点;
[0041]步骤SI22、对所述待处理任务进行第二次所述哈希值计算,并根据得到的哈希值,按顺时针方向将所述待处理任务映射至所述环上与其哈希值最接近的节点上去。
[0042]例如,本申请实施例中,某一待处理任务的哈希值计算结果与所述环上处理节点3的哈希值最接近,则将这一待处理任务映射至处理节点3上,由处理节点3执行这一待处理任务。
[0043]当处理节点数量较少时,节点在环上分布不够均匀,会导致待处理任务在分配时不能充分考虑每一处理节点的负载能力。本申请实施例为进一步优化负载均衡,引入为处理节点设置对应的虚拟节点,而每个处理节点可以对应若干个虚拟节点。
[0044]如图1-1的图中所示,处理节点1、2、3、4分布不均匀。假定四个处理节点型号相同,假设处理节点4的当前负载量最小,处理节点当前3负载量最大。为了负载均衡,可以为处理节点4引入虚拟节点4” ’,如图1-2所示。按照步骤S122中的方法,将待处理任务分配至五个处理节点上,虚拟节点4”’分配到的待处理任务实际上分配在了物理处理节点4上。如此,在一定程度上实现了原本四个物理处理节点的负载均衡。
[0045]本实施中,通过根据获取到的处理节点的负载能力信息均衡分配待处理任务,改变了现有技术中进行任务处理时,抢占式的任务分配造成的各处理节点负载失衡的缺陷,实现了所有处理节点的负载均衡以及高可用性,避免单节点压力大、其他节点资源浪费,提高系统的整体性能和稳定。
[0046]图2是本申请实施例二的技术六层图,结合图2,本申请实施例一种负载均衡的方法,还可以有如下的实施方式:
[0047]步骤S210、在至少两个所述处理节点中,采用预设规则选取领导节点;
[0048]具体的,本申请实施例中,所述领导节点的选取可以通过ZooKeeper进行选取。
[0049]ZooKeeper运行在集群系统上,是一个分布式的应用程序协调服务,以Fast Paxos算法为基础,实现同步服务,配置维护和命名服务等分布式应用。
[°°50] 以Canal工具为例,进行所述领导节点选取时,首先在ZooKeeper目录/Canal/nodes 下创建 SEQUENCE、EPHEMERAL 类型的子目录/Canal/nodes/n_,SEQUENCE 类型会使ZooKeeper自动在子目录名字后面加上编号后缀,该编号大于此前已经存在的所有编号(例如,创建的子目录为/Canal/nodes/nJWOOOOOOOShEPHEMERAL类型会使集群中的节点在与ZooKeeper断开连接后,自己所创建的子目录自动被删除。节点读取ZooKeeper的/Canal/nodes/这个目录下的所有子目录,如果发现自己所创建的编号是最小的,自己就是领导。如果自己不是最小的,就在比自己小的最大的子目录上设置watcher监听,如果收到watcher通知,说明监听的那个目录的客户端已经死了,自己重新读取所有子目录,重新判断自己是否成为了领导。
[0051]需要说明的是,本申请实施例中,所述领导节点并非是固定的,若当前的所述领导节点出现异常,例如宕机或者进程异常,则剩余的处理节点会按照所述预设规则重新选举出一个新的领导节点,从而保证了系统的后续负载均衡。
[0052]步骤S220、所述领导节点获取处理节点的负载能力信息;
[0053]步骤S230、所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0054]步骤S220?步骤S230同实施例一中所述,此处不再赘述。
[0055]步骤S240、所述领导节点将所述均衡分配的结果保存至预设目录;
[0056]所述预设目录中保存有所述待处理任务的分配结果,S卩,每一所述处理节点与目标待处理任务的对应关系。例如,在Canal进行数据同步时,通过对增量日志的解析获取待同步的数据为M,所述领导节点将M分配至4个处理节点,假设,将Ml分配给第一处理节点进行处理,将M2分配给第二处理节点进行处理、将M3分配给第三处理节点进行处理、将M4分配给第四处理节点进行处理,则在所述预设目录中将保存有Ml?M4与上述四个节点的对应关系。例如,在ZooKeeper中,所述预设目录可以为/Canal/node2instances。
[0057]步骤S250、所述处理节点监听所述预设目录,获取需执行的目标待处理任务。
[0058]本申请实施例中,所述预设目录中保存有每一所述处理节点被分配的目标处理任务,所述处理节点通过监听所述预设目录(例如,监听如下ZooKeeper目录:/ Canal/noddinstances)就能够获取任务分配结果,在获取目标处理任务后,启动工作线程执行任务处理。
[0059]根据步骤S220?步骤S230的执行结果,所述预设目录中的任务分配结果充考虑了系统中每一处理节点的负载能力,避免了单个处理节点压力大、其他处理节点资源浪费的状况。
[0060]优选的,在步骤250之前,本申请实施例进一步还包括步骤S260。
[0061 ] 步骤S260、为每一所述目标待处理任务锁定相应的所述处理节点,从而避免多个处理节点重复执行同一所述目标待处理任务。
[0062]当系统中包含有多个处理节点时,对于同一待处理任务,可能会出现多个处理节点执行同一待处理任务的情景,这样会导致重复处理,浪费节点资源。因此,采用任务锁,将一个目标待处理任务锁定一个处理节点进程处理,可以很好地避免上述缺陷。
[0063]具体的,每一处理节点的所述工作线程在执行目标任务处理前,可以通过如下ZooKeeper目录:/ Canal/locks/$ {instanceName}获取任务锁,避免多节点重复处理。
[0064]本实施例中,每一处理节点通过监听领导节点对待处理任务的分配结果获取被分配执行的目标待处理任务,无需人工干预就能够实现多个处理节点的负载均衡,保证了系统的高可用以及高效率;与此同时,任务锁机制良好地避免了多点重复处理的可能性,进一步提升了系统的处理能力。
[0065]图3是本申请实施例三的技术流程图,结合图3,本申请实施例还包括如下可行的实施方式:
[0066]步骤S310、在至少两个所述处理节点中,采用预设规则选取领导节点;
[0067]步骤S320、所述领导节点获取处理节点的负载能力信息;
[0068]步骤S330、所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0069]步骤S340、所述领导节点将所述均衡分配的结果保存至预设目录;
[0070]步骤S350、所述处理节点监听所述预设目录,获取需执行的目标待处理任务;
[0071]步骤S360、所述领导节点在监听到所述处理节点的变化时,根据变化后的所述处理节点重新均衡分配所述待处理任务以更新所述预设目录。
[0072]本步骤中,所述领导节点对处理节点的实时监听可以通过ZooKeeper实现。ZooKeeper支持watch (观察)的概念,可以系统在每个处理结点上设置一个观察。如果被观察系统的处理结点有变更(连接断开),那么watch就会被触发,watch所属的领导节点将接收到一个通知包被告知某一结点已经发生变化。
[0073]当系统的处理节点发生变化后(可能因为宕机或者进程挂掉),部分原属于发生变化的节点的处理任务将无法继续执行,领导节点监听到这一异常,会根据步骤S320?步骤S330根据剩余的处理节点重新进行待处理任务的均衡分配。
[0074]在另一种可能的情境下,系统中新增若干处理节点,为了不空闲这些新增处理节点的处理资源并提高系统效率,所述领导节也会根据步骤S320?步骤S330根据剩余的处理节点重新进行待处理任务的均衡分配以实现更好的负载均衡。
[0075]本实施例中,通过领导节点对处理节点进行实时监听,并在系统添加新的处理节点、处理节点宕机或进程异常退出等原因挂掉后,重新分配待处理任务,无需人工干预,自动达到新的负载均衡,进一步提高了系统的可用性,保障了高效的数据处理。
[0076]图4是本申请实施例一种负载均衡装置的装置结构示意图,结合图4,所述装置包括:信息获取模块41、任务分配模块42、任务锁模块43、更新模块44、领导节点选取模块45。
[0077]所述信息获取模块41,用于领导节点获取处理节点的负载能力信息;
[0078]所述任务分配模块42,用于所述领导节点根据所述负载能力信息均衡分配待处理任务。
[0079]进一步地,所述任务分配模块42还用于:将所述均衡分配的结果存放至预设目录;其中,所述预设目录被所述处理节点监听以获取并执行所述均衡分配的结果中的目标待处理任务。
[0080]进一步地,所述装置还包括任务锁模块43,所述任务锁模块43用于,在所述获取并执行所述均衡分配的结果中的目标待处理任务之前,为每一所述目标待处理任务锁定相应的所述处理节点,从而避免多个处理节点重复执行同一所述目标待处理任务。
[0081]进一步地,所述装置还包括更新模块44,所述更新模块44用于:所述领导节点在监听到所述处理节点的变化时,根据变化后的所述处理节点重新均衡分配所述待处理任务以更新所述预设目录。
[0082]进一步地,所述任务分配模块42用于:所述领导节点根据已启动的所述处理节点的所述负载能力信息,采用预设算法对所述待处理任务进行均衡分配;其中,所述预设算法包括:一致性哈希算法、随机算法、轮循算法、加权轮循算法、动态轮循算法、最快算法、最少连接算法、预判算法中的任意组合。
[0083]进一步地,所述装置还包括领导节点选取模块45,所述领导节点选取模35块用于:在至少两个所述处理节点中,采用预设规则选取所述领导节点。
[0084]进一步地,所述领导节点选取模块45还用于:当所述领导节点异常时,采用所述预设规则选择新的所述领导节点。
[0085]本实施中,所述任务分配模块通过根据所述信息获取模块获取到的处理节点的负载能力信息均衡分配待处理任务,改变了现有技术中进行任务处理时,抢占式的任务分配造成的各处理节点负载失衡的缺陷,实现了所有处理节点的负载均衡以及高可用性,避免单节点压力大、其他节点资源浪费,提高系统的整体性能和稳定。
[0086]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0087]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机装置(可以是个人计算机,服务器,或者网络装置等)执行各个实施例或者实施例的某些部分所述的方法。
[0088]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
【主权项】
1.一种负载均衡的方法,其特征在于,包括: 领导节点获取处理节点的负载能力信息; 所述领导节点根据所述负载能力信息均衡分配待处理任务。2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 将所述均衡分配的结果存放至预设目录;其中,所述预设目录被所述处理节点监听以获取并执行所述均衡分配的结果中的目标待处理任务。3.根据权利要求2所述的方法,其特征在于,在所述获取并执行所述均衡分配的结果中的目标待处理任务之前,所述方法还包括: 为每一所述目标待处理任务锁定相应的所述处理节点,从而避免多个处理节点重复执行同一所述目标待处理任务。4.根据权利要求2所述的方法,其特征在于,所述方法还包括: 所述领导节点在监听到所述处理节点的变化时,根据变化后的所述处理节点重新均衡分配所述待处理任务以更新所述预设目录。5.根据权利要求1或4所述的方法,其特征在于,所述均衡分配所述待处理任务,包括: 所述领导节点根据已启动的所述处理节点的所述负载能力信息,采用预设算法对所述待处理任务进行均衡分配;其中,所述预设算法包括:一致性哈希算法、随机算法、轮循算法、加权轮循算法、动态轮循算法、最快算法、最少连接算法、预判算法中的任意组合。6.根据权利要求1所述的方法,其特征在于,所述领导节点是在至少两个所述处理节点中,采用预设规则选取的。7.根据权利要求6所述的方法,其特征在于,当所述领导节点异常时,采用所述预设规则选择新的所述领导节点。8.一种负载均衡的装置,其特征在于,包括: 信息获取模块,用于领导节点获取处理节点的负载能力信息; 任务分配模块,用于所述领导节点根据所述负载能力信息均衡分配待处理任务。9.根据权利要求8所述的装置,其特征在于,所述任务分配模块还用于: 将所述均衡分配的结果存放至预设目录;其中,所述预设目录被所述处理节点监听以获取并执行所述均衡分配的结果中的目标待处理任务。10.根据权利要求9所述的装置,其特征在于,所述装置还包括任务锁模块,所述任务锁模块用于, 在所述获取并执行所述均衡分配的结果中的目标待处理任务之前,为每一所述目标待处理任务锁定相应的所述处理节点,从而避免多个处理节点重复执行同一所述目标待处理任务。11.根据权利要求9所述的装置,其特征在于,所述装置还包括更新模块,所述更新模块用于: 所述领导节点在监听到所述处理节点的变化时,根据变化后的所述处理节点重新均衡分配所述待处理任务以更新所述预设目录。12.根据权利要求8或11所述的装置,其特征在于,所述任务分配模块用于: 所述领导节点根据已启动的所述处理节点的所述负载能力信息,采用预设算法对所述待处理任务进行均衡分配;其中,所述预设算法包括:一致性哈希算法、随机算法、轮循算法、加权轮循算法、动态轮循算法、最快算法、最少连接算法、预判算法中的任意组合。13.根据权利要求8所述的装置,其特征在于,所述装置还包括,领导节点选取模块,所述领导节点选取模块用于: 在至少两个所述处理节点中,采用预设规则选取所述领导节点。14.根据权利要求13所述的装置,其特征在于,所述领导节点选取模块还用于: 当所述领导节点异常时,采用所述预设规则选择新的所述领导节点。
【文档编号】H04L29/08GK105939389SQ201610499271
【公开日】2016年9月14日
【申请日】2016年6月29日
【发明人】乔清杰, 刘宏斌, 国铁龙
【申请人】乐视控股(北京)有限公司, 乐视网信息技术(北京)股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1