首页> 中国专利> 一种基于消息中间件的分布式任务调度方法及系统

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

摘要

本发明公开了一种基于消息中间件的分布式任务调度方法及系统,属于分布式系统的任务调度领域。本发明采用消息队列的方式进行分布式任务的调度,首先将待执行的任务保存到主节点的任务队列中,然后通过负载均衡将任务均衡地分配到主节点下的可用子节点中,由子节点启动各自独立的任务进程执行任务。在任务的调度执行过程中,通过监控节点对主节点和子节点的状态进行实时监控,当出现故障时,将待执行的任务或正在执行的任务切换到备用主节点或可用子节点中。通过本发明所述的方法及系统,保证了任务之间的独立性,提高了任务执行的效率。故障切换机制进一步保证了任务调度执行的可靠性。

著录项

  • 公开/公告号CN102521044A

    专利类型发明专利

  • 公开/公告日2012-06-27

    原文格式PDF

  • 申请/专利权人 北京拓明科技有限公司;

    申请/专利号CN201110453910.1

  • 发明设计人 包博远;许新科;李永利;常青;

    申请日2011-12-30

  • 分类号G06F9/48(20060101);G06F9/50(20060101);

  • 代理机构北京天悦专利代理事务所(普通合伙);

  • 代理人田明;任晓航

  • 地址 100011 北京市西城区黄寺大街26号德胜置业大厦1号楼三层

  • 入库时间 2023-12-18 05:43:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-12-25

    授权

    授权

  • 2012-09-05

    实质审查的生效 IPC(主分类):G06F9/48 申请日:20111230

    实质审查的生效

  • 2012-06-27

    公开

    公开

说明书

技术领域

本发明涉及分布式系统的任务调度领域,具体涉及一种基于消息中间件 的分布式任务调度方法及系统。

背景技术

随着计算机应用范围的日益扩大,分布式实时系统应用越来越广泛。其 中,对任务调度的问题是分布式实时系统一个关键的问题。合理的分布式实 时系统的任务调度算法对发挥系统的并行性能、保证实时任务的可调度性、 以及保持网络的负载平衡都具有非常重要的意义。

在现有的任务调度框架中,Quartz调度提供了简单而强大的任务调度机 制,Quartz允许开发人员灵活地定义触发器的调度时间,并可以对触发器和 任务进行关联映射,如可以根据时间间隔(或天)来调度作业。它实现了作 业和触发器的多对多关系,另外,Quartz还提供了组件的监听器和插件,可 以通过配置作业和触发器为全局监听或者是特定于作业和触发器的监听。可 以通过Quartz来执行一个作业而创建简单的或复杂的调度。但是利用Quartz 进行任务调度时,还是存在以下缺点:

1)单机版单进程应用,一旦发生宕机的情况,无法确保任务正确被触发;

2)由于是单进程应用,在任务数量过高时会产生内存溢出的风险,执行 效率低;

3)容错性差,不存在故障切换的机制;

而上述缺点的存在,使得单一线性的任务调度系统越来越不能够满足现 有的业务需求,本发明正是针对上述问题,在包含了Quartz所有特性的基础 上,提供了一种基于消息中间件的分布式任务调度方法,保证任务调度执行 的可靠性,并提供了故障切换机制,提高任务执行的效率。

发明内容

针对现有技术中存在的缺陷,本发明的目的在于提供一种基于消息中间 件的分布式任务调度方法及系统,保证任务调度执行的可靠性,提高任务执 行的效率。

为实现上述目的,本发明采用的技术方案如下:

一种基于消息中间件的分布式任务调度方法,包括以下步骤:

(1)将待处理的任务保存到主节点的任务队列中;

(2)将任务队列中的任务通过消息中间件由负载均衡管理器均衡分配到 主节点下的可用子节点中;由负载均衡器均衡分配的具体方式为:

a.主节点获取其列表下的一个可用子节点,并向该子节点发送请求,查 看该子节点是否可用;

b.子节点接收到主节点的请求,将其执行状态回复主节点;

c.主节点接收到回复信息,如果子节点可用,则将任务分配到该子节点; 如果子节点不可用,则返回步骤a;

(3)启动子节点的任务进程,由子节点的目标主机执行子节点的任务。

进一步,如上所述的一种基于消息中间件的分布式任务调度方法,该方 法通过设置监听节点来监听主节点和子节点的心跳信号,通过心跳信号判断 主节点和子节点是否正常。

进一步,如上所述的一种基于消息中间件的分布式任务调度方法,步骤 a中,判断子节点是否可用的具体方式为:

①判断子节点的心跳信号是否正常,若是则进入步骤b;若否则子节点 不可用;

