掌桥专利:专业的专利平台
掌桥专利
首页

分布式任务推送方法及装置、电子设备、存储介质

文献发布时间:2023-06-19 15:32:14



技术领域

本发明涉及大数据处理领域,具体而言,涉及一种分布式任务推送方法及装置、电子设备、存储介质。

背景技术

分布式调度系统,是指通过定时器或一次性地控制执行大量任务,利用多线程,多主机并发的完成大量任务的工作,同时对依赖的任务有序执行,状态控制更新。在大数据仓库建设过程中,使用较多。

目前,业内使用比较多的分布式调度系统为apache开源的dolphin scheduler,然后,在执行分布式任务调度过程中,master(主进程)开启一个线程提交一个任务,需要从数据库获取一个任务,提交完后,需要不断轮询等待,占用资源,如果此时有10万个任务需要同时运行,因为数据结构分三层,即定义、实例及任务实例,需要设置产生20万个线程池,30万个线程不断轮询状态,实时更新操作,然而,轮询的操作是多次查询数据库的多张表,数据库查询压力也比较大,如果master指定线程数,会导致吞吐量大大降低,线程都在等待轮询更新状态;worker(成员进程)获取任务时会有一个zk的锁,只能有一个worker获取到这个锁,拿到锁后,获取任务,执行一系列的操作,比如数据库的查询、数据的确认、本地文件夹和文件的操作、任务移除,之后才释放锁,这个过程会耗时比较长,其他worker只能等待,大大降低了并发的效率。

因此,现有的分布式调度系统执行并发任务的过程存在效率低的技术问题。

发明内容

鉴于上述问题,本发明提出了一种分布式任务推送方法及装置、电子设备、存储介质,以至少解决现有的分布式调度系统执行并发任务的过程存在效率低的技术问题。

根据本发明的第一方面,提供了一种分布式任务推送方法,应用于分布式任务推送系统,所述系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,所述方法包括:获取待推送的多个任务各自的一个或多个任务实例;确定将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略;其中,所述任务推送策略由所述多个主节点的第一数量信息、所述多个任务执行节点的第二数量信息以及所述待推送的多个任务各自的一个或多个任务实例制定;根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上。

可选地,确定将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略包括:选定所述多个主节点中任一主节点为第一主节点,将所述第一主节点对应的主节点ID广播给所述多个主节点中除所述第一主节点以外的其余主节点;通过任一主节点筛选出主节点ID最小或最大时对应的第二主节点,并将所述第二主节点作为领导节点;通过所述领导节点检测执行所述多个任务对应的预计执行时长;若所述预计执行时长不超过预设值,则选择所述任务推送策略中的第一任务推送策略;若所述预计执行时长超过所述预设值,则选择所述任务推送策略中的第二任务推送策略,其中,所述第二任务推送策略由所述多个主节点的第一数量信息、每个主节点对应的健康度因子、所述多个任务执行节点的第二数量信息、所述待推送的多个任务各自的一个或多个任务实例以及每个任务执行节点对应的健康度因子制定。

可选地,所述根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上包括:根据所述第一任务推送策略对应的第一分组算法对所述多个任务进行分组;根据所述第一分组算法对应的分组结果依次将所述多个任务推送给各个主节点;选定所述多个主节点中的任一主节点作为第三主节点,根据所述第一分组算法将所述第三主节点上的任务对应的一个或多个任务实例推送给由所述第三主节点管理的各个任务执行节点;其中,所述第一分组算法为对各个任务对应的任务ID和所述第一数量信息进行取模运算,或者为对各个任务实例对应的任务实例ID和所述第二数量信息进行取模运算。

可选地,所述根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上包括:根据所述第二任务推送策略对应的第二分组算法对所述多个任务进行分组;根据所述第二分组算法对应的分组结果依次将所述多个任务推送给各个主节点;选定所述多个主节点中的任一主节点作为第四主节点,根据所述第二分组算法将所述第四主节点上的任务对应的一个或多个任务实例推送给由所述第四主节点管理的各个任务执行节点;其中,所述第二分组算法为对各个任务对应的任务ID和各个主节点对应的健康度因子进行取模运算;或者为对各个任务实例对应的任务实例ID和各个任务执行节点对应的健康度因子进行取模运算。

