一种集群中的任务调度方法及装置与流程

文档序号:11133713阅读:279来源:国知局
一种集群中的任务调度方法及装置与制造工艺

本申请涉及计算机技术领域,尤其涉及一种集群中的任务调度方法及装置。



背景技术:

随着计算机技术和互联网技术的迅速发展,用户可以很容易地接入互联互联网,并向互联网上的服务器提交任务,则服务器可以通过执行用户提交的任务,为用户提供相应的服务。

在实际应用中,当用户数量十分庞大时,由于单台机器的处理能力有限,由单台机器构成的服务器可能不足以及时地执行大量用户提交的任务。在这种情况下,可以将多台机器组成合适规模的集群,由于集群的处理能力远远高于单台机器,因此,集群可以及时地执行大量用户提交的任务。

在现有技术中,集群可以通过任务数据库接收并保存用户提交的任务,当在集群中执行任务时,集群可以从任务数据库中获取到各待执行的任务中的至少一个任务,然后将所述任务随机分配给集群中的一台机器,由该机器执行所述任务。

但是,该机器在被分配到任务时,可能正在执行其他任务,这种情况下,被分配的任务需要等待所述其他任务执行完毕后,才能被该机器执行,由此可见这种任务调度方式降低了集群执行任务的效率。



技术实现要素:

本申请实施例提供一种集群中的任务调度方法和集群中的任务调度装置,用以解决现有技术中现有技术中的任务调度方式降低了集群执行任务的效率 的问题。

本申请实施例提供一种集群中的任务执行方法和集群中的任务执行装置,用以解决现有技术中现有技术中的任务调度方式降低了集群执行任务的效率的问题。

本申请实施例提供一种集群,用以解决现有技术中现有技术中的任务调度方式降低了集群执行任务的效率的问题。

本申请实施例提供的一种集群中的任务调度方法,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,所述方法包括:

所述任务调度机当接收到第一预设指令时,获取所述任务执行机的任务获取请求,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的;

所述任务调度机从任务数据库中获取待分配的任务;

所述任务调度机按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,以便于所述任务执行机当接收到第二预设指令时,执行分配给自己的任务。

本申请实施例提供的一种集群中的任务执行方法,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,所述方法包括:

所述任务执行机当接收到第二预设指令时,从任务数据库中获取分配给自己的任务,其中,所述任务是由所述任务调度机在接收到第一预设指令后,按照设定的分配规则,根据所述任务执行机发送给所述任务调度机的获取请求,分配给所述任务执行机的;

所述任务执行机执行获取的分配给自己的任务。

本申请实施例提供的一种集群中的任务调度装置,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,所述装置包括:

获取请求模块,用于当接收到第一预设指令时,获取所述任务执行机的任务获取请求,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的;

获取任务模块,用于从任务数据库中获取待分配的任务;

调度模块,用于按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,以便于所述任务执行机当接收到第二预设指令时,执行分配给自己的任务。

本申请实施例提供的一种集群中的任务执行装置,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,包括:

获取模块,用于当任务执行机接收到第二预设指令时,从任务数据库中获取分配给所述任务执行机的任务,其中,所述任务是由所述任务调度机在接收到第一预设指令后,按照设定的分配规则,根据所述任务执行机发送给所述任务调度机的获取请求,分配给所述任务执行机的;

执行模块,用于执行获取的分配给所述任务执行机的任务。

本申请实施例提供的一种集群,包括:按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机;其中,

所述任务调度机,用于当接收到第一预设指令时,获取所述任务执行机的任务获取请求,从任务数据库中获取待分配的任务,按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的;

所述任务执行机,用于当接收到第二预设指令时,从任务数据库中获取分配给自己的任务,执行获取的分配给自己的任务。

本申请实施例通过上述至少一种技术方案,任务执行机在空闲状态下可以向集群发送任务获取请求,相应的,任务调度机可以只将待执行任务向发送了任务获取请求的任务执行机,这样的话,由于所述任务执行机处于空闲状态,因此可以及时地执行分配给自己的任务,这种任务调度方式可以提高集群执行任务的效率。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部 分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的集群中的任务调度过程;

图2为本申请实施例提供的集群中的任务调度详细过程;

图3为本申请实施例提供的集群中的任务执行过程;