②查看子节点上正在执行的任务个数是否达到子节点的上限,若是则子 节点不可用;若否则子节点可用。

进一步,如上所述的一种基于消息中间件的分布式任务调度方法,监听 节点将第一个报上心跳信号的主节点指定为任命主节点,其它主节点为备用 主节点。

进一步,如上所述的一种基于消息中间件的分布式任务调度方法,当执 行任务的子节点的目标主机发生故障时,将任务切换到子节点的其它目标主 机上执行;当执行任务的子节点发生故障时,将任务切换到其它可用子节点 上执行;当任命主节点发生故障时,启用备用主节点分配任务。

再进一步,如上所述的一种基于消息中间件的分布式任务调度方法,任 命主节点与备用主节点中设有定时器,根据定时器的触发时间主节点将任务 队列中的任务分配到其下的可用子节点上。

更进一步,如上所述的一种基于消息中间件的分布式任务调度方法,步 骤(2)中,所述消息中间件的消息头中包括用于指定接收消息的子节点名称、 用于指定消息类型的消息编号和消息的有效负载类型。

一种基于消息中间件的分布式任务调度系统,包括:

任务保存模块:用于将待处理的任务保存到主节点的任务队列中;

任务调度模块:用于将任务队列中的任务通过消息中间件分配到主节点 下的可用子节点中:所述任务调度模块包括用于将任务均衡分配到主节点下 的多个可用子节点的负载均衡器;

任务执行模块:用于启动子节点的任务进程,由子节点的目标主机执行 子节点的任务。

进一步,如上所述的一种基于消息中间件的分布式任务调度系统,所述 任务调度模块还包括用于主节点或者子节点发生故障时将任务切换到备用主 节点或其它子节点的故障切换管理器。

再进一步,如上所述的一种基于消息中间件的分布式任务调度系统,该 系统还包括用于管理任务并通过发送状态请求命令监控任务执行状态的前台 用户接口模块,以及用于接受前台用户接口模块发送的状态请求命令,并生 成状态请求命令的响应后发送到前台用户接口模块。

本发明的效果在于:本发明所述的方法及系统,在现有的Quartz调度的 基础上,采用消息队列的方式进行分布式的通信,利用消息中间件进行消息 的路由,通过负载均衡技术合理的将任务分配到空闲的节点上执行,从而提 高了系统运行性能。此外,本发明还提供了故障切换机制,最大限度的保证 了系统的可靠性和稳定性,提高了任务执行的效率。

附图说明

图1为具体实施方式中基于消息中间件的分布式任务调度系统的结构框 图;

图2为具体实施方式中基于消息中间件的分布式任务调度方法的流程 图;

图3为具体实施方式中平台管理模块的结构示意图;

图4为具体实施方式中分布式任务调度模块及执行模块的结构示意图;

图5为具体实施方式中负载均衡管理器的工作示意图;

图6为具体实施方式中故障切换管理器的工作示意图;

图7为具体实施方式中分布式任务调度系统启动及初始化的流程图;

图8为具体实施方式中任务分配处理流程图;

图9为具体实施方式中主节点故障切换流程图;

图10为具体实施方式中子节点故障切换流程图;

图11为具体实施方式中系统增加主节点的流程图;

图12为具体实施方式中系统增加子节点的流程图。

具体实施方式

下面结合说明书附图与具体实施方式对本发明做进一步的详细说明。

图1示出了本发明一种基于消息中间件的分布式任务调度系统的结构框 图,该系统主要包括以下模块:

前台用户接口模块11:用于管理任务并通过发送状态请求命令监控任务 执行状态;

平台管理模块12:用于接受前台用户接口模块所发送的状态请求命令, 并生成响应后将响应发送到用户接口模块;

任务保存模块13:用于将待处理的任务保存到任务调度模块中主节点的 任务队列中;

任务调度模块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)首先,查看子节点心跳信号是否正常,监控节点会定时向主节点报告 当前存活的子节点(心跳正常),如果子节点心跳不正常说明子节点出现故 障不可用。在正常的情况下,进行进一步判断;

2)子节点上正在运行的任务是否已达到该节点的任务上限标准。每个子 节点在启动时会指定该节点能够同时启动几个任务进程,如果当前已经达到 设定的上限则不继续接受任务,需要等待某个正在执行的任务结束后才继续 接受新任务。

主节点进行任务分配时,由负载均衡管理器将任务均衡分配到可用子节 点的具体过程如下:

主节点中存在一个FIFO(先入先出)链表队列,用于维护当前存活的子节 点名称(心跳信号正常),这些子节点信息是监控节点定期向主节点发送的。 该队列的头部元素即最早进入队列的子节点,队列的尾部元素即是后进入队 列的子节点。新的元素插入到队列的尾部,队列检索操作从队列头部获得元 素。主节点在向子节点发送任务时,首先会从队列头部获取一个可用的元素, 即子节点名称并随后将其重新添加到队列的尾部。主节点向选定的子节点发 送握手请求,询问子节点是否可以接受新任务。子节点接到请求后根据子任 务进程的执行情况判断是否接受新任务并将结果回复给主节点。主节点接受 回馈,如果握手失败就重复以上步骤,重新从队列头部取出下一个可用的子 节点。如果握手成功就向子节点发送任务信息。

本系统采用消息队列的方式进行分布式进程间通信。利用消息中间件(MOM) 进行消息的路由,使用统一标准的JMS规范进行编程从而保证了系统的可移植 性,降低应用程序与MOM的耦合性。本系统还提供了一套标准的数据传递模型, 主要包括消息头和有效负载两部分,其中消息头提供了消息有关的元数据,包 括如下信息:

①目标节点名(NODE_ID):用于指定接受消息的节点名称;

②消息编号(MSG_ID):用于指定消息类型,编码可以采用表1中的方式:

表1

本系统中所采用的消息编号及其传输模型如表2所示:

表2

③有效负载类型(MSG_TYPE):用于指定有效负载的实际类型,JMS规范 中包括了TextMessage,StreamMessage,MapMessage,ObjectMessage, BytesMessage等五种类型,如ObjectMessage用于传送任务,即传送Object 对象。

步骤S23:启动子节点任务进程执行任务。

启动子节点的任务进程,由子节点的目标主机执行子节点的任务。考虑 到系统的稳定性以及任务运行时内存占用量等情况,子节点为任务单元启动 一个独立的工作进程来执行相应的任务。

在任务的调度执行过程中,当执行任务的子节点的目标主机发生故障时, 故障切换管理器会将任务切换到子节点的其它目标主机上执行,当执行任务 的子节点发生故障时,将任务切换到其它可用子节点上执行;当任命主节点 发生故障时,启用备用主节点分配任务。定时器在主节点中根据触发时间主 节点将任务分配到子节点上,子节点接受任务信息,并根据任务信息中描述 的任务执行主路径、参数等相关信息启动任务子进程。

为了更好的理解本发明,下面对本发明所述系统及方法的整个工作流程 进行更为详细的说明。

图7示出了分布式任务调度系统及其初始化的流程图,在启动阶段,监 控节点(Monitor)对主节点(Root)及子节点(Leaf)的心跳信号进行监控, 可以采用由主节点和子节点定时向监控节点定时发送心跳信号的方式进行监 控。监控节点将第一个报上心跳的主节点设为任命主节点,其它的设为备用 主节点,任命主节点即为当前主节点,主节点启动定时器根据设置的触发时 间自动派发任务。主节点在进行任务的调度分配时,会首先将要执行的任务 信息同步到备用主节点中,然后再通过负载均衡后将任务分配到可用子节点 中,由子节点启动各自的任务进程执行任务,同时会对任务执行的状态进行 监控,生成日志信息,记录任务的状态,具体流程图如图8所示。

本发明还提供了故障切换机制,当监控节点监听发现任命主节点的心跳 信号异常即任命主节点出现故障时,会启动备用主节点,并将备用主节点设 定为任命主节点,注册为当前主节点,由于在原任命主节点进行任务调度时, 把待执行任务同步到了备用主节点,所以备用主节点成为新的任命主节点后, 只需要启动定时器,把原任命主节点的任务切换到备用主节点执行即可,具 体流程如图9所示。当监控节点通过监听心跳信号发现子节点发生故障时, 监控节点更新当前可用子节点列表,通知主节点此故障子节点的信息,终止 此故障子节点的任务,将待执行的任务切换到其它子节点执行,流程图如图 10所示。

此外,通过本发明所述的分布式任务调度方法及系统进行任务调度时, 可以根据需要,通过增加主节点或者子节点来进一步保证任务执行的效率及 可靠性,新增主节点或者子节点的流程图如图11与图12所示,增加主节点 后,如果系统中已经存在任命主节点,则将新增主节点设置为备用主节点, 如果不存在任命主节点,则将新增主节点设置为任命主节点。增加子节点时, 只需要将新增的子节点信息更新子节点信息列表中即可。在任务调度中,如 果任务方案需要进行更新,则将更新的信息发送到该任务的任命主节点中, 更新任命主节点的定时器中的方案计划列表中。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本 发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要 求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号