基于p2p技术的分布式负载均衡系统和方法

文档序号:7862649阅读:405来源:国知局
专利名称:基于p2p技术的分布式负载均衡系统和方法
技术领域
本发明涉及一种基于点对点P2P (Peer-to-Peer)技术的分布式负载均衡系统和方法,属于计算机网络的技术领域。
背景技术
随着网络业务量、访问量和数据流量的快速增长,服务器集群技术得到广泛的应用和研究,而负载均衡技术作为服务器集群技术中的重要组成部分,也得到了广泛、深入的研究和应用。目前,负载均衡技术在商业化的web服务的业务负载管理、网格计算中的计算任务负载管理、并行计算中的计算任务负载管理、云计算的计算资源负载管理等领域问题都 有大量的研究和实践应用。按照仲裁方式,负载均衡技术主要分为集中式仲裁的负载均衡和分布式仲裁的负载均衡。由于集中式仲裁需要设置一个集中的负载均衡器,因此容易出现单点失效;并且随着分布式集群处理节点的增多,其处理性能也会受到一定的限制,容易成为性能瓶颈。分布式仲裁的负载均衡已经逐渐成为新的研究方向。P2P技术由于具有全分布、无中心节点等优势,进行负载决策时不会出现性能瓶颈和单故障点问题,而且,集群的伸缩性比较好,因此成为分布式负载均衡研究和应用的新方向。在P2P技术中,分布式哈希表DHT(DistributedHashTable)是一种广泛应用的方法。其主要思想是通过哈希函数建立各个请求和分布式集群处理节点之间的映射关系,并在分布式集群处理节点处于动态增加和移出时,能够最小化地改变每个请求和分布式集群处理节点之间映射关系。基于P2P技术的分布式负载均衡方法的现有技术存在两个问题亟待解决节点动态变化的管理和节点请求的负载均衡。现有技术中,基于DHT实现的负载均衡经典算法方案有两种Chord算法方案和Kademlia算法方案。这两种方案都很好地解决了分布式集群环境下的节点动态变化管理和数据快速存取的处理过程,但是,它们都没有很好地解决节点请求负载均衡的问题,系统中的节点可能出现负载过重或过轻的现象。其中,Chord算法在一致性哈希算法的基础上,提高了查找指定请求所在节点的效率,但是,在节点数量不多时,很难保证每个节点在哈希环上的分布是否具有随机性,这个问题又会造成哈希环上相邻节点之间的间隔不够均匀,从而带来某些节点负载过重或者过轻的后
果OKademlia算法在一致性哈希算法的基础上,根据请求的关键字和节点ID的相似度来选择为其服务的节点。在查询选择时,通过异或运算来优化查询效率,即查找与请求关键字的异或运算结果最小的节点,用作为其服务的节点,这个方法具有一定的随机性。但是,该方案没有考虑节点的负载情况,而且,系统中每个节点的负载分配跟请求的关键字有较大的关联,造成系统中每个节点的负载出现不均衡的概率比较大,因此,基于Kademlia算法虽然和Chord算法同样解决了分布式集群环境下的处理节点动态变化和数据快速存取过程。但是,它们的共同缺点是均没有负载均衡的策略,系统中的节点都可能出现负载过重或者过轻的现象。查找现有的论文和专利申请等资料,发现有2篇专利申请涉及到基于P2P技术的分布式负载均衡机制,分别介绍和对比分析如下。《一种集群服务的负载均衡方法和装置》(公开号CN102137128A)介绍一种基于反馈机制的动态负载均衡技术,其方法是首先获得集群中负载节点的负载能力,再根据负载能力获得负载节点的负载因子,再根据负载因子生成负载分配序列;当接收到待分配的服务请求时,根据服务请求生成随机数,再把生成的随机数根据所有节点负载因子总和取模余,得到一个参考值,再以负载节点的负载因子为参考值的节点做为接受请求的节点。但是,其没有提供解决节点动态变化的管理问题,在分布式集群环境下应用具有一定的局限性。
《一种DHT网络负载均衡装置及虚节点划分的方法》(公开号CN101834897A)介绍了一种DHT网络负载均衡装置结构组成,以及其虚节点的划分方法节点加入网络时,通过性能模型定义自身节点级别,若本身为弱节点,找到临近的弱节点,并与邻近的弱节点合并;接着,该节点退出网络并与找到的临近弱节点建立连接,共同组成一个强虚节点,同时退出节点,通过相邻弱节点与系统中的其他节点进行交互,其他节点将退出节点看成为强虚节点的一部分;节点合并后的调整,使得节点查询装置只包含强虚节点ID,由强虚节点给各弱节点分配负载,实现负载均衡。该方法有效解决了节点动态变化的管理问题,但是,因为强虚节点的数量少于弱节点的数量,不可避免造成弱节点扎堆和系统整体均衡性不佳的情况。综合上述两个专利申请的方技术案,尽管其在一定程度上解决节点动态变化和系统负载均衡的问题。其系统负载均衡性是通过三层来保证的第一层是请求到参考值的均衡分布,第二层是参考值到强虚节点的均衡映射,第三层是强虚节点将请求均衡分配给其负责的各弱节点。但是,这样处理仍然不能很好地解决分布式集群环境中的负载均衡问题,其原因在于首先因其存在强虚节点层,当一个物理节点变动时,需要更改弱节点到强虚节点的映射关系和强虚节点到参考值的映射关系,一个弱节点的变动可能还会引起其邻居强虚节点的变动;因此当系统规模较大、节点动态变化较频繁时,强虚节点的变更给系统带来的开销会严重影响系统的整体性能和稳定性。其次,由于其强虚节点作为多个弱节点、即实际处理节点的集合,在第二层参考值到强虚节点的均衡映射只是保证了请求到弱节点集合的均衡性,并没有实现分布式集群系统全局意义上的负载均衡。因此,如何对现有的分布式负载均衡技术继续进行改进和提高,就成为业内科技人员关注的新课题。

