任务调度方法及系统的制作方法_3

文档序号:9708154阅读:来源:国知局
从任务数据库中获取属于自身的预设时间段内的待处理任务,并将待处理任务存储在任务资源池中。
[0049]S220,当调度节点按照指定时间检测调度集群中的调度节点数量有更新时,该调度节点重新获取待处理任务。
[0050]调度节点启动时,会启动以下四种线程:心跳线程、任务拉取线程、丢失任务处理线程和任务处理线程;
[0051]其中,心跳线程用于周期性刷新和查询任务数据库中存储的调度节点的信息。当检测到任务数据库中存在超过预设数量个心跳周期未更新的调度节点时,确定该调度节点为异常节点。该异常节点被调度集群中的其它调度节点感知到。
[0052]任务拉取线程根据联模求余算法计算得到的调度节点的待处理任务与调度集群中的调度节点的总数有关,当调度集群中调度节点的总数发生变化时,各个调度节点对应的待处理任务可能有所变化,因此,当调度节点的总数变化后,重新从任务数据库中拉取待处理的任务。
[0053]丢失任务处理线程用于检测超过执行时间仍未执行的任务,即未触发任务。
[0054]任务处理线程,用于按照任务的执行时间触发任务资源池中的任务。可以根据调度节点所在服务器的处理能力确定该任务处理线程的启动数量,例如,可以配置为200个,即可以同时触发200个任务,保证任务资源池中的任务高效并发触发。
[0055]S230,调度节点检测任务数据库中是否存在属于自身的未触发任务;未触发任务是超过任务的执行时间但未执行的任务。
[0056]调度节点的总数发生变化后,可能会导致某些要触发的任务没有被任何调度节点拉入自身的任务资源池中,即任何调度节点都不会调度该任务,导致该任务丢失。这种任务能够被调度节点中的丢失任务处理线程发现并立即触发。
[0057]丢失任务处理线程也具有从任务数据库中拉取任务的功能,丢失任务处理线程从任务数据库中获取属于本调度节点的任务,并根据任务计算公式计算出任务的执行时间。然后,根据各个任务的执行时间检测是否存在超过执行时间未执行的任务,如果存在,则认为该任务是未触发任务。检测到未触发任务后立即触发未触发任务,保证任务不会丢失。
[0058]S240,当检测到存在未触发任务时,向业务节点发送任务触发消息。
[0059]S250,业务节点根据所述任务触发消息所包含的任务标识和当前执行时间,更新所述任务执行数据库内的任务;
[0060]当调度节点的总数发生变化后,还可能导致某个任务同时存在于两个调度节点的任务资源池中,即存储重复任务。然后,由业务节点检测重复任务,业务节点会维护一个任务执行数据库,任务执行数据库中存储被调度节点触发后由业务节点处理的任务。
[0061]当业务节点首次执行某个任务时,任务执行数据库中并没有该任务,此时,需要根据业务节点任务触发消息向任务执行数据库中写入该任务的任务标识和当前执行时间。任务写入任务执行数据库后,该任务才会被业务节点处理。
[0062]如果该任务是周期性任务,当在下一个周期再次执行该任务时,此时该任务对应的当前执行时间与上一周期的执行时间不同,因此,需要根据本周期接收到的任务触发消息将任务执行数据库中该任务的执行时间更新为本周期的执行时间,只有更新成功后业务节点才会执行该任务。
[0063]如果存在重复任务,业务节点会接收到两个相同的任务触发消息,当业务节点根据先接收到的任务触发消息(或者,同时接收到的两个任务触发消息中的任意一个)更新任务执行数据库中的任务,并向业务节点返回更新成功响应消息。由于两个任务触发消息中的当前执行时间相同,即另一条触发消息的当前执行时间与任务执行数据库中相同任务标识的任务对应的当前执行时间相同,任务执行数据库不会根据另一条任务触发消息更新对应的任务,向业务节点返回更新失败响应消息。
[0064]具体的,业务节点接收到任务触发消息后,先判断所述任务执行数据库中是否存在所述任务标识对应的任务;如果所述任务执行数据库中不存在所述任务标识对应的任务,所述业务节点在所述任务执行数据库中添加所述任务标识对应的任务,且所述任务标识对应的任务的执行时间为所述当前执行时间;
[0065]如果所述任务执行数据库中存在所述任务标识对应的任务,所述业务节点判断所述任务标识对应任务的执行时间是否是所述当前执行时间;如果所述任务标识对应任务的执行时间不是所述当前执行时间,则将所述任务的执行时间更新为所述当前执行时间,并确定所述任务执行数据库更新成功;如果所述任务标识对应任务的执行时间是所述当前执行时间,则确定所述任务执行数据库更新失败。
[0066]S260,当所述任务执行数据库更新成功后,所述业务节点处理所述任务标识对应的任务。
[0067]当业务节点接收到任务执行数据库任务更新成功的响应消息后,处理任务标识对应的任务。
[0068]S270,当所述任务执行数据库更新失败后,所述业务节点放弃所述任务触发消息。
[0069]本实施例提供的任务调度方法,当调度集群所包含的调度节点总数发生变化时,调度节点检测到未触发任务后立即触发,保证任务不会丢失。业务节点通过更新任务执行数据库中的任务的方式,避免重复任务,从而避免使用共享锁机制也能够解决任务重复执行的问题。而且,不使用共享锁机制能够降低等待资源,提高任务并发处理性能。
[0070]本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0071]本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
【主权项】
1.一种任务调度方法,应用于任务调度系统中,其特征在于,所述任务调度系统包括任务数据库、调度集群和业务集群;其中,所述调度集群包括至少一个调度节点,
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1