一种基于消息中间件的分布式任务调度方法及系统的制作方法

文档序号:6444348阅读:534来源:国知局
专利名称:一种基于消息中间件的分布式任务调度方法及系统的制作方法
技术领域
本发明涉及分布式系统的任务调度领域,具体涉及一种基于消息中间件的分布式任务调度方法及系统。
背景技术
随着计算机应用范围的日益扩大,分布式实时系统应用越来越广泛。其中,对任务调度的问题是分布式实时系统一个关键的问题。合理的分布式实时系统的任务调度算法对发挥系统的并行性能、保证实时任务的可调度性、以及保持网络的负载平衡都具有非常重要的意义。在现有的任务调度框架中,Quartz调度提供了简单而强大的任务调度机制, Quartz允许开发人员灵活地定义触发器的调度时间,并可以对触发器和任务进行关联映射,如可以根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,另外,Quartz还提供了组件的监听器和插件,可以通过配置作业和触发器为全局监听或者是特定于作业和触发器的监听。可以通过Quartz来执行一个作业而创建简单的或复杂的调度。但是利用Quartz进行任务调度时,还是存在以下缺点1)单机版单进程应用,一旦发生宕机的情况,无法确保任务正确被触发;2)由于是单进程应用,在任务数量过高时会产生内存溢出的风险,执行效率低;3)容错性差,不存在故障切换的机制;而上述缺点的存在,使得单一线性的任务调度系统越来越不能够满足现有的业务需求,本发明正是针对上述问题,在包含了 Quartz所有特性的基础上,提供了一种基于消息中间件的分布式任务调度方法,保证任务调度执行的可靠性,并提供了故障切换机制,提高任务执行的效率。

发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于消息中间件的分布式任务调度方法及系统,保证任务调度执行的可靠性,提高任务执行的效率。为实现上述目的,本发明采用的技术方案如下一种基于消息中间件的分布式任务调度方法,包括以下步骤(1)将待处理的任务保存到主节点的任务队列中;(2)将任务队列中的任务通过消息中间件由负载均衡管理器均衡分配到主节点下的可用子节点中;由负载均衡器均衡分配的具体方式为a.主节点获取其列表下的一个可用子节点,并向该子节点发送请求,查看该子节点是否可用;b.子节点接收到主节点的请求,将其执行状态回复主节点;C.主节点接收到回复信息,如果子节点可用,则将任务分配到该子节点;如果子节点不可用,则返回步骤a;
(3)启动子节点的任务进程,由子节点的目标主机执行子节点的任务。进一步,如上所述的一种基于消息中间件的分布式任务调度方法,该方法通过设置监听节点来监听主节点和子节点的心跳信号,通过心跳信号判断主节点和子节点是否正

巾ο进一步,如上所述的一种基于消息中间件的分布式任务调度方法,步骤a中,判断子节点是否可用的具体方式为①判断子节点的心跳信号是否正常,若是则进入步骤b ;若否则子节点不可用;②查看子节点上正在执行的任务个数是否达到子节点的上限,若是则子节点不可用;若否则子节点可用。进一步,如上所述的一种基于消息中间件的分布式任务调度方法,监听节点将第一个报上心跳信号的主节点指定为任命主节点,其它主节点为备用主节点。进一步,如上所述的一种基于消息中间件的分布式任务调度方法,当执行任务的子节点的目标主机发生故障时,将任务切换到子节点的其它目标主机上执行;当执行任务的子节点发生故障时,将任务切换到其它可用子节点上执行;当任命主节点发生故障时,启用备用主节点分配任务。再进一步,如上所述的一种基于消息中间件的分布式任务调度方法,任命主节点与备用主节点中设有定时器,根据定时器的触发时间主节点将任务队列中的任务分配到其下的可用子节点上。更进一步,如上所述的一种基于消息中间件的分布式任务调度方法,步骤O)中, 所述消息中间件的消息头中包括用于指定接收消息的子节点名称、用于指定消息类型的消息编号和消息的有效负载类型。一种基于消息中间件的分布式任务调度系统,包括任务保存模块用于将待处理的任务保存到主节点的任务队列中;任务调度模块用于将任务队列中的任务通过消息中间件分配到主节点下的可用子节点中所述任务调度模块包括用于将任务均衡分配到主节点下的多个可用子节点的负载均衡器;任务执行模块用于启动子节点的任务进程,由子节点的目标主机执行子节点的任务。进一步,如上所述的一种基于消息中间件的分布式任务调度系统,所述任务调度模块还包括用于主节点或者子节点发生故障时将任务切换到备用主节点或其它子节点的故障切换管理器。再进一步,如上所述的一种基于消息中间件的分布式任务调度系统,该系统还包括用于管理任务并通过发送状态请求命令监控任务执行状态的前台用户接口模块,以及用于接受前台用户接口模块发送的状态请求命令,并生成状态请求命令的响应后发送到前台用户接口模块。本发明的效果在于本发明所述的方法及系统,在现有的Quartz调度的基础上, 采用消息队列的方式进行分布式的通信,利用消息中间件进行消息的路由,通过负载均衡技术合理的将任务分配到空闲的节点上执行,从而提高了系统运行性能。此外,本发明还提供了故障切换机制,最大限度的保证了系统的可靠性和稳定性,提高了任务执行的效率。