可选地,在根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,所述方法还包括:刷新各个主节点和各个任务执行节点对应的健康度因子。

可选地,在根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,所述方法还包括:在各个任务执行节点各自执行各个任务实例之后,接收各个任务执行节点反馈的执行各个任务实例对应的日志信息和执行结果。

可选地,在根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,所述方法还包括:向各个主节点发送请求查询各个任务执行节点执行各个任务实例的日志信息和执行进度信息的查询请求,由各个主节点将所述查询请求发送至各个任务执行节点;接收各个任务执行节点根据所述查询请求反馈的所述日志信息和所述执行进度信息。

根据本发明的第二方面,还提供了一种分布式任务推送装置,应用于分布式任务推送系统,所述系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,所述装置包括:获取模块,用于获取待推送的多个任务各自的一个或多个任务实例;确定模块,用于确定将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略;其中,所述任务推送策略由所述多个主节点的第一数量信息、所述多个任务执行节点的第二数量信息以及所述待推送的多个任务各自的一个或多个任务实例制定;分发模块,用于根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上。

可选地,所述确定模块包括:广播单元,用于选定所述多个主节点中任一主节点为第一主节点,将所述第一主节点对应的主节点ID广播给所述多个主节点中除所述第一主节点以外的其余主节点;确定单元,用于通过任一主节点筛选出主节点ID最小或最大时对应的第二主节点,并将所述第二主节点作为领导节点;检测单元,用于通过所述领导节点检测执行所述多个任务对应的预计执行时长;选择单元,用于当所述预计执行时长不超过预设值时,选择所述任务推送策略中的第一任务推送策略;当所述预计执行时长超过所述预设值时,选择所述任务推送策略中的第二任务推送策略,其中,所述第二任务推送策略由所述多个主节点的第一数量信息、每个主节点对应的健康度因子、所述多个任务执行节点的第二数量信息、所述待推送的多个任务各自的一个或多个任务实例以及每个任务执行节点对应的健康度因子制定。

可选地,所述分发模块包括:第一分组单元,用于根据所述第一任务推送策略对应的第一分组算法对所述多个任务进行分组;第一推送单元,用于根据所述第一分组算法对应的分组结果依次将所述多个任务推送给各个主节点;第二推送单元,用于选定所述多个主节点中的任一主节点作为第三主节点,根据所述第一分组算法将所述第三主节点上的任务对应的一个或多个任务实例推送给由所述第三主节点管理的各个任务执行节点;其中,所述第一分组算法为对各个任务对应的任务ID和所述第一数量信息进行取模运算,或者为对各个任务实例对应的任务实例ID和所述第二数量信息进行取模运算。

可选地,所述分发模块包括:第二分组单元,用于根据所述第二任务推送策略对应的第二分组算法对所述多个任务进行分组;第三推送单元,用于根据所述第二分组算法对应的分组结果依次将所述多个任务推送给各个主节点;第四推送单元,用于选定所述多个主节点中的任一主节点作为第四主节点,根据所述第二分组算法将所述第四主节点上的任务对应的一个或多个任务实例推送给由所述第四主节点管理的各个任务执行节点;其中,所述第二分组算法为对各个任务对应的任务ID和各个主节点对应的健康度因子进行取模运算;或者为对各个任务实例对应的任务实例ID和各个任务执行节点对应的健康度因子进行取模运算。

可选地,所述装置还包括:刷新模块,用于在所述分发模块根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,刷新各个主节点和各个任务执行节点对应的健康度因子。

可选地,所述装置还包括:第一接收模块,用于在所述分发模块根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,在各个任务执行节点各自执行各个任务实例之后,接收各个任务执行节点反馈的执行各个任务实例对应的日志信息和执行结果。

可选地,所述装置还包括:发送模块,用于在所述分发模块根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,向各个主节点发送请求查询各个任务执行节点执行各个任务实例的日志信息和执行进度信息的查询请求,由各个主节点将所述查询请求发送至各个任务执行节点;第二接收模块,用于接收各个任务执行节点根据所述查询请求反馈的所述日志信息和所述执行进度信息。

根据本发明的第三方面,还提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

根据本发明的第四方面,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项装置实施例中的步骤。