图4为本申请实施例提供的集群中的任务执行详细过程;

图5为实际应用中的一种实现了本申请实施例提供的任务调度方法和任务执行方法的集群架构图;

图6为本申请实施例提供的在图5的集群中进行任务调度和任务执行的工作流简图;

图7为本申请实施例提供的在实际应用中的任务状态转换图;

图8为本申请实施例提供的集群中的任务调度装置结构示意图;

图9为本申请实施例提供的集群中的任务执行装置结构示意图;

图10为本申请实施例提供的集群示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

在本申请实施例中,集群可以是基于特定框架的集群,所述特定框架包括但不限于模型视图控制器(Model View Controller,MVC)规范下的开发框架,例如,Spring框架、以Spring框架为核心,所开发出的诸如Sofa框架等其他的开发框架,等等。所述集群中可以包含多台机器,所述机器在集群中可以作为服务器使用,也可以作为终端或第三方设备使用。

所述集群可以是单独的一个集群,也可以是分布式系统中包含的多个集群中的某一个集群。本申请提供了在一个集群内的任务调度方法,所述任务调度方法既适用于单独的一个集群,也适用于分布式系统中包含的每个集群。

为了解决背景技术中的问题,本申请实施例可以将集群中的各机器组织为主从结构,其中,作为主的机器可以称为任务调度机,也可简称为主人(Master),作为从的机器可以称为任务执行机,也可简称为工人(Worker)。可以由任务调度机负责任务的分配和重试,以及管理任务状态等工作,可以由任务执行机执行任务,并可以向任务调度机汇报空闲情况,以使得任务可以尽可能被均衡地分配到各空闲的任务执行机上,这样的话,不仅可以提高集群执行任务的效率,还可以提高集群的负载均衡能力,以及还可以实现重试执行失败的任务、按照宏观时序执行任务和多调度策略等功能。下面进行详细阐述。

图1为本申请实施例提供的集群中的任务调度过程,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,具体包括以下步骤:

S101:所述任务调度机当接收到第一预设指令时,获取所述任务执行机的任务获取请求,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的。

在本申请对所述选举规则并不做限定,可以基于一种分布式应用程序协调服务(Zookeeper),选举任务调度机和任务执行机,也可以通过由集群中各机器进行自荐的形式,选举任务调度机和任务执行机,等等。下面进行简单说明。

假定基于Zookeeper进行选举。具体的,集群中的各机器可以分别在Zookeeper服务器上为自己注册一个节点(ZNode),Zookeeper服务器会为每个节点分配一个序列号,序列号最大节点对应的机器被选举作为任务调度机,其余的各机器可以分别作为一个任务执行机。

假定通过由集群中各机器进行自荐的形式选举。具体的,集群中的各机器可以比较网际协议(Internet Protocol,IP),IP地址最大的机器被选举作为任 务调度机,其余的各机器可以分别作为一个任务执行机。

需要说明的是,当集群规模较大时,一台任务调度机可能不足以负担整个集群的任务调度工作,在这种情况下,也可以根据上述选举方法,类似地选举出不止一台任务调度机,所述不止一台任务调度机可以相互协调、共同地负责集群的任务调度工作。本申请主要基于一个集群中选举出一台任务调度机的场景进行说明。

在本申请实施例中,任务执行机可以在空闲时的任意时刻或指定时刻向任务调度机发送任务获取请求,以请求任务调度机给所述任务执行机分配任务,任务调度机则可对所述任务获取请求进行相应的处理。

进一步的,在实际应用中,由于集群中的任务调度机的数量较多,因此,发送给任务调度机的任务获取请求的数量也较多。任务调度机可能不能即时地处理所有的任务获取请求,则任务调度机可以维护一个请求队列,通过该请求队列,接收和保存各任务执行机发送的任务获取请求。

进而,任务调度机可以持续地对请求队列中的各任务获取请求进行处理,对于这第一种处理方式,任务调度机可以不由定时器或者其他预设指令触发,而是自行开始处理;或者,任务调度机也可以按照设定的时间间隔,定时地对请求队列中的各任务获取请求进行处理,对于这第二种处理方式,任务调度机等待被定时器或者其他预设指令触发时处理任务获取请求。