发明内容
有鉴于此,本发明的目的是提供一种基于P2P技术的分布式负载均衡系统和方法,本发明系统用于分布式网络环境下,能够实现具有分布式仲裁功能、有效避免系统出现单点失效情况的负载均衡,该系统和方法能够支持分布式集群系统中节点增加和移出等情况下实现动态变化的负载均衡,并且可以有效保证环境变化后各节点的负载均衡。为了达到上述目的,本发明提供了一种基于P2P技术的分布式负载均衡系统,其特征在于该系统由具有均衡负载功能的分布式处理集群所组成,该处理集群内没有集中控制的中心节点,只设有分设于不同服务器、并分别用作该系统分布式控制核心的多个同构或异构的处理节点,每个处理节点都能独立提供分布式仲裁的负载均衡功能,且各自的处理事件的权限与均衡负载的功能都相同,异构处理节点的差异只是其事件的处理速率不同;当客户端向分布式处理集群实时发送海量数据处理请求时,该系统的某个处理节点完成请求处理后,将产生的中间结果封装为事件,发往其它处理节点继续处理;各处理节点在分发事件过程中,始终采用分布式负载均衡方法保证事件分发的负载均衡,直到产生最终结果并返还给客户端;该处理节点设有处理层和通信层;其中处理层,由包含多个处理单元的处理单元容器所组成,负责进行事件处理接收来自通信层的事件,再根据事件类型和每个事件所设定属性的属性值,将该事件交由特定处理单元进行处理,同时负责将该事件处理完成后产生的新事件或最终结果,交给通信层进行分发与发送;通信层,用于监听、分发事件及实现分布式负载均衡负责从网络接收事件并转交给处理层;然后接收处理层完成处理后产生的新事件或最终结果,再使用分布式负载均衡方法将该新事件或最终结果分发给其他处理节点或客户端,保证该分布式处理集群中的各 处理节点负载均衡;设有事件监听、事件分发、事件发送、负载管理和分布式集群管理共五个模块。为了达到上述目的,本发明还提供了一种基于P2P技术的分布式负载均衡系统的工作方法,其特征在于每个处理节点的通信层中的事件分发模块和负载管理模块协同完成基于虚拟节点与处理节点之间映射的事件分发方法,实现基于P2P技术的分布式负载均衡;所述方法包括下述两个操作步骤步骤1,每个处理节点的通信层中的负载管理模块创建或更新虚拟节点映射表和动态负载信息表步骤2,每个处理节点的通信层中的事件分发模块与负载管理模块交互,根据虚拟节点映射表执行事件分发决策操作,将每个事件分发到相应的处理节点,并实现负载均衡事件分发模块计算每个事件的关键属性的哈希值,再将该哈希值除以虚拟节点总个数所得到的余数,作为将该事件准备分发到的虚拟节点编号;事件分发模块与负载管理模块交互,从虚拟节点映射表查找该虚拟节点编号及其所对应的处理节点编号,以获取准备将该事件分发到的处理节点编号。本发明系统和方法的主要创新技术是采用在系统的通信层建立虚拟节点映射表和动态负载信息表来实现分布式负载均衡。本发明中的虚拟节点概念与DHT算法中一致性哈希的哈希环值有相似之处,但是,本发明的事件分发方法是对一致性哈希中的均衡策略的改进,更具优势。究其原因在于DHT算法中的一致性哈希是将资源映射到哈希环上的数值,然后,某段哈希环上的数值就与某个处理节点相对应;由于处理节点在哈希环上是随机分布的,在查询处理节点时,需要顺时针或逆时针遍历所有处理节点的集合,这样就会产生处理节点扎堆和查询效率不高的缺陷。本发明是先用哈希方法获取虚拟节点编号,然后再映射到处理节点。本发明保证虚拟节点编号可以均匀地分布在哈希环上。此外,通过第一阶段的哈希方法分散性和第二阶段的虚拟节点映射到处理节点的均衡性,以保证系统全局意义上的均衡性,并且,在查询处理节点时,只需在虚拟节点映射表中一次查询便能获知处理节点,查询效率高。因而,本发明分布式负载均衡方法的实质是一种改进的DHT实现方法。多次的仿真实施例的试验证明,本发明具有很好的推广应用前景。