本发明提供的技术方案,应用于分布式任务推送系统,系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,首先,获取待推送的多个任务各自的一个或多个任务实例;然后,确定将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略,该任务推送策略由多个主节点的第一数量信息、多个任务执行节点的第二数量信息以及待推送的多个任务各自的一个或多个任务实例制定;根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上,从而实现高效地推送分布式任务的效果,通过将多个任务分散给多个任务执行节点,进而能够将任务进度查询工作分散给各个主节点来操作,从而提高了任务进度的查询效率,解决了现有的分布式调度系统执行并发任务的过程存在效率低的技术问题。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1是根据本发明实施例提供的一种分布式任务推送方法的流程图;

图2是根据本发明实施例提供的一种基于akka的分布式调度系统架构示意图;

图3是根据本发明实施例提供一种基于akka的分布式调度系统的工作流程图;

图4是根据本发明实施例提供的一种分布式任务推送装置的结构框图;

图5是根据本发明实施例提供的一种电子设备的结构示意图。

具体实施方式

下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。

为了解决相关技术存在的技术问题,在本实施例中提供了一种分布式任务推送方法。下面以具体地实施例对本发明的技术方案以及本发明的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。

图1是根据本发明实施例提供的一种分布式任务推送方法的流程图,如图1所示,该方法应用于分布式任务推送系统,该系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,该流程包括如下步骤:

步骤S102,获取待推送的多个任务各自的一个或多个任务实例;

在本实施例的一个应用场景中,采用Master(主进程)-Worker(成员进程)模式,是一种并行模式,Master是主要进程(即上述主节点),Master中有维护着一个Worker进程队列,Master接收到了一个任务后,对任务进行拆分,把一个大的而且复杂的批量业务拆分成若干小的业务,只要是互不影响的都可以分而治之相互独立,并且分配给各个Worker,让各个Worker之间各自运行各自的子任务,比如通过多线程或多进程甚至多机联合计算,把拆分后的小业务交给更多的CPU或机器处理(即上述任务执行节点),最后Worker们的返回结果交给Master进行汇总并且最后返回给任务的发起方。

在本实施例中,获取待推送的多个任务各自的一个或多个任务实例,以便Master进程和Worker进程各自分担各自的任务,协同完成信息处理的模式;通过并发/并行的方式提高整体业务的运算速度,压榨系统性能来提高效率。

步骤S104,确定将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略;其中,任务推送策略由多个主节点的第一数量信息、多个任务执行节点的第二数量信息以及待推送的多个任务各自的一个或多个任务实例制定;

上述步骤S104具体包括:选定多个主节点中任一主节点为第一主节点,将第一主节点对应的主节点ID广播给多个主节点中除第一主节点以外的其余主节点;通过任一主节点筛选出主节点ID最小或最大时对应的第二主节点,并将第二主节点作为领导节点;通过领导节点检测执行多个任务对应的预计执行时长;若预计执行时长不超过预设值,则选择任务推送策略中的第一任务推送策略;若预计执行时长超过预设值,则选择任务推送策略中的第二任务推送策略,其中,第二任务推送策略根据多个主节点的第一数量信息、每个主节点的健康度因子、多个任务执行节点的第二数量信息、待推送的多个任务各自的一个或多个任务实例以及每个任务执行节点的健康度因子制定。

在一个示例中,每个master向其他master广播自己的master ID;每个master从根据所有master ID,筛选出最大master ID或者最小master ID对应的master,作为leadermaster(即上述领导节点)。

进一步地,leader master可检测出执行该批量任务对应的预计执行时长,若预计执行时长未超过预设值时,说明该批量任务为简单任务,可采用第一任务推送策略完成任务推送;若预计执行时未超过预设值时,说明该批量任务为复杂任务,可采用第二任务推送策略。其中,第一任务推送策略和第二任务推送策略的区别在于,第二任务推送策略的制定多了主节点或任务执行节点对应的健康度因子,健康度因子越大,表示主节点或任务执行节点可执行的任务量就越多。

进一步地,leader master可用于确定任务的ID、任务信息、分组算法、定时时间等信息;leader master通过向所有master发送一个预设的消息,然后所有master响应该消息,即可统计出存活master(即上述主节点)的数量(即上述第一数量信息);leader master还可用于接收所有master获取到的任务执行结果、任务执行进度信息和任务执行的日志信息,实现了通过leader master将大量任务的任务状态查询工作分散给多个master去操作,大大提高了查询速度和效率,从而实时查询任务执行状态。

