集群消息传送方法及分布式集群系统的制作方法

文档序号:7974593阅读:335来源:国知局
专利名称:集群消息传送方法及分布式集群系统的制作方法
技术领域
本发明涉及分布式系统,尤其涉及一种集群消息传送方法及对应的分布式集群系统。
背景技术
在分布式系统中,通常采用基于网络的负载平衡策略和基于操作系统的负载平衡策略。基于网络的负载平衡策略借助IP路由器和域名服务器实现粗粒度平衡;基于操作系统的负载平衡策略,主要在操作系统级通过集群、负载共享和进程迁移完成平衡。
现有技术中的基于网络的负载平衡策略和基于操作系统的负载平衡策略都具有较强的处理能力,但负载平衡实现较复杂且缺乏对实时的用户应用级负载平衡的自适应能力和足够的反馈机制。

发明内容
本发明提供一种负载平衡自适应能力较强的集群消息传送方法与对应的分布式集群系统。
一种集群消息传送方法包括在系统中设置队列组管理器,在系统节点中设置消息队列;由队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将当前接收的消息发送到选择出的成员队列中,等待接收进程处理。
一种分布式集群系统,包括若干个系统节点,至少一个系统节点中包括设置的至少一个消息队列;所述系统中还包括队列组管理器,用于创建/删除完成任务的消息队列组,指定加入或离开队列组的消息队列;并接收任务发送进程发送的消息,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将接收的消息发送到选择出的成员队列中。
以上集群消息传送方法及分布式集群系统,通过在系统节点中设置消息队列,由队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从消息队列组中选择成员队列,将当前接收的消息发送到选择出的成员队列中,等待接收进程处理。这样,通过动态改变任务分配策略和选择系统节点中的消息队列,能有效改善动态任务的分配和调度,增强动态负载平衡的自适应能力。