图1为具体实施方式
中基于消息中间件的分布式任务调度系统的结构框图;图2为具体实施方式
中基于消息中间件的分布式任务调度方法的流程图;图3为具体实施方式
中平台管理模块的结构示意图;图4为具体实施方式
中分布式任务调度模块及执行模块的结构示意图;图5为具体实施方式
中负载均衡管理器的工作示意图;图6为具体实施方式
中故障切换管理器的工作示意图;图7为具体实施方式
中分布式任务调度系统启动及初始化的流程图;图8为具体实施方式
中任务分配处理流程图;图9为具体实施方式
中主节点故障切换流程图;图10为具体实施方式
中子节点故障切换流程图;图11为具体实施方式
中系统增加主节点的流程图;图12为具体实施方式
中系统增加子节点的流程图。
具体实施例方式下面结合说明书附图与具体实施方式
对本发明做进一步的详细说明。图1示出了本发明一种基于消息中间件的分布式任务调度系统的结构框图,该系统主要包括以下模块前台用户接口模块11 用于管理任务并通过发送状态请求命令监控任务执行状态;平台管理模块12 用于接受前台用户接口模块所发送的状态请求命令,并生成响应后将响应发送到用户接口模块;任务保存模块I3 用于将待处理的任务保存到任务调度模块中主节点的任务队列中;任务调度模块14 用于将任务队列中的任务通过消息中间件分配到主节点下的可用子节点中;所述任务调度模块包括用于将任务均衡分配到主节点下的多个可用子节点的负载均衡器;任务执行模块15 用于启动子节点的任务进程,由子节点的目标主机执行子节点的任务。其中,前台用户接口模块11是通过web方式提供的一个友好的用户管理界面,通过该模块用户可以对任务进行管理,并监控当前任务执行情况。用户通过前台用户接口模块可以对任务进行实时的监控,查询任务的执行状态以及分配情况。这部分的实现流程是首先前台用户接口模块11向服务器端的平台管理模块12发送一个状态查询请求,平台管理模块12将该查询请求通过消息中间件发送一个查询命令到任务调度模块,通过任务调度模块得到当前正在运行的任务信息将最终响应通过平台管理模块转发到前台用户接口模块。平台管理模块12的主要职责是接受客户通过前台用户接口模块11发送的请求, 并调用相关的后台处理模块进行业务处理(任务调度模块),生成最终响应回复给客户,其工作示意图如图3所示,该模块主要用于处理方案管理请求、对需要执行的任务的相关状态进行任务执行状态的管理,包括任务方案计划管理、任务方案计划实例管理,以及节点状态监控管理(例如子节点是否正常)等。此模块被设计为一个请求控制器,作为用户接口与后台处理的桥梁,降低了系统的耦合性,使得系统更加灵活,增加了弹性。任务调度模块14和任务执行模块15为整个分布式任务调度系统的主要部分, 负责进行任务的分配及执行,其示意图如图4所示,首先待处理的任务保存到任务保存模块的主节点的任务队列中,然后由任务调度模块通过消息中间件分配到主节点下的子节点中。考虑到负载均衡和故障切换以及对采集和处理任务的分布式调度处理,在该模块还设置了用于将主节点任务队列中的任务均衡分配到其可用子节点中的负载均衡管理器,以及用于主节点或者子节点发生故障时将任务切换到备用主节点或其它子节点的故障切换管理器。负载均衡管理器及故障切换管理器的工作示意图分别如图5与图6所示,通过负载均衡管理器将待执行的多个任务调度分配到多个子节点中,在将任务分配到子节点后,由子节点的目标主机执行子节点的任务,当预期执行的目标主机发生故障时,故障切换管理器可以把任务切换到其它可用的目标主机上执行;同样如果是主节点发生故障,故障切换管理器会将主节点上的任务切换到备用主节点上,由备用主节点下的子节点执行任务。本发明所述的方法及系统中,任命主节点和备用节点的状态是实时同步的,与主节点维护着相同的子节点。基于上述的分布式任务调度系统,本发明还提供了一种基于消息中间件的分布式任务调度方法,流程图如图2所示,包括以下步骤步骤S21 将待处理的任务保存到主节点的任务队列中;将待处理的任务保存到任务保存模块中主节点的任务队列中。步骤S22 将任务队列中的任务分配到主节点下的可用子节点中;将任务队列中的任务通过消息中间件分配到主节点下的可用子节点中;通过消息中间件分配任务时,通过负载均衡管理器将任务均衡分配到主节点下的多个可用子节点中。在将任务分配到主节点下的可用子节点时,可以通过手动执行的方式(任务的手动执行方式是指通过前台手动配置任务并发送命令到平台管理模块,然后通过主节点负载平衡后分配到可用子节点),但在实际运行中,多采用自动执行的方式,在自动执行的情况下,通过在主节点设有任务定时器,任务分配时会自动按照定时器的触发时间将相关的任务分配到子节点上。本发明所述的分布式任务调度的实现采用了服务器集群cluster技术,如图4所示,同时考虑了负载均衡(Load balancing)和故障切换(Failover),对采集和处理任务进行分布式调度处理。在主节点的任务队列中有多个任务(任务A、B、C、D等)等待执行,经过负载均衡处理选择可用的节点,并通过消息中间件将任务派发到多个子节点上。在本发明的分布式任务调度系统中,共设有三种节点,监听节点,主节点,备用主节点和叶子节点(子节点)。其中,监听节点主要用于监听主节点和子节点的心跳信号,通过心跳信号是否正常来判断节点工作是否正常,并将第一个监听到的心跳信号的主节点指定为任命主节点,其它主节点作为备用主节点,此外,监听节点还用于提供可用叶子节点列表。主节点主要用于分配当前待执行的任务,通过负载均衡管理器进行负载均衡,以及通过故障切换管理器对于出现故障的主节点进行故障切换。备用节点主要用于备份子节点信息,作为主节点备份,用于故障切换。子节点主要用于执行具体任务以及更改任务执行状态。其中,判断子节点是否可用的具体方式如下1)首先,查看子节点心跳信号是否正常,监控节点会定时向主节点报告当前存活的子节点(心跳正常),如果子节点心跳不正常说明子节点出现故障不可用。在正常的情况下,进行进一步判断;幻子节点上正在运行的任务是否已达到该节点的任务上限标准。每个子节点在启动时会指定该节点能够同时启动几个任务进程,如果当前已经达到设定的上限则不继续接受任务,需要等待某个正在执行的任务结束后才继续接受新任务。主节点进行任务分配时,由负载均衡管理器将任务均衡分配到可用子节点的具体过程如下主节点中存在一个FIFO(先入先出)链表队列,用于维护当前存活的子节点名称 (心跳信号正常),这些子节点信息是监控节点定期向主节点发送的。该队列的头部元素即最早进入队列的子节点,队列的尾部元素即是后进入队列的子节点。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。主节点在向子节点发送任务时,首先会从队列头部获取一个可用的元素,即子节点名称并随后将其重新添加到队列的尾部。主节点向选定的子节点发送握手请求,询问子节点是否可以接受新任务。子节点接到请求后根据子任务进程的执行情况判断是否接受新任务并将结果回复给主节点。主节点接受回馈,如果握手失败就重复以上步骤,重新从队列头部取出下一个可用的子节点。如果握手成功就向子节点发送任务信息。本系统采用消息队列的方式进行分布式进程间通信。利用消息中间件(MOM)进行消息的路由,使用统一标准的JMS规范进行编程从而保证了系统的可移植性,降低应用程序与MOM的耦合性。本系统还提供了一套标准的数据传递模型,主要包括消息头和有效负载两部分,其中消息头提供了消息有关的元数据,包括如下信息①目标节点名(N0DE_ID)用于指定接受消息的节点名称;②消息编号(MSG_ID)用于指定消息类型,编码可以采用表1中的方式
编码规则MS G _消息负载类型_编号_消息类别固定消息负载类型编号消息类别MSGC:命令消息同一负载类型顺次编号S:发送T:任务消息A:回复S:同步消息表1本系统中所采用的消息编号及其传输模型如表2所示
权利要求
1.一种基于消息中间件的分布式任务调度方法,包括以下步骤(1)将待处理的任务保存到主节点的任务队列中;(2)将任务队列中的任务通过消息中间件由负载均衡管理器均衡分配到主节点下的可用子节点中;由负载均衡器均衡分配的具体方式为a.主节点获取其列表下的一个可用子节点,并向该子节点发送请求,查看该子节点是否可用;b.子节点接收到主节点的请求,将其执行状态回复主节点;c.主节点接收到回复信息,如果子节点可用,则将任务分配到该子节点;如果子节点不可用,则返回步骤a;(3)启动子节点的任务进程,由子节点的目标主机执行子节点的任务。
2.如权利要求1所述的一种基于消息中间件的分布式任务调度方法,其特征在于该方法通过设置监听节点来监听主节点和子节点的心跳信号,通过心跳信号判断主节点和子节点是否正常。
3.如权利要求2所述的一种基于消息中间件的分布式任务调度方法,其特征在于步骤a中,判断子节点是否可用的具体方式为①判断子节点的心跳信号是否正常,若是则进入步骤b;若否则子节点不可用;②查看子节点上正在执行的任务个数是否达到子节点的上限,若是则子节点不可用; 若否则子节点可用。
4.如权利要求2所述的一种基于消息中间件的分布式任务调度方法,其特征在于监听节点将第一个报上心跳信号的主节点指定为任命主节点,其它主节点为备用主节点。
5.如权利要求4所述的一种基于消息中间件的分布式任务调度方法,其特征在于当执行任务的子节点的目标主机发生故障时,将任务切换到子节点的其它目标主机上执行; 当执行任务的子节点发生故障时,将任务切换到其它可用子节点上执行;当任命主节点发生故障时,启用备用主节点分配任务。
6.如权利要求4所述的一种基于消息中间件的分布式任务调度方法,其特征在于任命主节点与备用主节点中设有定时器,根据定时器的触发时间主节点将任务队列中的任务分配到其下的可用子节点上。
7.如权利要求1所述的一种基于消息中间件的分布式任务调度方法,其特征在于步骤O)中,所述消息中间件的消息头中包括用于指定接收消息的子节点名称、用于指定消息类型的消息编号和消息的有效负载类型。
8.一种基于消息中间件的分布式任务调度系统,包括任务保存模块用于将待处理的任务保存到主节点的任务队列中;任务调度模块用于将任务队列中的任务通过消息中间件分配到主节点下的可用子节点中所述任务调度模块包括用于将任务均衡分配到主节点下的多个可用子节点的负载均衡器;任务执行模块用于启动子节点的任务进程,由子节点的目标主机执行子节点的任务。
9.如权利要求8所述的一种基于消息中间件的分布式任务调度系统,其特征在于所述任务调度模块还包括用于主节点或者子节点发生故障时将任务切换到备用主节点或其它子节点的故障切换管理器。
10.如权利要求8或9所述的一种基于消息中间件的分布式任务调度系统,其特征在于该系统还包括用于任务管理并通过发送状态请求命令监控任务执行状态的前台用户接口模块,以及用于接受前台用户接口模块发送的状态请求命令,并生成状态请求命令的响应后发送到前台用户接口模块。
全文摘要
本发明公开了一种基于消息中间件的分布式任务调度方法及系统,属于分布式系统的任务调度领域。本发明采用消息队列的方式进行分布式任务的调度,首先将待执行的任务保存到主节点的任务队列中,然后通过负载均衡将任务均衡地分配到主节点下的可用子节点中,由子节点启动各自独立的任务进程执行任务。在任务的调度执行过程中,通过监控节点对主节点和子节点的状态进行实时监控,当出现故障时,将待执行的任务或正在执行的任务切换到备用主节点或可用子节点中。通过本发明所述的方法及系统,保证了任务之间的独立性,提高了任务执行的效率。故障切换机制进一步保证了任务调度执行的可靠性。
文档编号G06F9/48GK102521044SQ201110453910
公开日2012年6月27日 申请日期2011年12月30日 优先权日2011年12月30日
发明者包博远, 常青, 李永利, 许新科 申请人:北京拓明科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1