在本实施例的一个可能的实现方式中,根据第一任务推送策略对应的第一分组算法对多个任务进行分组;根据第一分组算法对应的分组结果依次将多个任务推送给各个主节点;选定多个主节点中的任一主节点作为第三主节点,根据第一分组算法将第三主节点上的任务对应的一个或多个任务实例推送给由第三主节点管理的各个任务执行节点;其中,第一分组算法为对各个任务对应的任务ID和第一数量信息进行取模运算,或者为对各个任务实例对应的任务实例ID和第二数量信息进行取模运算。

在本实施例的一个示例中,第一分组算法通过以下数学模型表示:

mod(w,n);

其中,w为任务ID,n表示master个数(即上述第一数量信息);若w表示任务实例ID,则n表示任务执行节点的个数(即上述第二数量信息)。

通过对任务ID值与master个数进行取模运算,得到的余数,然后根据余数依次将多个任务分配给对应的master,即按组数取模;然后根据同样的算法分组将任一主节点上的每个任务对应的一个或多个任务实例推送给对应的任务执行节点上。本实施例适应于批量任务执行时长较短的情况,即简单的任务时使用上述第一分组算法对该批量任务进行分发,然后针对每个任务各自的一个或多个任务实例,采用同样的第一分组算法分发给对应的任务执行节点,高效地对简单任务进行分发。

在本实施例的另一个可能的实现方式中,根据第二任务推送策略对应的第二分组算法对多个任务进行分组;根据第二分组算法对应的分组结果依次将多个任务推送给各个主节点;选定多个主节点中的任一主节点作为第四主节点,根据第二分组算法将第四主节点上的任务对应的一个或多个任务实例推送给由第四主节点管理的各个任务执行节点;其中,第二分组算法为对各个任务对应的任务ID和各个主节点对应的健康度因子进行取模运算;或者为对各个任务实例对应的任务实例ID和各个任务执行节点对应的健康度因子进行取模运算。

在本实施例的一个示例中,第二分组算法通过以下数学模型表示:

其中,h

基于每个master的健康度因子和任务ID值,利用上述第二分组算法计算每个i对应的j的最小值,j的最小值作为每个任务对应的master ID,从而对批量任务进行分组。

进一步地,在根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,还包括:刷新各个主节点和各个任务执行节点对应的健康度因子。

例如,为每个master或worker分配任务后,按照预设时间(比如时间m)刷新该master或worker对应的健康度,从而实时刷新master或worker剩余可执行的任务量,以达到实时监控master或worker,方便leader master更准确地掌握每个master或每个worker的当前状态。

步骤S106,根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上。

本发明实施例提供的分布式任务推送方法,应用于分布式任务推送系统,该系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,首先,获取待推送的多个任务各自的一个或多个任务实例;然后,确定将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略,该任务推送策略由多个主节点的第一数量信息、多个任务执行节点的第二数量信息以及待推送的多个任务各自的一个或多个任务实例制定;根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上,从而实现高效地推送分布式任务的效果,通过将多个任务分散给多个任务执行节点,进而能够将任务进度查询工作分散给各个主节点来操作,从而提高了任务进度的查询效率,解决了现有的分布式调度系统执行并发任务的过程存在效率低的技术问题。

可选地,在上述步骤S106之后,还包括:在各个任务执行节点执行各个任务实例之后,接收各个任务执行节点反馈的执行各个任务实例对应的日志信息和执行结果。在本实施例中,任务执行节点执行任务结束后,主动反馈任务执行的结果和执行任务的日志信息给对应的主节点,然后各个主节点再反馈给领导节点;其中,任务执行的结果至少包括:worker的心跳、任务执行进度(执行完、未执行或执行失败)、实例状态、机器状态、选举等。图2是根据本发明实施例提供的一种基于akka的分布式调度系统架构示意图,如图2所示,每个master可管理至少一个worker,leader master向各个master发送查询请求,该查询请求请求查询master的心跳、任务状态、任务实例状态、worker机器状态、任务执行日志信息及选举情况等;然后master将查询请求发送给由该master管理的worker上,然后worker响应该查询请求,并上报任务实例的执行进度信息、worker的心跳、执行结果、执行日志及worker的机器状态给master,然后反馈给leader master。