图I是本发明基于P2P技术的分布式负载均衡系统总体结构组成示意图。图2是本发明分布式负载均衡系统中的处理节点组成结构示意图。图3是本发明基于P2P技术的分布式负载均衡系统的工作方法流程图。图4是本发明分布式负载均衡系统中的事件分发方案示意图。图5是本发明分布式负载均衡系统中分布式负载均衡事件分发时序图。 图6是本发明分布式负载均衡系统中新增处理节点表的更新操作时序图。图7是本发明分布式负载均衡系统中处理节点动态移出表的更新操作时序图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面结合附图和实施例对本发明作进一步的详细描述。本发明是一种基于对等P2P (Peer-to-Peer)技术的分布式负载均衡系统,同时,提供了一种基于该系统的负载均衡方法。首先介绍系统结构组成参见图1,本发明基于P2P技术的分布式负载均衡系统由具有均衡负载功能的分布式处理集群所组成,该处理集群内没有中心节点(即集中控制节点),只有分设于不同服务器、并分别用作该系统分布式控制核心的多个同构或异构的处理节点(实际环境部署时,同一台服务器也可以设置多个处理节点),每个处理节点都能独立提供分布式仲裁的负载均衡功能,且各自处理事件的权限与均衡负载的功能都相同,异构处理节点的差异只是其事件的处理速率不同。当客户端向分布式处理集群实时发送海量数据处理请求时,该系统的某个处理节点完成请求处理后,将产生的中间结果封装为事件,并发往其它处理节点继续处理。而且,各处理节点在分发事件过程中,始终采用分布式负载均衡方法保证事件分发的负载均衡,直到产生最终结果并返还给客户端。参见图2,介绍处理节点内部功能模块,其设有处理层和通信层;其中处理层由包含多个处理单元的处理单元容器所组成,负责进行事件处理接收来自通信层的事件,再根据事件类型和每个事件所设定属性的属性值,将该事件交由特定处理单元进行处理,同时负责将该事件处理完成后产生的新事件或最终结果,交给通信层进行分发与发送。处理层的两种组成部件功能如下处理单元容器,用于管理和控制其内部的各个处理单元,采用设定顺序激活相应的处理单元来处理不同事件。处理单元,用于处理特定类型和属性的事件,负责藉由通信层的事件分发模块和事件发送模块,将产生的中间处理结果作为新事件,发往其他处理单元继续处理;或者将处理的最终结果返回给客户端;每个处理单元都是系统预先设置的,或者由第三方程序员开发并部署到处理节点上。通信层用于监听、分发事件及实现分布式负载均衡(参见第4节):负责从网络接收事件并转交给处理层,然后接收处理层完成处理后产生的新事件或最终结果,再使用分布式负载均衡方法将该新事件或最终结果分发给其他处理节点或客户端,保证该分布式处理集群中的各处理节点负载均衡。设有下述五个模块事件监听、事件分发、事件发送、负载管理和分布式集群管理模块事件监听模块,负责接收网络事件,并交由处理层的处理单元进行处理。事件分发模块,负责接收处理层的新事件或最终结果,并按照负载管理模块提供的负载均衡信息来分发新事件或最终结果,再经由事件发送模块将其发送到其他处理节点或客户端。事件发送模块,用于将来自事件分发模块的新事件或最终结果分别发送到设定的处理节点或客户端,分发过程中保证系统负载均衡。负载管理模块,其为处理节点实现分布式负载均衡方法的关键模块,负责创建与维护事件分发模块所需的负载信息,并为此定义了下述几个重要概念 (A)虚拟节点是为了实现分布式负载均衡方法而设置的一个与处理节点相互映射的逻辑符号,每个虚拟节点只能映射到一个处理节点,但是,每个处理节点能够映射到多个虚拟节点。虚拟节点个数是在系统启动时设置的,其数量远大于处理节点个数;且在系统运行后,虚拟节点个数保持不变;当系统新增或退出处理节点时,处理节点及其虚拟节点之间的映射关系也要根据调整算法作相应改变。(B)虚拟节点映射表是本发明的重要数据结构,设于每个处理节点的负载管理模块,用于表示每个虚拟节点编号及其对应的处理节点编号,以便在系统分发事件时,查找该虚拟节点映射表,根据虚拟节点编号获取其对应的处理节点。虚拟节点映射表是根据每个处理节点的事件处理速率高低降序排列形成的;因每个处理节点处理事件的速率不同,故每个处理节点所分配的对应虚拟节点个数也不相等;且在系统运行后,为节省更新时间,采取增删处理节点的动态负载信息表和虚拟节点映射表的更新方法来实时更新虚拟节点映射表。下表I就是一个虚拟节点映射表的示例其中第一项是虚拟节点编号,第二项是该虚拟节点对应的处理节点编号。在需要进行事件分发时,即本发明事件分发第二阶段就是通过根据虚拟节点编号查找虚拟节点映射表的方式,获取该虚拟节点对应的处理节点。
虚拟节点处理节点
虚拟节点O处理节点O
虚拟节点I处理节点I
虚拟节点2......—
虚拟节点3—处理节点K
虚拟节点4处理节点O
虚拟节点5处理节点I
虚拟节点6......虚拟节点7处理节点K
虚拟节点N处理节点K本发明实施例是根据每个处理节点的事件处理速率的高低,采用降序排列方式来初始化虚拟节点映射表。实际应用时,也可用其它能够保证按照处理节点的事件处理速率高低降序排列的方法来初始化虚拟节点映射表,而且,对于每个处理效率不同的处理节点,可以给其分配数量不同的虚拟节点。需要注意的是,虚拟节点映射表的初始化方法仅适用于初始构建的时候。系统运行后,为节省虚拟节点映射表的更新时间,不再采用该初始化的方法来更新虚拟节点映射表。在动态新增或移出处理节点后,本发明是采用动态新增或移出处理节点的动态负载信息表和虚拟节点映射表的更新方法来实时更新虚拟节点映射表。(C)动态负载信息表是是本发明的另一重要数据结构,设于每个处理节点负载管理模块,用于表示每个处理节点编号、按照其事件处理速率在理论上分配的虚拟节点个数 与其实际对应的虚拟节点个数。本发明系统中各处理节点对应的虚拟节点个数称为节点负载数。在初始建立虚拟节点映射表时,为方便维护每个处理节点的负载信息,根据虚拟节点映射表信息建立了一张动态负载信息表。该动态负载信息表是按照每个处理节点的负载数量与其理论上分配的负载数量之差的绝对值降序排列形成的,且其信息与虚拟节点映射表的信息逐一对应的。故在虚拟节点映射表更新时,动态负载信息表也要相应更新。下表2是一个动态负载信息表的示例其中第一项是处理节点编号,第二项是该处理节点对应的虚拟节点个数,第三项是一个列表,包含该处理节点对应的各个虚拟节点编号。动态负载信息表中每一项是按照处理节点负载数从大到小降序排列的。同时,为了保证分布式处理集群中增加处理节点时,新增的处理节点和虚拟节点的映射集均勻分开,在创建动态负载信息表时,对每个处理节点对应的虚拟节点编号执行乱序操作。
处理节点节点负载数虚拟节点列表
处理节点O25640,4,0,......
处理节点I2565,41, I,......
处理节点 K25619,7, 3,......一虚拟节点映射表与动态负载信息表之间的关系在系统启动时,借助分布式集群管理模块中的信息创建虚拟节点映射表;在系统启动后,利用已经建立的虚拟节点映射表信息创建动态负载信息表,且在分布式处理集群中有新增或退出处理节点时,对虚拟节点映射表和动态负载信息表进行实时更新。分布式集群管理模块,负责管理和维护分布式处理集群及其中的全部处理节点与其对应的虚拟节点,该分布式处理集群中的各处理节点也经由该分布式集群管理模块实时获取该集群中自身与其他处理节点的链接地址、当前存活状态、负载状态与相关信息。本发明系统的应用场景主要有下述三种(I)分发事件场景客户端向分布式负载均衡系统中的分布式处理集群发送海量数据处理请求,分布式处理集群中的每个处理节点分别独立、均等地完成各自的负载决策,且在处理过程中,保证每个处理节点的负载均衡;并实时向客户端返回处理结果;(2)新增处理节点场景客户端向分布式处理集群发送海量数据处理请求过程中,为减轻该处理集群中各处理节点的负载压力,向该处理集群中实时增加新的处理节点;并在尽可能短时间内,由新增处理节点分担原处理集群中各处理节点的部分负载,使得新增 处理节点和原处理集群中各处理节点重新实现负载均衡。(3)移出处理节点场景客户端向该分布式处理集群发送海量数据处理请求过程中,因故障或管理需要等原因,有节点要迁移离开该处理集群时,由该集群中其它处理节点承担该移出处理节点的负载;并在尽可能短时间内,使得移出一个或多个处理节点后的处理集群中的每个处理节点重新达到负载均衡。参见图3,介绍本发明基于P2P技术的分布式负载均衡系统的工作方法每个处理节点的通信层中的事件分发模块和负载管理模块协同完成基于虚拟节点与处理节点之间映射的事件分发方法,实现基于P2P技术的分布式负载均衡。包括下述两个操作步骤步骤1,每个处理节点的通信层中的负载管理模块创建或更新虚拟节点映射表和动态负载信息表。该步骤I包括下列操作内容(11)系统初始建立时,负载管理模块根据每个处理节点的事件处理速率高低采用降序排列方式创建初始化虚拟节点映射表,此时对于事件处理速率不同的处理节点,分别设置相应不同的虚拟节点个数。该步骤包括下列操作内容(IlA)为保证负载均衡,负载管理模块先计算系统当前每个处理节点理论上获取
的负载个数,即其理论负载个数IoadAfter (i)为
P Γ4Ρ4Π Υ(Λ= 规—Μ /篇—式中,VIRTUAL N0DES NUM是
> ^P_(APA(111(ι)- -
虚拟节点总个数,其数值远大于系统处理节点总个数N ;自然数i是处理节点编号,其最大值为N;P_CAPACITY(i)是编号为i的处理节点的事件处理速率,该事件处理速率取决于包
括CPU和内存的权衡因子,或者由专业测试工具事先测定的-:..>—(週(聊)是系
统当前所有处理节点的事件处理总速率;(IlB)负载管理模块顺序给每个处理节点随机分配IoadAfter(i)个负载,直到所有虚拟节点都有一个与其对应的处理节点;且每次分配都要分别在动态负载信息表和虚拟节点映射表执行相应更新操作。(IlC)负载管理模块对动态负载信息表中各个处理节点按照其当前的实际负载数与理论负载数之差的绝对值进行降序排列。( 12)系统运行后,当新增或移出处理节点时,为使系统尽快重新达到负载均衡,负载管理模块实时更新虚拟节点映射表和动态负载信息表。步骤2 (参见图4),每个处理节点的通信层中的事件分发模块与负载管理模块交互,根据虚拟节点映射表执行事件分发决策操作,将每个事件分发到相应的处理节点,并实现负载均衡事件分发模块计算每个事件的关键属性的哈希值,再将该哈希值除以虚拟节点总个数所得到的余数,作为将该事件准备分发到的虚拟节点编号;事件分发模块与负载管理模块交互,从虚拟节点映射表查找该虚拟节点编号及其所对应的处理节点编号,以获取准备将该事件分发到的处理节点编号。图4所示的系统事件分发机制示意图是本发明方法的关键,为了更详细地介绍其操作流程,下面根据本发明三种应用场景分别介绍三种不同场景下的分布式负载均衡事件分发流程。 参见图5,说明分发事件场景的分布式负载均衡事件分发操作流程,其对应的是本系统进行海量数据处理的场景。分发事件场景包括下列操作内容(Al)处理节点的事件监听模块监测到网络中新出现需要处理的事件,就根据该事件类型将其发送到处理单元容器,交给相应的处理单元进行处理。需要说明的是,分布式处理集群中每个处理节点都在时刻监听是否有需处理事件。(A2)该处理单元完成事件处理后,将新产生的事件准备发往其他处理节点或由其自身继续处理。(A3)事件分发模块先计算该新事件属性的哈希值,再利用哈希方法、即将该哈希值除以虚拟节点总个数所得到的余数(启动时配置,系统启动后为常量),作为对应的虚拟节点编号。(A4)事件分发模块与负载管理模块交互,根据该虚拟节点编号查询虚拟节点映射表(参见表1),得到该新事件准备分发到的处理节点编号;然后,将该新事件与要分发的对应处理节点编号信息传给事件发送模块。(A5)事件发送模块将该新事件发往其他处理节点或自身节点继续处理,直到产生事件最终结果,返回给客户端。需要注意的是,上述两个步骤(A3)和(A4)是本发明负载均衡方法的核心流程,可以看到各个处理节点分别执行负载均衡策略,无中心负载均衡处理节点,是一种典型的基于p2p技术的分布式负载均衡方法。参见图6,介绍新增处理节点场景时、即系统进行海量数据处理时,新增一个处理节点后,其他处理节点的部分负载分摊给新处理节点,使得分布式处理集群重新达到负载均衡的操作流程。该场景包括下列操作内容(BI)处理节点的分布式集群管理模块检测到新增处理节点加入,就将该信息通知分布式集群中的所有处理节点的负载管理模块,并提供该新增处理节点的配置信息(包括该新增处理节点编号、IP地址、事件处理速率和端口号)。(B2)其他各个处理节点负载管理模块接收上述信息,再根据该新增处理节点信息对动态负载信息表和虚拟节点映射表进行更新。该更新方法借鉴了一致性哈希在节点加入系统时尽量减少系统拓扑维护的思路设置一个通用场景,用于说明增加一个处理节点时的动态负载信息表和虚拟节点映射表更新方法。假设当前系统设有N个处理节点,总共有VIRTUAL_NODES_NUM个虚拟节点(VIRTUAL_NODES_NUM远大于N)。现在要增加一个处理节点,也就是处理节点从N个增加到N+1个。具体操作内容如下(B2A)为保证负载均衡,负载管理模块先计算系统当前包括新增处理节点在内的所有处理节点理论上将获取的负载个数,即其理论负载个数IoadAfter⑴为
ΜΑ·_、= VimAL - NODES - _,式中,自然数i是处理节点编号,
其最大值为N ;, VIRTUAL_NODES_NUM是虚拟节点总个数,其数值远大于系统处理节点总个数N ;P_CAPACITY(i)是编号为i的处理节点的事件处理速率,Σ :;Ρ—(、ΑΡΑαΤΥ( )是系统当前所有处理节点的总事件处理速率;(Β2Β)负载管理模块将动态负载信息表按照处理节点的实际负载数与理论负载数之差的绝对值进行降序排列;
(B2C)负载管理模块按照调整后的动态负载信息表的排列顺序,从绝对值最大的处理节点k开始,将(I IoadAfter (k)-IoadActual (k) | )个负载转移给新增处理节点,式中,IoadActual (k)为处理节点的实际负载个数;直到新增处理节点i的理论负载个数与实际负载个数相等;需要注意的是对于需要转移负载给新增处理节点的最后一个处理节点1,其转移的负载个数应不多于(IloadAfter(I)-IoadActual(I) | ),以保证该新增处理节点所分配的实际负载个数不大于其理论分配的负载个数,且负载数多的处理节点移出更多的负载(B2D)根据上述步骤调整结果,对虚拟节点映射表和动态负载信息表做相应更新遍历处理节点的动态负载信息表,对于该表中每个处理节点转移(I IoadAfter (k)-IoadActual (k) | )个负载给新增处理节点,直到新增处理节点i理论负载个数IoadAfteHi)与实际负载个数相等IoadActual (i);且每次转移都要分别在动态负载信息表和虚拟节点映射表执行相应更新操作;再在动态负载信息表上新建一行,用于表示该新增处理节点的负载信息;最后,对动态负载信息表中各个处理节点重新按照其实际负载数与理论负载数之差的绝对值进行降序排列。(B3)每个处理节点负载管理模块完成虚拟节点映射表和动态负载信息表的更新后,新增处理节点就分担该分布式处理集群中的所有原处理节点的部分负载,使得新增处理节点和该处理集群中的所有原处理节点很快重新达到负载均衡。参见图7,介绍对于处理节点移出场景的分布式负载均衡表更新流程。该场景是本发明系统进行海量数据处理时,某个处理节点因故障或管理原因被移出系统后,分布式处理集群其他处理节点取代移出处理节点工作,重新达到负载均衡的过程。此时的操作步骤如下(Cl)处理节点的分布式集群管理模块采用各个处理节点之间互发心跳信息或其他方法,检测到该集群中有移出处理节点的状况处理节点正常关闭或因故障而宕机,使得该集群中的处理节点减少的现象。(C2)发现移出处理节点的处理节点中的分布式集群管理模块,通知该分布式集群中的所有处理节点的负载管理模块有处理节点移出,并提供该移出处理节点包括其编号、IP地址、事件处理速率和端口号的配置信息。(C3)其他各个处理节点的负载管理模块接收上述信息后,根据该移出的处理节点信息更新动态负载信息表和虚拟节点映射表。这个更新过程是重新达到负载均衡的核心,本发明对于处理节点移出的动态负载信息表和虚拟节点映射表的更新方法同样也借鉴了一致性哈希在节点加入系统时尽量减少系统拓扑维护的思想。处理节点移出的动态负载信息表和虚拟节点映射表的详细更新过程包括下列操作内容(C3A)假设原处理节点总个数为N,虚拟节点总个数为VIRTUAL_
N0DES_NUM,且VIRTUAL_NODES_NUM远大于N,此时移出一个处理节点,即当
前处理节点总个数为(N-I);同时,计算当前系统各处理节点的理论负载为
P C APiCiTYii) ·
—=NODES — NtfM 隱ryr⑴*并对动态负载信息表中各
个处理节点重新按照其实际负载数与理论负载数之差的绝对值降序排列;(C3B)为保证移出处理节点的负载转移后,仍然实现均衡负载,采取下述更新策略按照调整后的动态负载信息表的排列顺序,从绝对值最大的处理节点k开始,逐个进行下述操作从该移出处理节点处获取(I IoadAfter (k)-IoadActual (k) | )个负载,直到该移出处理节点的所有负载都已被重新分配给其他各个处理节点;需要注意的是,操作到动态负载信息表中最后一个处理节点时,如果该移出处理节点的负载还没有全部被分配出去,则将该移出处理节点剩余的所有负载都转移给最后一个处理节点,保证负载数少的处理节点能从该移出处理节点处获取更多负载;(C3C)根据上述操作结果,相应修改虚拟节点映射表和动态负载信息表遍历处理节点的动态负载信息表,该表中的每个处理节点从该移出处理节点处获取(I IoadAfter (k)-IoadActual (k) I)个负载,其中,自然数k为遍历时的当前处理节点编号;直到该移出处理节点的所有负载都已被重新分配给其他各个处理节点;且每次转移负载都要分别在动态负载信息表和虚拟节点映射表执行相应修改操作;(C34)在动态负载信息表上删除已经移出的处理节点信息;最后,对动态负载信息表中各个处理节点重新按照其实际负载数与理论负载数之差的绝对值进行降序排列。(C4)每个处理节点负载管理模块更新完成虚拟节点映射表和动态负载信息表后,该集群中的其他各个处理节点就承担了该退出处理节点的负载,并在尽可能短的时间内,移出处理节点后的该分布式处理集群重新实现负载均衡。本发明已经进行了大量的仿真实施试验,试验的结果成功的,实现了发明目的。
权利要求
1.一种基于点对点P2P (Peer-to-Peer)技术的分布式负载均衡系统,其特征在于该系统由具有均衡负载功能的分布式处理集群所组成,该处理集群内没有集中控制的中心节点,只设有分设于不同服务器、并分别用作该系统分布式控制核心的多个同构或异构的处理节点,每个处理节点都能独立提供分布式仲裁的负载均衡功能,且各自的处理事件的权限与均衡负载的功能都相同,异构处理节点的差异只是其事件的处理速率不同;当客户端向分布式处理集群实时发送海量数据处理请求时,该系统的某个处理节点完成请求处理后,将产生的中间结果封装为事件,发往其它处理节点继续处理;各处理节点在分发事件过程中,始终采用分布式负载均衡方法保证事件分发的负载均衡,直到产生最终结果并返还给客户端;该处理节点设有处理层和通信层;其中 处理层,由包含多个处理单元的处理单元容器所组成,负责进行事件处理接收来自通信层的事件,再根据事件类型和每个事件所设定属性的属性值,将该事件交由特定处理单元进行处理,同时负责将该事件处理完成后产生的新事件或最终结果,交给通信层进行分发与发送; 通信层,用于监听、分发事件及实现分布式负载均衡负责从网络接收事件并转交给处理层;然后接收处理层完成处理后产生的新事件或最终结果,再使用分布式负载均衡方法将该新事件或最终结果分发给其他处理节点或客户端,保证该分布式处理集群中的各处理节点负载均衡;设有事件监听、事件分发、事件发送、负载管理和分布式集群管理共五个模块。
2.根据权利要求I所述的系统,其特征在于所述处理层的各个组成部件功能如下 处理单元容器,用于管理和控制其内部的各个处理单元,采用设定顺序激活相应的处理单元来处理不同事件; 处理单元,用于处理特定类型和属性的事件,负责藉由通信层的事件分发模块和事件发送模块,将产生的中间处理结果作为新事件,发往其他处理单元继续处理;或者将处理的最终结果返回给客户端;每个处理单元都是系统预先设置的,或者由第三方程序员开发并部署到处理节点上。
3.根据权利要求I所述的系统,其特征在于所述通信层的各个组成部件功能如下 事件监听模块,负责接收网络事件,并交由处理层的处理单元进行处理; 事件分发模块,负责接收处理层的新事件或最终结果,并按照负载管理模块提供的负载均衡信息来分发新事件或最终结果,再经由事件发送模块将其发送到其他处理节点或客户端; 事件发送模块,用于将来自事件分发模块的新事件或最终结果分别发送到设定的处理节点或客户端; 负载管理模块,负责创建与维护事件分发模块所需的负载信息,即虚拟节点映射表与动态负载信息表在系统启动时,借助分布式集群管理模块中的信息创建虚拟节点映射表;在系统启动后,利用已经建立的虚拟节点映射表信息创建动态负载信息表,且在分布式处理集群中有新增或退出处理节点时,对虚拟节点映射表和动态负载信息表进行实时更新; 分布式集群管理模块,负责管理和维护分布式处理集群及其中的全部处理节点与其对应的虚拟节点,该分布式处理集群中的各处理节点也经由该分布式集群管理模块实时获取该集群中自身与其他处理节点的链接地址、当前存活状态、负载状态与相关信息。
4.根据权利要求3所述的系统,其特征在于所述虚拟节点是为了实现分布式负载均衡方法而设置的一个与处理节点相互映射的逻辑符号,每个虚拟节点只能映射到一个处理节点,但每个处理节点能够映射到多个虚拟节点;虚拟节点个数是在系统启动时设置的,其数量远大于处理节点个数;且在系统运行后,虚拟节点个数保持不变;当系统新增或退出处理节点时,处理节点及其虚拟节点之间的映射关系也根据调整算法作相应改变; 所述虚拟节点映射表设于每个处理节点的负载管理模块,用于表示每个虚拟节点编号及其对应的处理节点编号,以便在系统分发事件时,查找该虚拟节点映射表,根据虚拟节点编号获取其对应的处理节点;该虚拟节点映射表是根据每个处理节点的事件处理速率高低降序排列形成的;因每个处理节点处理事件的速率不同,故每个处理节点所分配的对应虚拟节点个数也不相等;且在系统运行后,为节省更新时间,采取增删处理节点的动态负载信息表和虚拟节点映射表的更新方法来实时更新虚拟节点映射表; 所述动态负载信息表设于每个处理节点负载管理模块,用于表示每个处理节点编号、按照其事件处理速率在理论上分配的虚拟节点个数与其实际对应的虚拟节点个数;该动态负载信息表是按照每个处理节点的负载数量与其理论上分配的负载数量之差的绝对值降序排列形成的,且其信息与虚拟节点映射表的信息逐一对应;故在虚拟节点映射表更新时,动态负载信息表也要相应更新。
5.一种基于P2P技术的分布式负载均衡系统的工作方法,其特征在于每个处理节点的通信层中的事件分发模块和负载管理模块协同完成基于虚拟节点与处理节点之间映射的事件分发方法,实现基于P2P技术的分布式负载均衡;所述方法包括下述两个操作步骤 步骤1,每个处理节点的通信层中的负载管理模块创建或更新虚拟节点映射表和动态负载信息表 步骤2,每个处理节点的通信层中的事件分发模块与负载管理模块交互,根据虚拟节点映射表执行事件分发决策操作,将每个事件分发到相应的处理节点,并实现负载均衡 事件分发模块计算每个事件的关键属性的哈希值,再将该哈希值除以虚拟节点总个数所得到的余数,作为将该事件准备分发到的虚拟节点编号; 事件分发模块与负载管理模块交互,从虚拟节点映射表查找该虚拟节点编号及其所对应的处理节点编号,以获取准备将该事件分发到的处理节点编号。
6.根据权利要求5所述的方法,其特征在于所述方法的应用场景有三种 分发事件客户端向分布式负载均衡系统中的分布式处理集群发送海量数据处理请求,分布式处理集群中的各个处理节点分别独立、均等地完成各自的负载决策,且在处理过程中,保证各个处理节点的负载均衡;并实时向客户端返回处理结果; 新增处理节点客户端向分布式处理集群发送海量数据处理请求过程中,为减轻该处理集群中各处理节点的负载压力,在该处理集群中实时增加新的处理节点;并在尽可能短时间内,由新增处理节点分担原处理集群中各处理节点的部分负载,使得新增处理节点和原处理集群中各处理节点重新实现负载均衡; 移出处理节点客户端向该分布式处理集群发送海量数据处理请求过程中,因故障或管理需要,有节点要迁移离开该处理集群时,由该处理集群中的其它处理节点承担该移出处理节点的负载;并在尽可能短时间内,使得移出一个或多个处理节点后的该处理集群中的各个处理节点重新达到负载均衡。
7.根据权利要求5所述的方法,其特征在于所述步骤I包括下列操作内容 (11)系统初始建立时,负载管理模块根据每个处理节点的事件处理速率高低降序排列方式创建初始化虚拟节点映射表,此时对于事件处理速率不同的处理节点,分别设置相应不同的虚拟节点个数; (12)系统运行后,当新增或移出处理节点时,为使系统尽快重新达到负载均衡,负载管理模块实时更新虚拟节点映射表和动态负载信息表。
8.根据权利要求7所述的方法,其特征在于所述步骤(11)包括下列操作内容 (IIA)为保证负载均衡,负载管理模块先计算系统当前每个处理节点理论上获取的负载个数,即其理论负载个数IoadAfter (i) P CAPACnYif\为:k__:vmnw._m)ms-Ni· ⑶浓“;式中,virtual_nodes_num 是虚拟节点总个数,其数值远大于系统处理节点总个数N ;自然数i是处理节点编号,其最大值为N ;P_CAPACITY(i)是编号为i的处理节点的事件处理速率,该事件处理速率取决于包括CPU和内存的权衡因子,或者由专业测试工具事先测定的Tlp是系统当前所有处理节点的事件处理总速率; (IIB)负载管理模块顺序给每个处理节点随机分配IoadAfteHi)个负载,直到所有虚拟节点都有一个与其对应的处理节点;且每次分配都要分别在动态负载信息表和虚拟节点映射表执行相应更新操作。
(IIC)负载管理模块对动态负载信息表中各个处理节点按照其当前的实际负载数与理论负载数之差的绝对值进行降序排列。
9.根据权利要求6所述的方法,其特征在于所述方法应用于分发事件场景时,包括下列操作内容 (Al)处理节点的事件监听模块监测到网络中新出现需要处理的事件,就根据该事件类型将其发送到处理单元容器,交给相应的处理单元进行处理; (A2)该处理单元完成事件处理后,将新产生的事件准备发往其他处理节点或由其自身继续处理; (A3)事件分发模块先计算该新事件属性的哈希值,再利用哈希方法、即将该哈希值除以虚拟节点总个数所得到的余数,作为对应的虚拟节点编号; (A4)事件分发模块与负载管理模块交互,根据该虚拟节点编号查询虚拟节点映射表,得到该新事件准备分发到的处理节点编号;然后,将该新事件与要分发的对应处理节点编号信息传给事件发送模块; (A5)事件发送模块将该新事件发往其他处理节点或自身节点继续处理,直到产生事件最终结果,返回给客户端。
10.根据权利要求6所述的方法,其特征在于所述方法应用于新增处理节点场景时,包括下列操作内容 (BI)处理节点的分布式集群管理模块检测到新增处理节点加入,就将该信息通知分布式集群中的所有处理节点的负载管理模块,并提供该新增处理节点的包括编号、IP地址、事件处理速率和端口号的配置信息; (B2)其他各个处理节点负载管理模块接收上述信息,再根据该新增处理节点信息对动态负载信息表和虚拟节点映射表进行更新; (B3)每个处理节点负载管理模块完成虚拟节点映射表和动态负载信息表的更新后,新增处理节点就分担该分布式处理集群中的所有原处理节点的部分负载,使得新增处理节点和该处理集群中的所有原处理节点很快重新达到负载均衡。
11.根据权利要求10所述的方法,其特征在于所述步骤(B2)中,动态负载信息表和虚拟节点映射表的更新包括下列操作内容(B2A)为保证负载均衡,负载管理模块先计算系统当前包括新增处理节点在内的所有处理节点理论上将获取的负载个数,即其理论负载个数IoadAfter⑴为
12.根据权利要求6所述的方法,其特征在于所述方法应用于移出处理节点场景时,包括下列操作内容 (Cl)处理节点的分布式集群管理模块采用各个处理节点之间互发心跳信息或其他方法,检测到该集群中有移出处理节点的状况处理节点正常关闭或因故障而宕机,使得该集群中的处理节点减少的现象; (C2)发现移出处理节点的处理节点中的分布式集群管理模块,通知该分布式集群中的所有处理节点的负载管理模块有处理节点移出,并提供该移出处理节点包括其编号、IP地址、事件处理速率和端口号的配置信息; (C3)其他各个处理节点的负载管理模块接收上述信息后,根据该移出的处理节点信息更新动态负载信息表和虚拟节点映射表;(C4)每个处理节点负载管理模块更新完成虚拟节点映射表和动态负载信息表后,该集群中的其他各个处理节点就承担了该退出处理节点的负载,并在尽可能短的时间内,移出处理节点后的该分布式处理集群重新实现负载均衡。
13.根据权利要求12所述的方法,其特征在于所述步骤(C3)中,动态负载信息表和虚拟节点映射表的更新包括下列操作内容 (C31)假设原处理节点总个数为N,虚拟节点总个数为VIRTUAL_NODES_NUM,且VIRTUAL_NODES_NUM远大于N,此时移出一个处理节点,即当前处理节点总个数为(N-I);同时,计算当前系统各处理节点的理论负载为
全文摘要
一种基于P2P技术的分布式负载均衡系统和方法,系统由均衡负载功能的分布式处理集群所组成,该集群内只设有分设于不同服务器的、由处理层和通信层构成的多个同构或异构处理节点,每个处理节点都能独立承担分布式仲裁的负载均衡功能,且其权限与功能都相同,差异只是事件的处理速率不同;当客户端向分布式处理集群实时发送海量数据处理请求时,某个处理节点完成请求处理后,将产生的中间结果封装为事件,发往其它处理节点继续处理;各处理节点在分发事件过程中,始终采用分布式负载均衡方法保证事件分发的负载均衡,直到产生最终结果并返还给客户端。本发明有效避免系统出现单点失效的负载均衡,能够在分布式集群系统中实现节点动态变化的负载均衡。
文档编号H04L29/08GK102882973SQ20121038418
公开日2013年1月16日 申请日期2012年10月11日 优先权日2012年10月11日
发明者赵耀, 宋颖莹, 彭书凯, 邹志勇, 杨放春, 邹华, 孙其博, 林荣恒, 李静林, 刘志晗 申请人:北京邮电大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1