在本申请实施例中,任务调度机可以是等待被第一预设指令触发时处理任务获取请求。其中,所述第一预设指令可以是预设定时器的定时指令,也可以是所述其他预设指令,本申请对发送第一预设指令的执行主体并不做限定,可以是集群中的指定机器(如任务调度机本身),也可以是集群外的机器(如中间件调度中心、Zookeeper服务器,等等)。

通过步骤S101,可以基于第一预设指令,便利地调节任务调度机对任务获取请求进行处理的时刻和节奏,可以提高任务调度机的工作效率,减少任务调度机处理资源的浪费。

S102:所述任务调度机从任务数据库中获取待分配的任务。

在本申请实施例中,任务调度机可以根据设定的任务获取规则,获取任务数据库中的全部、或者部分待分配的任务。在实际应用中,所述任务获取规则包括但不限以下两种:

第一种,任务调度机在执行完步骤S101后,可以去获取任务数据库中的全部待分配的任务。

第二种,任务调度机在执行完步骤S101后,可以根据在步骤S101中获取的任务获取请求的数量,从任务数据库中获取匹配数量的待分配的任务即可。例如,获取的待分配的任务的数量可以与获取的任务获取请求的数量相同,获取的待分配的任务的数量可以是获取的任务获取请求的数量的整倍数,等等。

需要说明的是,在任务调度机不是根据获取的任务获取请求,从任务数据库中获取待分配的任务的情况下,步骤S102也可以在步骤S101中的“获取所述任务执行机发送给所述任务调度机的任务获取请求”之前执行。也即,任务调度机当接收到第一预设指令时,可以先获取待分配的任务,再获取任务获取请。

通过步骤S102,相比于在现有技术中可能会随机地有不止一台机器从任务数据库中获取待分配的任务,在本申请实施例中,可以只由任务调度机从任务数据库中获取待分配的任务,便于任务数据库对集群中各机器对任务数据库的操作权限进行分类管理以及风险控制。

S103:所述任务调度机按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,以便于所述任务执行机当接收到第二预设指令时,执行分配给自己的任务。

在本申请实施例中,对所述分配规则并不做限定。可以根据实际需求确定分配规则。

例如,当对集群的负载均衡能力需求较高时,任务调度机可以将获取的任务,平均分配给获取的各任务获取请求对应的任务执行机,进一步的,由于各 所述任务执行机相互之间的性能可能参差不齐,因此,任务调度机也可以根据任务执行机的性能分配任务,如可以给性能相对高的任务执行机分配更多任务,或分配更消耗资源的任务。这样的话,可以提高集群的负载均衡能力。

在本申请实施例中,对任务调度机分配任务的实现方式并不做限定。以下举例介绍两种可行的分配任务的具体形式。本申请主要采用第一种方式实现分配任务。

第一种,任务调度机可以通过修改待分配的任务的任务状态信息,以表示将该任务分配给了某任务执行机。其中,所述任务状态信息可以是单个参数(所述参数可以是常量或变量等),可以是一组参数,也可以是包含参数和函数的组合(所述组合可以是类或结构体等),等等;所述任务状态信息可以用于表示该任务的任务状态,任务状态包括但不限于:“未分配”、“等待执行”、“执行超时需重试”、“执行超时不需重试”、“执行失败需重试”、“执行失败不需重试”、“执行完成”、“放弃执行”,等等。其中,执行超时是否需重试,以及执行失败是否需重试,可以由任务执行机检测对应的任务后确定。

在实际应用中,待分配的任务的任务状态可以为“未分配”、或“执行超时需重试”、或“执行失败需重试”。也即,所述待分配的任务具体可以包括未分配的任务、执行失败需重试的任务和执行超时需重试的任务中的至少一种。

假定任务调度机要将某待分配的任务分配给任务执行机A,则可以对该任务的任务状态信息进行修改,使该任务的任务状态转换为“等待(任务执行机A)执行”。这种方式便于管理各任务的任务状态。

第二种,若任务调度机确定将某任务分配给某任务执行机,则可以将待分配的任务所包含的数据递交给该任务执行机执行。这种方法虽然不便于管理各任务的任务状态,但是,后续该任务执行机可以不用访问任务数据库,因此,可以减少访问任务数据库的机器的数量,降低任务数据库的风险。