可选地,在上述步骤S106之后,还包括:向各个主节点发送请求查询各个任务执行节点执行各个任务实例的日志信息和执行进度信息的查询请求,由各个主节点将查询请求发送至各个任务执行节点;接收各个任务执行节点根据查询请求反馈的日志信息和执行进度信息。在本实施例中,由于存在任务执行节点执行任务失败等情况,导致任务执行节点不能实时或者准确地反馈任务执行结果,因此可由leader master主动向各个master发送查询请求,然后由各个master将接收到的查询请求发给该master管理的各个任务执行节点,任务执行节点执行任务过程中,实时反馈执行进度信息以及日志信息。

下面结合一具体实施例对本发明实施例做进一步的说明:

图3是根据本发明实施例提供一种基于akka的分布式调度系统的工作流程图,如图3所示,包括以下步骤:

步骤1、Master广播选举出一个leader(即上述领导节点)(任一成员(worker)节点都可能成为leader),根据广播存活master(即上述主节点)确定分组数n;

步骤2、由leader master创建更新调度计划(即上述任务调度策略);

步骤3、将更新调度计划反馈给客户端client;

步骤4、Master Leader根据分组数n,确定一个分组算法,定义任务ID为w,算法1(上述第一分组算法)、按组数取模,mod(w,n)结果即为组数,算法2(即上述第二分组算法)、master健康度因子(1-10分数字越大越健康),分组:

步骤5、查询任务信息和日志;

步骤6、将任务信息和日志反馈给客户端client;

步骤7、获取到的定时任务,加入调度队列,定时产生任务实例;

步骤8、按照worker健康度为任务实例采用步骤4里的算法,分配worker。将任务实例通过akka推送给对应worker,更新任务实例状态为已分配;

步骤9、Worker接收到任务实例,加入调度队列,worker线程池开始执行任务,并更新任务状态;

步骤10、将任务状态反馈给master;

步骤11、Worker完成任务将状态推送给master,Master可以主动请求获取任务实例状态,防止worker长期未执行问题,需要触发重试;

步骤12、任务状态反馈给master;

步骤13、执行任务;

步骤14、在数据库db中记录执行任务的日志信息;

步骤15、将任务的日志信息反馈给worker;

步骤16、master向worker发送查询请求,以请求任务执行进度信息;

步骤17、worker接收到查询请求后,给master反馈已成功接收查询请求;

步骤18、worker向master报告任务状态;

步骤19、master给worker反馈已成功接收任务状态;

步骤20、接收任务状态报告;

步骤21、Master接收到任务实例状态与日志信息(即任务状态报告),更新数据库db里的任务实例信息

步骤22、数据库db给master反馈。

同时,任务推送策略可以得到扩展,包括:1)standlone模式(单节点模式),即分配给单个worker执行;2)高优先级,秒级任务实例,可以使用广播模式,通过akka tell(通知)给所有worker,worker接收到任务实例,会根据空闲情况,优先插入任务,抢单式执行任务;3)同一任务实例,涉及并行节点,可以采取map reduce模式,各worker分开执行,最终合并更新任务状态,加快任务执行速度。

需要说明的是,上述步骤2和步骤5不考虑时序,查询任务信息与日志可在任务执行的全过程均可执行的步骤。

上述实施例提出了一种分布式任务调度方法,提出的基于akka的分布式调度系统,能将master与worker之间高频大量的信息传递高效的实现,颠覆以往轮询的动作;根据worker健康度,能合理的分配任务,解决以往轮询获取任务的动作;支持扩展的3种任务模式,能更高效的解决多样性任务的需求,任务秒级执行得到有力保障;因为不存在轮询动作线程数线程池大量减少;整个分布式系统实现无锁化,大大减少损耗,提高系统的吞吐量,能改善数据仓库出数慢的问题。

基于上文各个实施例提供的分布式任务推送方法,基于同一发明构思,在本实施例中还提供了一种分布式任务推送装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是根据本发明实施例提供的一种分布式任务推送装置的结构框图,如图4所示,该装置应用于分布式任务推送系统,系统包括多个主节点和多个任务执行节点,每个主节点管理至少一任务执行节点,各个任务执行节点执行任务的一个或多个任务实例,上述装置包括:获取模块40,用于获取待推送的多个任务各自的一个或多个任务实例;确定模块42,连接至上述获取模块40,用于确定将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略;其中,任务推送策略由多个主节点的第一数量信息、多个任务执行节点的第二数量信息以及待推送的多个任务各自的一个或多个任务实例制定;分发模块44,连接至上述确定模块42,用于根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上。