图1为本发明提供的集群消息传送过程中消息传送控制示意图;图2为本发明提供的集群消息传送方法中队列组管理器进行任务分派原理示意图;图3为本发明提供的负载平衡调度方法中采用阈值阈长模型与队列负载状态示意图;图4为本发明提供的负载平衡调度方法中采用集中式负载平衡的控制示意图。
具体实施例方式
本发明提供一种集群消息传送方法,应用于分布式集群系统,包括在系统中设置队列组管理器,在系统节点中设置消息队列;由队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;
当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将当前接收的消息发送到选择出的成员队列中保存,等待接收进程处理。
下面结合附图,对本发明方法进行详细阐述。
在本发明中,在分布式集群系统中的系统节点中设置至少一个消息队列,消息队列是一个全局的概念,具有系统内唯一命名。队列和任务进程的对应关系采用多对一模式,即多个发送进程将消息发送到指定队列中以等待某个接收进程对其进行处理。接收进程通过队列的打开/关闭操作来使用消息队列。
在设置有消息队列的系统节点中,还设置队列管理器,用于接收发送方发送的消息,保存到本节点消息队列中或通过各系统节点之间的可靠有序通信将消息发送到目的节点的队列管理器处理,并管理系统中全部消息队列的全局信息。在消息队列创建时,每个节点中的队列管理器记录下该队列的全局信息(包括消息队列基本属性的描述,例如消息队列名/创建者名等,因为消息队列对于整个集群系统来说具有全局性,需要保证每个消息队列的唯一性)。
考虑到接收消息时消息传递带来的网络开销,在任务的第一个接收进程所在的节点开辟一段内存空间,称为该消息队列的物理队列,当接收进程在节点间迁移时,该物理队列也应该随之转移,并保证转移期间的消息顺序和完整性。
将多个消息队列有机地组织在一起构成消息队列组,共同完成某类任务,消息队列组对于整个系统来说也是全局的,并且在和消息队列相同名字空间内具有唯一的命名。
在本发明中,还设置队列组管理器,负责消息队列组的管理,包括消息队列组的创建、删除,组成员的加入、离开以及队列组任务分配策略设置等。
一个消息队列可以加入多个消息队列组,消息队列组中成员的物理队列也可以存在于不同的节点。当子任务的发送进程和某成员队列的接收进程位于同一节点时,称该成员队列为本地成员队列,相反,当发送进程和某成员队列的接收进程位于不同节点时,称该成员队列为远程成员队列。
消息队列组具有如下特点1)消息队列组通过逻辑名来标识,和队列组进行通信的进程不需要知道该队列组中消息队列的数量和物理位置,发送者使用和单个队列相同的机制来定位队列组;2)消息队列组进行任务分配过程中,无论参与任务分配的队列数目是多少,都可用相同的名字来访问该队列组。
3)消息队列组可以被用来维持消息的发送进程对接收进程故障的透明性,发送进程和队列组进行通信,如果一个接收进程失效,发送进程仍然可以继续从其他接收进程获得服务。
本发明集群消息传送过程中的消息传送控制示意图如图1所示。
首先,应用程序将任务分成若干子任务(可能需要由不同节点的不同进程来共同完成),应用程序调用消息服务应用程序接口(API)来请求队列组管理器创建一个消息队列组来完成当前任务,准备参与该任务的进程以消息队列的方式动态加入该消息队列组。当子任务发送进程向队列组发送消息时,消息首先到达队列组管理器,该队列组管理器根据任务分配策略选择所创建的消息队列组中的一个成员队列,然后按照单一队列传递方式来完成该消息的传递。例如当前消息到达节点1的队列管理器,节点1的队列管理器确定该消息是针对本地节点中的另一个进程还是远程节点中的进程,如果该消息是针对本地节点中的另一个进程,则直接把该消息传送到相应的队列中去,否则,通过各节点之间的可靠有序通信层把该消息通过网络传输,最终传送到目的地节点2,节点2上的队列管理器再把该消息发送到相应的消息队列中。
队列组管理器根据预定的任务分配策略,从消息队列组中选择成员队列保存消息,具体包括如下几种不同的单播和多播策略1)均衡分配策略消息被发送到单一成员队列,所有队列组成员之间进行任务轮转,每个成员队列都有相同的任务处理机会。如图2所示,该策略的优点是算法简单,不依赖于应用层的子任务分布情况,缺点是没有考虑本地优先原则,可能会造成网络通信量过大。
2)本地优先均衡分配策略消息发送到单一成员队列,若存在本地成员队列,只在本地成员队列之间进行轮转。否则,将根据均衡分派策略来选择一个远程成员队列。该策略对均衡分配策略进行了改进,充分考虑了本地优先处理原则,当任务较小或各节点任务量分布均匀时,有效地减少了网络间通信;缺点是当子任务请求过多集中于某几个节点,且任务量较大时,这些节点容易出现过载现象,而其他节点空闲,难以体现集群的并行计算性能优势。
3)本地轻负载优先策略消息发送到单一成员队列,本地成员队列中具有最大可用空间的队列将被选择。若多个成员队列满足该条件,在它们之间进行轮转选择。若没有本地成员队列,将根据均衡分派策略来选择一个远程成员队列。该策略在考虑了本地优先原则的基础上,还考虑了接收进程间的负载平衡,增强了进程间的并发性。
4)多播策略消息将被多播给所有组成员,只要成员队列具有足够的空间容纳该消息。该策略是一种高可用的分配策略,单个子任务分配到所有组成员,最后由其中一个成员队列接收者来完成任务的处理。但任务量较大时,多播策略系统开销较大,这就需要在高可用性和负载平衡性能之间进行折中,控制参与任务的成员队列数量。
根据本发明提供的集群消息传送方法,本发明提供一种相应的分布式集群系统,包括若干系统节点以及系统节点中的若干消息队列;在设置有消息队列的系统节点中还包括队列管理器,用于接收发送方发送的消息,保存到本节点消息队列中或通过各系统节点之间的可靠有序通信将消息发送到目的节点的队列管理器处理,并管理系统中全部消息队列的全局信息;在系统中还设置队列组管理器,用于创建/删除完成任务的消息队列组,指定加入或离开队列组的消息队列;并接收任务发送进程发送的消息,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将接收的消息发送到被选择的成员队列中。
根据本发明提供的上述分布式集群系统,本发明提供相应的负载平衡调度方法,它将成员队列中的剩余消息长度作为评价当前负载的主要依据,并在此基础上建立了基于队列的阈值阈长模型;同时,采用集中式负载平衡调度,由主节点负责搜集成员队列的负载状态,并由它来决定负载平衡调度方案;在过载处理过程中,除了进行负载迁移外,还利用队列组管理器,通过动态设置任务分配策略和成员队列的加入/退出来实现负载平衡。
下面对本发明提供的负载平衡调度方法进行详细阐述。
参见图3,用正整数T表示队列处理能力的阈值,t表示阈长,则当前队列的实际负载L(剩余消息长度)和阈值T与阈长t根据如下区域划分来确定消息队列的负载状态当L≤T-t时,确定消息队列的当前负载状态为轻载状态;当T-t<L<T+t时,确定消息队列的当前负载状态为平衡状态;L≥T+t时,确定消息队列的当前负载状态为过载状态。
当消息队列处于轻载状态时,表示该消息队列当前实际承担的任务量较少或该节点的负载较轻,可以成为负载迁移的接受者;当消息队列处于平衡状态时,表示该消息队列负载适中,当前分配的所有任务都可以在本地节点消化,但不参与负载迁移;当消息队列处于过载状态,表示该消息队列当前实际承担的任务量较多或该节点的负载较重,该消息队列将停止参与组内任务的分配。
阈值和阈长的选择是决定基于阈值负载平衡的关键,固定阈值策略不能反映系统运行时负载的波动情形,会降低动态负载平衡的性能。因此,应用程序可以在消息队列加入消息队列组时自主设置消息队列的阈值和阈长,当系统负载情况发生变化时,通过注册回调对阈值和阈长作出动态修正。
虽然队列中剩余消息长度不能够准确地表达节点的负载情况,但它确实在某种程度上是对节点负载的一种近似反映。
根据确定出的成员队列负载状态,进行负载平衡调度,具体方法可采用集中式负载平衡调度,包括在系统节点中选举出一个主节点,其余系统节点作为从节点;
当某从节点上某成员队列中剩余消息长度L达到T+t时,主动上报主节点,主节点组播该信息,集群系统中所有节点收到该信息后,本地队列管理器将该队列状态标识为过载状态,对于其所在的消息队列组来说,该消息队列暂时不再可用。当在一段时间Ts内,该消息队列过载状态得不到改善,或者对于同一消息队列组内,可用消息队列数过少(过载消息队列占全部成员队列的比例达到设定的阈值),主节点就要采取相应的过载处理策略。对于时间Ts,可以根据经验值进行恰当选择,避免Ts过大时主节点不能及时进行过载处理,以及Ts选择过小时可能导致过载处理过于频繁增加系统额外开销的问题;当主节点自身发生过载现象时,其队列管理器根据所有消息队列的负载状态,评判出当前负载较轻的节点,作为新的主节点;当某过载队列中剩余消息长度L下降到(T-t)时,主动上报主节点,主节点组播该消息,集群所有节点收到该消息后,本地队列管理器将该消息队列状态标识为轻载状态,对于其所在的消息队列组来说,该消息队列恢复可用。
集中式负载平衡调度的主要流程参见图4,包括①从节点过载/轻载时上报消息主节点;②主节点组播负载情况变化消息或发起负载迁移;③在过载消息队列中和轻载消息队列中进行负载迁移(负载迁移为一种过载处理策略);④主节点自身过载时重新选举新的主节点。
主节点采取的相应的过载处理策略,包括一、负载迁移当从节点中的成员队列的负载状态为过载状态时,上报过载消息给主节点;主节点将该成员队列中剩余的部分或全部消息迁移到所属消息队列组中的负载状态为轻载状态的消息队列中。为了避免“颠簸现象”,可以先采取部分迁移,只将该过载队列中超过阈值T部分的消息进行迁移,迁移成功后,两个队列都基本处于平衡状态。若之前的过载队列在随后的一段时间Tf内,消息处理速度依然缓慢,没有进入轻载状态,再对剩余的消息进行全部迁移。
负载迁移能动态改变系统的负载分布,支持系统动态负载平衡,合理有效地利用资源,提高系统整体性能和系统高可用性。
二、利用队列组管理器来实现过载处理负载迁移虽然能够很好地处理队列过载现象,但频繁的负载迁移会增加系统的额外开销。因此,当需要进行过载处理时,可以先尝试利用队列组管理器来实现过载处理,在没有取得较好效果的情况下,再进行负载迁移。
利用队列组管理器来实现过载处理的具体方式包括1)动态变换队列组任务分配策略根据当前负载情况重新选择一种合适的任务分配策略。例如,当采取本地优先策略的消息队列组出现某几个节点负载过重的情况,可以将任务分配策略设置为均衡分配策略,缓解当前过载节点的压力;当采取均衡分配策略的消息队列组的成员队列普遍轻载时,可以采取本地优先策略以减少网络通信量;当采取多播策略的消息队列组的成员队列负载普遍负载较重时,可以适当降低高可用性要求,减少成员队列数量,当负载情况好转时,重新增加成员队列数量,提高其高可用性。
具体实用中,在系统节点中选举出一个主节点;当主节点统计出负载较重的成员队列占全部成员队列的比例达到设定的阈值时,通知队列组管理器变换任务分配策略。
2)动态增加参与任务的节点数由于对任务量估计不足,参与任务的节点数较少,或者参与任务的节点当前负载普遍较重,导致消息队列组内成员队列过载现象严重,主节点可以通知部分负载较轻的节点参与当前任务分配,减轻当前成员的任务量。
例如当主节点统计出负载较重的成员队列占全部成员队列的比例达到设定的阈值时,由主节点选择出当前负载较轻的一个轻载节点,并通知给队列组管理器;
队列组管理器将该轻载节点中设置的消息队列加入到当前任务的消息队列组中参与任务分派。
3)在轻载节点增加消息队列数量由于各节点处理能力存在差异,当系统运行一段时间后,某些节点的负载很重,而另外一些节点却是空闲的,这时,可以通过在轻载节点增加消息队列数量,并将该轻载节点中的全部消息队列加入到当前任务中参与任务分派,使得轻载节点增加任务轮转机会,以提高该节点处理的任务量。
4)过载节点退出消息队列组若某成员队列长期处于过载状态,反映其所在节点负载情况过于严重,应该考虑将该节点退出消息队列组,否则可能成为整个任务执行的瓶颈。
例如当某个成员队列处于过载状态的时长达到设定的阈值时,主节点将该成员队列中存储的消息迁移到所属消息队列组中的负载状态为轻载状态的消息队列中,并通知队列组管理器将该成员队列所在的过载节点退出当前任务分配;队列组管理器将该过载节点中已加入到当前任务的全部消息队列从消息队列组中删除。
综上所述,本发明通过在系统节点中设置消息队列;由系统中的队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从消息队列组中选择成员队列参与任何分派。因此,本发明可以根据各系统节点的当前负载状况,利用队列组管理器采用对应的任务分配策略进行任务分派,选择负载相对较轻的系统节点进行任务处理,实现用户应用级负载平衡。
本发明将消息队列组中各成员队列中的剩余消息长度作为评价当前节点负载的主要依据,通过基于队列的阈值阈长模型实时监控分布式系统下各成员队列的负载情况,并采用集中式调度进行负载信息搜集和负载平衡;在过载处理中,除了采用负载迁移策略外,还优先根据队列组管理的特点,通过动态修改任务分配策略和系统节点的加入/退出来实现负载平衡。因此,采用本发明的负载平衡方法实现简单,系统额外开销小,能有效改善动态任务的分配和调度,增强了动态负载平衡的自适应能力。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种集群消息传送方法,应用于分布式集群系统,其特征在于,包括在系统中设置队列组管理器,在系统节点中设置消息队列;由队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将当前接收的消息发送到选择出的成员队列中,等待接收进程处理。
2.如权利要求1所述的方法,其特征在于,在系统节点中设置至少一个消息队列;所述队列组管理器指定至少一个节点中的至少一个消息队列组成所述消息队列组;且给每一个消息队列和消息队列组设置系统内唯一标识。
3.如权利要求1所述的方法,其特征在于,所述队列组管理器采用任务轮转方式从所述消息队列组中选择出一个成员队列。
4.如权利要求3所述的方法,其特征在于,当成员队列中存在本地成员队列时,优先选择本地成员队列。
5.如权利要求4所述的方法,其特征在于,当存在多个本地成员队列时,采用任务轮转方式选择出一个本地成员队列;或者选择具有最大可用空间的本地成员队列。
6.如权利要求1所述的方法,其特征在于,所述根据预定的任务分配策略,从所述消息队列组中选择成员队列保存消息,具体包括选择所述消息队列组中可用空间足够存储当前消息的全部成员队列,将接收的消息多播给选择出的成员队列。
7.如权利要求1所述的方法,其特征在于,还包括根据选择出的所述成员队列中的剩余消息长度确定成员队列的当前负载状态为轻载状态、平衡状态或过载状态;根据确定出的成员队列的当前负载状态,进行负载平衡调度。
8.如权利要求7所述的方法,其特征在于,所述根据成员队列中的剩余消息长度确定其当前负载状态,具体包括设置队列处理能力阈值T和阈长t,若成员队列中的剩余消息长度小于等于阈值T和阈长t的差值,则确定该成员队列的负载状态为轻载状态;若成员队列中的剩余消息长度大于阈值T和阈长t的差值且小于阈值T和阈长t的和值,则确定该成员队列的负载状态为平衡状态;若成员队列中的剩余消息长度大于等于阈值T和阈长t的和值,则确定该成员队列的负载状态为过载状态。
9.如权利要求8所述的方法,其特征在于,所述根据确定出的成员队列负载状态,进行负载平衡调度,具体包括在系统节点中选举出一个主节点,其余系统节点作为从节点;当从节点中的成员队列的负载状态为过载状态时,上报过载消息给主节点;所述主节点将该成员队列中存储的部分或全部消息迁移到所属消息队列组中的负载状态为轻载状态的消息队列中。
10.如权利要求9所述的方法,其特征在于,在初始化选举主节点时,选择当前负载最轻的节点作为主节点;若当前主节点中的成员队列为过载状态,则选择出一个成员队列为轻载状态的从节点作为新的主节点。
11.如权利要求7所述的方法,其特征在于,所述根据确定出的成员队列的当前负载状态,进行负载平衡调度,具体包括在系统节点中选举出一个主节点;当主节点统计出负载较重的成员队列占全部成员队列的比例达到设定的阈值时,通知所述队列组管理器变换任务分配策略。
12.如权利要求7所述的方法,其特征在于,所述根据确定出的成员队列负载状态,进行负载平衡调度,具体包括在系统节点中选举出一个主节点;当负载较重的成员队列占全部成员队列的比例达到设定的阈值时,由所述主节点选择出当前负载较轻的一个轻载节点,并通知所述队列组管理器将该轻载节点加入当前任务分配;所述队列组管理器将所述轻载节点中设置的消息队列加入到当前任务的消息队列组中。
13.如权利要求7所述的方法,其特征在于,所述根据确定出的成员队列负载状态,进行负载平衡调度,具体包括在系统节点中选举出一个主节点;当某个成员队列处于过载状态的时长达到设定的阈值时,所述主节点将该成员队列中存储的消息迁移到所属消息队列组中的负载状态为轻载状态的消息队列中,并通知所述队列组管理器将该成员队列所在的过载节点退出当前任务分配;所述队列组管理器将所述过载节点中已加入到当前任务的全部消息队列从所述消息队列组中删除。
14.一种分布式集群系统,包括若干个系统节点,其特征在于,至少一个系统节点中包括设置的至少一个消息队列;所述系统中还包括队列组管理器,用于创建/删除完成任务的消息队列组,指定加入或离开队列组的消息队列;并接收任务发送进程发送的消息,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将接收的消息发送到选择出的成员队列中。
15.如权利要求14所述的系统,其特征在于,在设置有消息队列的系统节点中还包括队列管理器,用于接收发送方发送的消息,保存到本节点消息队列中或通过各系统节点之间的可靠有序通信将消息发送到目的节点的队列管理器处理,并管理系统中全部消息队列的全局信息。
全文摘要
本发明公开了一种集群消息传送方法,包括在系统中设置队列组管理器,在系统节点中设置消息队列;由队列组管理器指定共同完成当前任务的多个消息队列组成消息队列组;当队列组管理器接收到当前任务的发送进程发送的消息后,根据预定的任务分配策略,从所述消息队列组中选择成员队列,将当前接收的消息发送到选择出的成员队列中,等待接收进程处理。本发明还公开了相应的分布式集群系统。采用本发明能增强系统动态负载平衡的自适应能力。
文档编号H04L12/18GK101014002SQ20061016582
公开日2007年8月8日 申请日期2006年12月12日 优先权日2006年12月12日
发明者张少林, 吴俊敏 申请人:华为技术有限公司, 中国科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1