在本申请实施例中,各任务执行机可以采用轮询、或定时查询(可以通过所述第二预设指令触发)等方式,在任务数据库中查询是否存在被分配给自己 的任务,若有,则执行该任务,否则,可以向任务调度机发送任务获取请求。

通过上述方法,由于发送任务获取请求的任务执行机处于空闲状态,因此可以及时地执行分配给自己的任务,因此,本申请实施例提供的集群中的任务调度方式可以提高集群执行任务的效率。

在本申请实施例中,若所述集群(为了便于描述,可以将该集群称为当前集群)处于分布式系统中,则分布式系统中可能还存在其他集群。

在实际应用中,上述各集群一般是按照机房进行划分的,各机房在地理位置上可以相隔较远,每个机房的各机器可以被组织成为一个集群,并可以按照本申请实施例提供的方法,在每个集群中分别选举出一个任务调度机负责本集群中的任务调度。当前集群和各所述其他集群可以共享同一个任务数据库,并可以获得权限调度该任务数据库中的任务。在这种应用场景下,可以有多个任务调度机对任务数据库进行并发操作,而这种并发操作可能会破坏任务数据库的一致性。在本申请实施例中,可以基于分布锁解决这个问题。

具体的,对于上述步骤S101,所述任务调度机从任务数据库中获取待分配的任务之前,所述任务调度机还可以获取分布锁,以独占对所述任务数据库的操作权,其中,所述任务数据库由所述任务调度机和至少一个其他的任务调度机共享,每个所述其他的任务调度机分别包含在一个其他的集群中。需要说明的是,获取分布锁的这一步骤,对于上述步骤S101,可以在任务调度机获取任务获取请求之前执行,可以在任务调度机获取任务获取请求之后执行。

相应的,将获取的任务分配给发送所述任务获取请求的任务执行机之后,所述方法还包括:所述任务调度机释放所述分布锁。这样的话,不会妨碍后续其他的任务调度机对任务数据库进行操作。

在实际应用中,以上分布锁的服务可以由分布式应用程序协调服务提供,例如,可以由Zookeeper服务提供。

在本申请实施例中,在上述步骤S101中已经提及,任务调度机可以维护一个请求队列,通过该请求队列,接收和保存各任务执行机发送的任务获取请 求。

具体的,在本申请实施例中,所述任务执行机的任务获取请求是由所述任务执行机发送至所述任务调度机的请求队列中的;获取所述任务执行机的任务获取请求,具体可以包括:所述任务调度机从所述请求队列中,获取所述任务执行机的任务获取请求。

进一步的,该请求队列也可以采用锁机制,以保障任务调度机可以快速地从该请求队列获取到任务获取请求。下面进行具体说明。

对于上述步骤101,获取所述任务执行机发送给所述任务调度机的任务获取请求。具体的,任务调度机可以通过遍历请求队列,读取获得请求队列中各任务获取请求。一般的,任务调度机可以快速地遍历请求队列。但是,由于任务调度机在遍历请求队列的过程中,各任务执行机有可能还会持续地向请求队列中继续发送任务获取请求,相应的,请求队列中的节点(每一个节点可以对应一个任务获取请求)会增加。在这种情况下,由于在任务调度机遍历请求队列的过程中,请求队列发生了变化,为了保证获取的任务获取请求的可靠性,任务调度机可能会重新遍历变化后的请求队列,当重新遍历次数较多时,任务调度机可能无法快速地从请求队列中获取到任务获取请求。

为了解决上述问题,对于上述步骤S101,从所述请求队列中,获取所述任务执行机发送给所述任务调度机的任务获取请求之前,所述方法还可以包括:对所述请求队列加锁,以阻止加锁后,接收所述任务执行机发送的任务获取请求。

相应的,对于上述步骤S103,将获取的任务分配给发送所述任务获取请求的任务执行机之后,所述方法还包括:对所述请求队列解锁。这样的话,不会妨碍后续任务执行机向任务调度机发送任务获取请求。

另外,由于队列这种数据结构,其特点是先进先出,因此,对于请求队列中接收和保存的各任务获取请求,在任务调度机分配任务时,接收时刻越靠前的任务获取请求相应地可以越早得到处理,也即,接收时刻越靠前的任务获取 请求对应的任务执行机越早被分配任务。进而,便于集群中的各任务执行机按照调度给该集群的各任务的宏观时序(各任务生成的时刻的顺序),执行所述各任务。