可选地,确定模块42包括:广播单元,用于选定多个主节点中任一主节点为第一主节点,将第一主节点对应的主节点ID广播给多个主节点中除第一主节点以外的其余主节点;确定单元,用于通过任一主节点筛选出主节点ID最小或最大时对应的第二主节点,并将第二主节点作为领导节点;检测单元,用于通过领导节点检测执行多个任务对应的预计执行时长;选择单元,用于当预计执行时长不超过预设值时,选择任务推送策略中的第一任务推送策略;当预计执行时长超过预设值时,选择任务推送策略中的第二任务推送策略,其中,第二任务推送策略由多个主节点的第一数量信息、每个主节点对应的健康度因子、多个任务执行节点的第二数量信息、待推送的多个任务各自的一个或多个任务实例以及每个任务执行节点对应的健康度因子制定。

可选地,分发模块44包括:第一分组单元,用于根据第一任务推送策略对应的第一分组算法对多个任务进行分组;第一推送单元,用于根据第一分组算法的分组结果依次将多个任务推送给各个主节点;第二推送单元,用于选定多个主节点中的任一主节点作为第三主节点,根据第一分组算法将第三主节点上的任务对应的一个或多个任务实例推送给由第三主节点管理的各个任务执行节点;其中,第一分组算法为对各个任务对应的任务ID和第一数量信息进行取模运算,或者为对各个任务实例对应的任务实例ID和第二数量信息进行取模运算。

可选地,分发模块44包括:第二分组单元,用于根据第二任务推送策略对应的第二分组算法对多个任务进行分组;第三推送单元,用于根据第二分组算法对应的分组结果依次将多个任务推送给各个主节点;第四推送单元,用于选定多个主节点中的任一主节点作为第四主节点,根据第二分组算法将第四主节点上的任务对应的一个或多个任务实例推送给由第四主节点管理的各个任务执行节点;其中,第二分组算法为对各个任务对应的任务ID和各个主节点对应的健康度因子进行取模运算;或者为对各个任务实例对应的任务实例ID和各个任务执行节点对应的健康度因子进行取模运算。

可选地,上述装置还包括:刷新模块,用于在分发模块根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,刷新各个主节点和各个任务执行节点对应的健康度因子。

可选地,上述装置还包括:第一接收模块,用于在分发模块根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,在各个任务执行节点各自执行各个任务实例之后,接收各个任务执行节点反馈的执行各个任务实例对应的日志信息和执行结果。

可选地,上述装置还包括:发送模块,用于在分发模块根据任务推送策略将待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上之后,向各个主节点发送请求查询各个任务执行节点执行各个任务实例的日志信息和执行进度信息的查询请求,由各个主节点将查询请求发送至各个任务执行节点;第二接收模块,用于接收各个任务执行节点根据查询请求反馈的日志信息和执行进度信息。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:

S1,获取待推送的多个任务各自的一个或多个任务实例;

S2,确定将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上的任务推送策略;其中,所述任务推送策略由所述多个主节点的第一数量信息、所述多个任务执行节点的第二数量信息以及所述待推送的多个任务各自的一个或多个任务实例制定;

S3,根据所述任务推送策略将所述待推送的多个任务各自的一个或多个任务实例分发到各个主节点管理的任务执行节点上。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。

基于上述图1所示方法和图4所示装置的实施例,为了实现上述目的,本发明实施例还提供了一种电子设备,如图5所示,包括存储器52和处理器51,其中存储器52和处理器51均设置在总线53上存储器52存储有计算机程序,处理器51执行计算机程序时实现图1所示的分布式任务推送方法。

基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个存储器(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景所述的方法。

可选地,该设备还可以连接用户接口、网络接口、摄像头、射频(Radio Frequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。

本领域技术人员可以理解,本实施例提供的一种电子设备的结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。

可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。

显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 任务变更记录的推送方法、装置、电子设备及存储介质
  • 待办任务推送方法、装置、电子设备及存储介质
技术分类

06120114487362