在本申请实施例中,对于上述步骤S103,按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,具体可以包括:针对获取的每个任务,按照设定的分配规则,确定对该任务的分配结果,并将该分配结果写入所述任务数据库;其中,该分配结果指示了发送所述任务获取请求的各任务执行机中,被分配到该任务的任务执行机。

在实际应用中,假定将该任务分配给了任务执行机A,则将该分配结果写入任务数据库,具体可以包括:对该任务的任务状态信息进行修改,使该任务的任务状态转换为“已分配,等待任务执行机A执行”。当然,可以在任务数据库的指定数据表中统一写入以及维护对各任务的分配结果,以便于集中查询。

根据上述说明,图2示出了本申请实施例提供的集群中的任务调度详细过程,其中,由Zookeeper服务器提供任务调度机选举以及提供分布锁等服务。可以包括以下步骤:

S201:任务调度机接收到第一预设指令,该第一预设指令触发任务调度机开始本轮任务调度。

S202:任务调度机获取任务数据库的分布锁。

S203:任务调度机对请求队列加锁。

S204:任务调度机获取请求队列中的各任务获取请求。

S205:任务调度机从任务数据库中获取待分配的任务。

S206:任务调度机针对获取的每个任务,按照设定的分配规则,确定对该任务的分配结果,其中,该分配结果指示了发送所述任务获取请求的各任务执行机中,被分配到该任务的任务执行机。

S207:任务调度机将各分配结果写入任务数据库。

S208:任务调度机对请求队列解锁。

S209:任务调度机释放任务数据库的分布锁,本轮调度结束。

以上为本申请实施例提供的集群中的任务调度方法(执行主体为任务调度机),基于同样的思路,本申请实施例还提供与所述任务调度方法对应的任务执行方法(执行主体为任务执行机),如图3所示,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,具体包括以下步骤:

S301:所述任务执行机当接收到第二预设指令时,从任务数据库中获取分配给自己的任务,其中,所述任务是由所述任务调度机在接收到第一预设指令后,按照设定的分配规则,根据所述任务执行机发送给所述任务调度机的获取请求,分配给所述任务执行机的。

在本申请实施例中,所述第二预设指令可以是设定的定时器的定时指令,也可以是由指定机器(如中间件调度中心、Zookeeper服务器,等等)发送的预设指令。

S302:所述任务执行机执行获取的分配给自己的任务。

通过上述方法,任务调度机可以将任务均衡地分配给各任务执行机,相应的,各任务执行机可以并行地执行分配给自己的任务,因此,可以提高集群中任务的执行效率。

在本申请实施例中,对于上述步骤S401,从任务数据库中获取分配给自己的任务,具体可以包括:获取任务数据库中写入的分配结果,根据所述分配结果,确定并获取分配给自己的任务。进一步的,任务执行机当确定所述任务数据库中不存在分配给自己的任务后,在空闲状态时可以向任务调度机发送任务获取请求,任务调度机在发送任务获取请求后,可以继续保持空闲状态、或者进入睡眠状态,等待下一轮被第二预设指令触发。根据前面对分配结果的具体说明,任务执行机可以通过查询任务数据库中各任务的任务状态,确定任务数据库是否存在分配给自己的任务。

任务调度机可以通过请求队列中任务获取请求的数量,推测集群中的处于空闲状态的任务执行机的数量,以及正在执行任务的任务执行机的数量,从而可以提高自身任务调度工作的有效性。

在本申请实施例中,由于集群中的任务一般会设定有执行超时的时限,以防止任务挂死在某台任务执行机上。因此,任务执行机执行分配给自己的任务时,执行结果一般可以分为以下几种:执行完成(包括:执行完成且未超时)、执行超时(包括:执行完成且执行超时,未执行完成且执行超时)、执行失败。

对于执行超时的任务和执行失败的任务,若这些任务不需进行重试,则任务调度机可以放弃这些任务,不再重新进行调度,而若这些任务需进行重试,则任务调度机可以将这些任务重新进行调度,分配给下一次从请求队列中读取的任务获取请求对应的各任务执行机。

这样的话,对于任务执行机,当所述任务执行机对获取的分配给自己的任务执行完成时,还可以判断执行完成的任务是否已由于诸如执行超时等原因,被重新分配给了其他的任务执行机;若是,则由于该任务还会被所述其他的任务执行机执行,因此,可以不将执行结果写入所述任务数据库,从而保证了该任务的数据的幂等性;若否,则可以将执行结果写入任务数据库。另外,当任务执行机对获取的分配给自己的任务执行完成且执行超时,若该任务未被重新分配给其他的任务执行机,则也可以将执行结果写入任务数据库。

需要说明的是,任务调度机在重新分配执行超时的任务或执行失败的任务时,可以基于数据库事务等方式保障所述重新分配操作的原子性。

根据上述说明,图4示出了本申请实施例提供的集群中的任务执行详细过程。可以包括以下步骤:

S401:任务执行机接收到第二预设指令,该第二预设指令触发任务执行机开始本轮任务执行。

S402:任务执行机在任务数据库中查询是否存在分配给自己的任务,若是,则执行步骤S403,否则,执行步骤S406。

S403:任务执行机从任务数据库中获取分配给自己的任务,并开始执行任务。

S404:任务执行机对该任务执行完成后,当确定该任务未被重新分配给其他的任务执行机时,将执行结果写入任务数据库。

S405:任务执行机将获取的全部任务执行完毕后,可以向任务调度机发送任务获取请求,以请求获得新的任务,或者,也可以等待下一轮任务执行。

S406:任务执行机向任务调度机发送任务获取请求,并等待下一轮任务执行。

以上分别对任务调度机和任务执行机的工作进行了详细阐述,下面进一步的,站在整个集群的角度,对上述方法进行概括。

图5示出了在实际应用中,一种实现了本申请实施例提供的任务调度方法和任务执行方法的集群架构图。

可以看到,图5中有共享同一个任务数据库的两个集群(集群1和集群2),在每个集群包含有一个任务调度机和三个任务执行机。其中,任务调度机是由Zookeeper在集群中选举出来的,集群中除任务调度机以外的每个机器可以分别作为一个任务执行机,另外,Zookeeper还可以为集群提供针对任务数据库的分布锁服务。

每个集群可以由该集群内的任务调度机负责任务调度,也可以由该集群对应的中间件调度中心负责任务调度。

图6示出了在图5的集群中,进行任务调度和任务执行的工作流简图,包括了任务调度机(Master)和任务执行机(Worker)的工作流程,其中,图6中的调度中心可以是本申请中提及的中间件调度中心;“调度中心执行任务到时(广播)”可以为本申请中提及的:中间件调度中心向任务执行机发送第二预设指令;“调度中心分配任务到时”可以为本申请中提及的:中间件调度中心直接向任务调度机发送第一预设指令,或者,中间件调度中心通过集群中的某台机器,向任务调度机发送第一预设指令。图6中工作流程的各步骤在前面 已经进行了详细说明,在此不再赘述。

另外,需要说明的是,集群中的任务调度机可能会由于关机、或重启、或宕机等原因,暂时无法工作,则在这种情况下,集群可以从各任务执行机中重新选出一台机器作为新的任务调度机,相应的,原来的任务调度机工作恢复正常后,可以转换成为任务执行机,或者,原来的任务调度机工作恢复正常后,也可以仍然作为任务调度机,新的任务调度机则转换成为任务执行机。

本申请的很多步骤的执行都取决于任务状态,为了进一步的帮助理解本申请,本申请实施例还提供了在实际应用中的任务状态转换图,如图7所示。

可以看到,在图7中,各圆角矩形分别表示任务的任务状态,包括:“未分配”、“等待执行”、“执行完成”、“执行失败”、“执行超时”、“放弃执行”,等等。圆形表示任务状态整个转换流程的开始,以及结束。圆角矩形之间的箭头表示任务状态的转换所需要的条件,前面已经进行了详细说明,在此不再赘述。

以上为本申请实施例提供的集群中的任务调度方法和任务执行方法,基于同样的思路,本申请实施例还提供相应的集群中的任务调度装置和任务执行装置,如图8、图9所示。

图8为本申请实施例提供的集群中的任务调度装置结构示意图,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,所述装置具体包括:

获取请求模块801,用于当接收到第一预设指令时,获取所述任务执行机的任务获取请求,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的;

获取任务模块802,用于从任务数据库中获取待分配的任务;

调度模块803,用于按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,以便于所述任务执行机当接收到第二预设指令时,执行分配给自己的任务。

所述装置还包括:

分布锁获取模块804,用于在所述获取任务模块801从任务数据库中获取待分配的任务之前,获取分布锁,以独占对所述任务数据库的操作权,其中,所述任务数据库由所述任务调度机和至少一个其他的任务调度机共享,每个所述其他的任务调度机分别包含在一个其他的集群中;

分布锁释放模块805,用于在所述调度模块803将获取的任务分配给发送所述任务获取请求的任务执行机之后,释放所述分布锁。

所述任务执行机的任务获取请求是由所述任务执行机发送至所述任务调度机的请求队列中的,所述获取请求模块801具体用于,从所述请求队列中,获取所述任务执行机的任务获取请求。

所述装置还包括:

队列锁获取模块806,用于在所述获取请求模块801从所述请求队列中,获取所述任务执行机的任务获取请求之前,对所述请求队列加锁,以阻止加锁后,接收所述任务执行机发送的任务获取请求;

队列锁释放模块807,用于在所述调度模块803将获取的任务分配给发送所述任务获取请求的任务执行机之后,对所述请求队列解锁。

所述待分配的任务具体包括未分配的任务、执行失败需重试的任务和执行超时需重试的任务中的至少一种。

所述调度模块803具体用于,针对获取的每个任务,按照设定的分配规则,确定对该任务的分配结果,并将该分配结果写入所述任务数据库;其中,该分配结果指示了发送所述任务获取请求的各任务执行机中,被分配到该任务的任务执行机。

具体的上述如图8所示的装置可以位于集群中的机器上。

图9为本申请实施例提供的集群中的任务执行装置结构示意图,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,所述装置具体包括:

获取模块901,用于当任务执行机接收到第二预设指令时,从任务数据库中获取分配给所述任务执行机的任务,其中,所述任务是由所述任务调度机在接收到第一预设指令后,按照设定的分配规则,根据所述任务执行机发送给所述任务调度机的获取请求,分配给所述任务执行机的;

执行模块902,用于执行获取的分配给所述任务执行机的任务。

所述获取模块901具体用于,获取任务数据库中写入的分配结果,根据所述分配结果,确定并获取分配给自己的任务。

所述装置还包括:

发送模块903,用于所述任务执行机当接收到第二预设指令时,且所述任务执行机当确定所述任务数据库中不存在分配给自己的任务后,在空闲状态时向所述任务调度机发送任务获取请求。

所述装置还包括:

写库模块904,用于在所述执行模块902执行获取的分配给所述任务执行机的任务之后,当所述任务执行机对获取的分配给自己的任务执行完成时,判断执行完成的任务是否已被分配给其他的任务执行机,若否,则将执行结果写入所述任务数据库。

具体的上述如图9所示的装置可以位于集群中的机器上。

进一步的,基于同样的思路,本申请实施例还提供一种集群,如图10所示,包括:按照设定的选举规则,选举出的一台任务调度机1001和至少一台任务执行机1002(图10中示出了3台任务执行机,可分别表示为:任务执行机1002a、任务执行机1002b、任务执行机1002c);其中,

所述任务调度机1001,用于当接收到第一预设指令时,获取所述任务执行机的任务获取请求,从任务数据库中获取待分配的任务,按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,其中,所述任务获取请求是所述任务执行机在空闲状态时发送的;

所述任务执行机1002,用于当接收到第二预设指令时,从任务数据库中 获取分配给自己的任务,执行获取的分配给自己的任务。

本申请实施例提供一种集群中的任务调度方法及装置,所述集群包含按照设定的选举规则,选举出的一台任务调度机和至少一台任务执行机,该方法包括:所述任务调度机当接收到第一预设指令时,获取所述任务执行机的任务获取请求,其中,任务获取请求是任务执行机在空闲状态时发送的;所述任务调度机从任务数据库中获取待分配的任务,所述任务调度机按照设定的分配规则,将获取的任务分配给发送所述任务获取请求的任务执行机,以便于所述任务执行机当接收到第二预设指令时,执行分配给自己的任务。通过上述方法,由于所述任务执行机处于空闲状态,因此可以及时地执行分配给自己的任务,这种任务调度方式可以提高集群执行任务的效率。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程 序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1