CN117785398A - 分布式任务调度方法、装置、电子设备及存储介质 - Google Patents

分布式任务调度方法、装置、电子设备及存储介质 Download PDF

Info

Publication number
CN117785398A
CN117785398A CN202311526954.1A CN202311526954A CN117785398A CN 117785398 A CN117785398 A CN 117785398A CN 202311526954 A CN202311526954 A CN 202311526954A CN 117785398 A CN117785398 A CN 117785398A
Authority
CN
China
Prior art keywords
data
scheduling
distributed task
sliced
slicing
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311526954.1A
Other languages
English (en)
Inventor
林建明
邹明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Wuyu Technology Co ltd
Original Assignee
Shenzhen Wuyu Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Wuyu Technology Co ltd filed Critical Shenzhen Wuyu Technology Co ltd
Priority to CN202311526954.1A priority Critical patent/CN117785398A/zh
Publication of CN117785398A publication Critical patent/CN117785398A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例涉及一种分布式任务调度方法、装置、电子设备及存储介质,上述方法包括:接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;确定用于调度所述分布式任务的实例数量;基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。由此,有利于保证分布式任务调度的幂等性。

Description

分布式任务调度方法、装置、电子设备及存储介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种分布式任务调度方法、装置、电子设备及存储介质。
背景技术
现有技术中,任务调度方式主要分为两种。其中,方式一为单机部署模式。例如,Timer、Spring Task、ScheduledExecutorService等。上述Timer为JDK(Java DevelopmentKit,一个用于开发和测试Java编程语言编写的程序的软件开发环境)自带的一个定时调度类,可以简单的实现按某一频度进行任务执行,提供的功能比较单一,无法实现复杂的调度任务。Spring Task是Spring框架提供的任务调度工具,支持注解和配置文件的形式,支持Cron表达式,使用简单且功能强大。ScheduledExecutorService是JDK自带的基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,并发执行,互不影响。方式二为分布式集群模式。例如,Quartz、Elasticjob、XXL-JOB、Saturn等。上述Quartz是一款任务调度器,可以实现较为复杂的调度功能,同时支持分布式调度,但配置较为复杂。Elasticjob是一种开源的分布式调度系统,采用zookeeper实现分布式调度,实现任务高可用以及分片实现。XXL-JOB是一个轻量级的分布式任务调度框架。Saturn是一个容错和高可用的作业调度服务框架。
然而,现有的分布式任务调度方法中,容易出现执行中断等异常情况,在出现异常后,通常需要重新调度整个任务,存在难以保证分布式任务调度的幂等性的技术问题。
发明内容
鉴于此,为解决上述部分或全部技术问题,本申请实施例提供一种分布式任务调度方法、装置、电子设备及存储介质。
第一方面,本申请实施例提供一种分布式任务调度方法,所述方法包括:
接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
确定用于调度所述分布式任务的实例数量;
基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
在一个可能的实施方式中,在所述基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合之后,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据之前,所述方法还包括:
确定所述分片数据集合的分片信息;
通过目标单例类,持久化存储所述分片信息。
在一个可能的实施方式中,所述目标单例类包括第一单例类和第二单例类;所述分片信息包括:所述分片数据集合中的各个分片数据以及目标分片数量,所述目标分片数量表示所述分片数据集合包括的分片数据的数量与所述实例数量的商值;以及
所述通过目标单例类,持久化存储所述分片信息,包括:
通过所述第一单例类,持久化存储所述各个分片数据;
通过所述第二单例类,持久化存储所述目标分片数量。
在一个可能的实施方式中,所述目标单例类用于持久化存储各个所述分布式任务对应的所述分片信息。
在一个可能的实施方式中,所述基于所述处理结果调度所述分布式任务,包括:
基于所述处理结果,确定所述分片数据集合中是否存在未成功处理的分片数据;
在所述各个分片数据中存在未成功处理的分片数据的情况下,经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据。
在一个可能的实施方式中,所述确定待处理的各个分片数据中,是否存在未成功处理的分片数据,包括:
通过第三单例类,确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
在一个可能的实施方式中,所述第三单例类用于确定各个所述分布式任务对应的所述待处理的各个分片数据中,是否存在未成功处理的分片数据。
第二方面,本申请实施例提供一种分布式任务调度装置,所述装置包括:
接收单元,用于接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
第一确定单元,用于确定用于调度所述分布式任务的实例数量;
分片单元,用于基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制单元,用于控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
在一个可能的实施方式中,在所述基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合之后,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据之前,所述装置还包括:
第二确定单元,用于确定所述分片数据集合的分片信息;
存储单元,用于通过目标单例类,持久化存储所述分片信息。
在一个可能的实施方式中,所述目标单例类包括第一单例类和第二单例类;所述分片信息包括:所述分片数据集合中的各个分片数据以及目标分片数量,所述目标分片数量表示所述分片数据集合包括的分片数据的数量与所述实例数量的商值;以及
所述通过目标单例类,持久化存储所述分片信息,包括:
通过所述第一单例类,持久化存储所述各个分片数据;
通过所述第二单例类,持久化存储所述目标分片数量。
在一个可能的实施方式中,所述目标单例类用于持久化存储各个所述分布式任务对应的所述分片信息。
在一个可能的实施方式中,所述基于所述处理结果调度所述分布式任务,包括:
基于所述处理结果,确定所述分片数据集合中是否存在未成功处理的分片数据;
在所述各个分片数据中存在未成功处理的分片数据的情况下,经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据。
在一个可能的实施方式中,所述确定待处理的各个分片数据中,是否存在未成功处理的分片数据,包括:
通过第三单例类,确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
在一个可能的实施方式中,所述第三单例类用于确定各个所述分布式任务对应的所述待处理的各个分片数据中,是否存在未成功处理的分片数据。
第三方面,本申请实施例提供一种电子设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本申请上述第一方面的分布式任务调度方法中任一实施例的方法。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述第一方面的分布式任务调度方法中任一实施例的方法。
第五方面,本申请实施例提供一种计算机程序,所述计算机程序包括计算机可读代码,当所述计算机可读代码在设备上运行时,使得该设备中的处理器实现如上述第一方面的分布式任务调度方法中任一实施例的方法。
本申请实施例提供的分布式任务调度方法,可以接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据,之后,确定用于调度所述分布式任务的实例数量,然后,基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍,随后,控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。由此,通过对跑批数据进行分片处理,并经由多个线程并行处理各个分片数据,得到分片数据的处理结果,以便基于该处理结果调度所述分布式任务。这样,有利于保证分布式任务调度的幂等性。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1为本申请实施例提供的一种分布式任务调度方法的流程示意图;
图2为本申请实施例提供的另一种分布式任务调度方法的流程示意图;
图3为本申请实施例提供的又一种分布式任务调度方法的流程示意图;
图4为本申请实施例提供的一种分布式任务调度装置的结构示意图;
图5为本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
现在将参照附图来详细描述本申请的各种示例性实施例,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值并不限制本申请的范围。
本领域技术人员可以理解,本申请实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等对象,既不代表任何特定技术含义,也不表示它们之间的逻辑顺序。
还应理解,在本实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本申请实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本申请中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本申请中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本申请对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本申请及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,上述技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。为便于对本申请实施例的理解,下面将参考附图并结合实施例来详细说明本申请。显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决现有技术中难以保证分布式任务调度的幂等性的技术问题,本申请提供了一种分布式任务调度方法,有利于保证分布式任务调度的幂等性。
图1为本申请实施例提供的一种分布式任务调度方法的流程示意图。本方法可以应用于智能手机、笔记本电脑、台式电脑、便携式计算机、服务器等一个或多个电子设备上。此外,本方法的执行主体可以是硬件,也可以是软件。当上述执行主体为硬件时,该执行主体可以为上述电子设备中的一个或多个。例如,单个电子设备可以执行本方法,或者,多个电子设备可以彼此配合来执行本方法。当上述执行主体为软件时,本方法可以实现成多个软件或软件模块,也可以实现成单个软件或软件模块。在此不作具体限定。
如图1所示,该方法具体包括:
步骤101,接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据。
在本实施例中,调度请求可以用于指示调度分布式任务。
跑批数据,可以是执行上述分布式任务所涉及的数据。
步骤102,确定用于调度所述分布式任务的实例数量。
在本实施例中,实例数量,可以是用于调度所述分布式任务的实例的数量。实例数量可以为预设数量,也可以是按照一定策略确定的数量。
例如,实例数量可以采用如下策略确定:首先,确定用于调度所述分布式任务的CPU(Central Processing Unit,中央处理单元,也即CPU硬件)。之后,针对用于调度所述分布式任务的每个CPU,确定该CPU的核数。最后,将各个CPU的总核数,确定为实例数量。
再例如,此处的实例数量还可以采用如下策略确定:首先,确定用于调度所述分布式任务的CPU。之后,针对用于调度所述分布式任务的每个CPU,确定该CPU的核数。最后,将各个CPU的总核数与目标百分比的乘积,确定为实例数量。其中,目标百分比小于100%,目标百分比可以是预设百分比,此外,目标百分比也可以采用如下方式确定:确定各个所述CPU的当前总负载,以及各个所述CPU在历史时间段(例如在当前时间之前的任意历史时间段)占用的总负载上限(也即在历史时间段占用的最大总负载)。随后,计算总负载上限与当前总负载的差值,将该差值和所述总负载上限的商值,确定为上述目标百分比。其中,上述当前总负载表示各个所述CPU在当前时间段(例如包含当前时间的时间段)占用的总负载上限(也即在当前时间段占用的最大总负载)。历史时间段的起始时间在当前时间段的起始时间之前。
比如,如果各个所述CPU在历史时间段(例如在当前时间之前的任意历史时间段)占用的总负载上限为90,当前总负载为10,那么,当前总负载为80÷90=0.88……
这里,上述示例中,可以预留部分CPU资源用于进行其他处理,以确保分布式调度的正常进行。
步骤103,基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍。
在本实施例中,如果实例数量为n,那么,可以将上述跑批数据分片处理为m×n个分片数据。其中,m为正整数。
步骤104,控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
在本实施例中,如果实例数量为n,并且,将上述跑批数据分片处理为m×n个分片数据,那么,每个线程可以处理m个分片数据。进一步地,在所述实例数量个线程成功并行处理完成各个分片数据之后,即完成了上述分布式任务的调度。
上述处理结果,可以用于表示线程对应的分片数据是否经由该线程成功处理完成。
如果各个分片数据的处理结果均表示分片数据成功处理完成,那么,可以确定分布式任务成功处理完成;如果至少一个分片数据的处理结果表示分片数据未成功处理完成,那么,可以经由该分表数据对应的线程重新处理该分片数据。以此进行分布式任务的调度。
在本实施例的一些可选的实现方式中,在所述基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合之后,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据之前,还可以执行如下步骤:
第一步,确定所述分片数据集合的分片信息。
其中,分片信息可以是上述分片数据集合相关的各种信息。
第二步,通过目标单例类,持久化存储所述分片信息。
其中,目标单例类,可以是用于持久化存储分片信息的单例类。
单例类,意味着在调度上述分布式任务的过程中,仅存在一个用于持久化存储分片信息的类的对象。换言之,在调度上述分布式任务的过程中,仅需要一个用于持久化存储分片信息的调度实例。
可以理解,上述实现方式中,采用单例类持久化存储分片数据集合的分片信息,可以提高分布式任务调度的正确性,并且,可以提高分布式任务调度程序的性能,避免了多余对象的创建导致较高的内存占用。
在上述可选的实现方式中的一些应用场景下,所述目标单例类包括第一单例类和第二单例类。所述分片信息包括:所述分片数据集合中的各个分片数据以及目标分片数量。所述目标分片数量表示所述分片数据集合包括的分片数据的数量与所述实例数量的商值。
在此基础上,可以采用如下方式,来通过目标单例类,持久化存储所述分片信息:
第一步,通过所述第一单例类,持久化存储所述各个分片数据。
第二步,通过所述第二单例类,持久化存储所述目标分片数量。
其中,上述第一单例类可以是用于持久化存储所述各个分片数据的单例类。上述第二单例类可以是用于持久化存储所述目标分片数量的单例类。
可以理解,上述应用场景下,可以通过第一单例类持久化存储各个分片数据,以及通过第二单例类持久化存储所述目标分片数量。由此,可以并行持久化存储所述各个分片数据和目标分片数量。
在上述可选的实现方式中的一些应用场景下,所述目标单例类用于持久化存储各个所述分布式任务对应的所述分片信息。
可以理解,上述应用场景下,各个不同场景下的不同分布式任务,均可以通过上述目标单例类来持久化存储对应的分片信息,这样,可以复用持久化存储分片信息的逻辑。
本申请实施例提供的分布式任务调度方法,可以接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据,之后,确定用于调度所述分布式任务的实例数量,然后,基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍,随后,控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。由此,通过对跑批数据进行分片处理,并经由多个线程并行处理各个分片数据,得到分片数据的处理结果,以便基于该处理结果调度所述分布式任务。这样,有利于保证分布式任务调度的幂等性。
图2为本申请实施例提供的另一种分布式任务调度方法的流程示意图。如图2所示,该方法具体包括:
步骤201,接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据。
在本实施例中,步骤201与图1对应实施例中的步骤101基本一致,这里不再赘述。
步骤202,确定用于调度所述分布式任务的实例数量。
在本实施例中,步骤202与图1对应实施例中的步骤102基本一致,这里不再赘述。
步骤203,基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍。
在本实施例中,步骤203与图1对应实施例中的步骤103基本一致,这里不再赘述。
步骤204,控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果。
在本实施例中,针对所述实例数量个线程中的每个线程,可以确定该线程待处理的分片数据。之后,可以控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果。
步骤205,基于所述处理结果,确定所述分片数据集合中是否存在未成功处理的分片数据。
在本实施例中,在每个分片数据的处理过程中,可以生成用于指示该分片数据是否成功处理的处理结果。由此,可以确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
步骤206,在所述各个分片数据中存在未成功处理的分片数据的情况下,经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据,以调度所述分布式任务。
在本实施例中,在存在未成功处理的分片数据(例如分片数据执行中断)的情况下,可以经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据,以调度所述分布式任务。
在本实施例的一些可选的实现方式中,可以采用如下方式,来确定待处理的各个分片数据中,是否存在未成功处理的分片数据:
通过第三单例类,确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
其中,第三单例类,可以是用于确定各个分片数据中是否存在未成功处理的分片数据的单例类。
可以理解,上述可选的实现方式中,采用单例类确定各个分片数据中是否存在未成功处理的分片数据,可以提高分布式任务调度的正确性,并且,可以提高分布式任务调度程序的性能,避免了多余对象的创建导致较高的内存占用。
在本实施例的一些可选的实现方式中,所述第三单例类用于确定各个所述分布式任务对应的所述待处理的各个分片数据中,是否存在未成功处理的分片数据。
可以理解,上述可选的实现方式中,可以通过上述第三单例类来确定各个不同场景下的不同分布式任务对应的各个分片数据中是否存在未成功处理的分片数据,这样,可以复用确定分布式任务对应的分片数据中是否存在未成功处理的分片数据的逻辑。
需要说明的是,除以上所记载的内容之外,本实施例还可以包括图1对应的实施例中所描述的相应技术特征,进而实现图1所示分布式任务调度方法的技术效果,具体请参照图1相关描述,为简洁描述,在此不作赘述。
本申请实施例提供的分布式任务调度方法,在存在未成功处理的分片数据的情况下,可以经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据,而无需将整个分布式任务重新调度,由此,提高了分布式任务异常调度场景下的调度效率。
下面对本申请实施例进行示例性说明,但需要注意的是,本申请实施例可以具有以下所描述的特征,但以下描述并不构成对本申请实施例保护范围的限定。
相关技术中,任务调度方式主要分为两种:
1.单机部署模式:
1)Timer,JDK自带的一个定时调度类,可以简单的实现按某一频度进行任务执行,提供的功能比较单一,无法实现复杂的调度任务。
2)Spring Task,Spring框架提供的任务调度工具,支持注解和配置文件的形式,支持Cron表达式,使用简单但是功能强大。
3)ScheduledExecutorService,JDK自带的基于线程池设计的定时任务类。其每个调度任务都会分配到线程池中的一个线程执行,并发执行,互不影响。
2.分布式集群模式:
1)Quartz,一款功能强大的任务调度器,可以实现较为复杂的调度功能,同时支持分布式调度,但是配置较为复杂。
2)Elasticjob,开源的分布式调度系统,采用zookeeper实现分布式调度,实现任务高可用以及分片实现。
3)XXL-JOB,是一个轻量级的分布式任务调度框架。
4)Saturn,是一个分布式、容错和高可用的作业调度服务框架。
在实际选型中,考虑集成难易程度,功能丰富程度等方面,XXL-JOB是较好的选择。
常用的调度实现方案都是无状态的,在处理大批量数据时,分布式并发需求中没有办法很好的满足,也即无法满足幂等性的要求,需要按实际情况设计专用方案进行使用。
对此,本方案采用如下方式来解决上述技术问题:
首先,在数据调度方面,需要对数据分片之后进行调度。具体包括:
1)对将要进行跑批的数据(也即上述跑批数据)进行分片。
2)按照分布式调度实例数(也即上述实例数量)进行分配。
3)每个调度实例多线程并发执行。也即上述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据。
其次,在使用方式上可以采用如下方式:
1.部署分布式调度服务,创建多个任务调度JOB(任务)。
这里,请参见图3,图3为本申请实施例提供的又一种分布式任务调度方法的流程示意图。
1)数据分片DataShardingJob(也即上述第一单例类),持久化分片后的数据。
2)DataShardingJob执行成功之后触发调度分片任务JobShardingJob(也即上述第二单例类),持久化本次调度分片数(也即上述目标分片数量)。
3)JobShardingJob(类名)执行成功之后进行触发的业务处理BusinessJob,记录处理成功的分片标识。
4)BusinessJob触发子任务BusinessStatusJob(也即上述第三单例类)判断业务处理调度是否都执行完成,如果都完成,则记录主调度,标识本次已完成。
在上述过程中,如果某个调度被中断,重复拉起即可。
1.DataShardingJob会生成主调度记录,分片信息并进行持久化,主调度记录和分片记录是有状态的。并且,仅需一个实例。
2.JobShardingJob主要负责划分每个调度实例的分片数,不做具体指定,即可以支持多次重复执行。并且,仅需一个调度实例。
3.BusinessJob处理完一个分片之后,记录分片状态(也即上述处理结果,表示线程是否成功并行处理完成分片数据),实现重复发起调度时的幂等。上述多个调度实例分布式执行。
4.BusinessStatusJob主要处理主调度的状态,如果存在未完成的分片则返回未完成,不进行后续调度。如果所有分片已完成,则更新主调度状态,并触发后续调度,这样就不会多次触发后续调度。
后续调度可以指定自己的执行策略,可以单机,可以分布式。
其中,可以根据实际情况使用数据库(例如Mysql、Redis、Oracle),配置中心(zookeeper、nacos、apollo、Redis)等实现上述持久化存储。
需要说明的是,除以上所记载的内容之外,本实施例还可以包括以上各实施例中所描述的技术特征,进而实现以上所示分布式任务调度方法的技术效果,具体请参照以上描述,为简洁描述,在此不作赘述。
本申请实施例提供的分布式任务调度方法,可以将数据分片跟业务处理分开,互不干扰。分片的调度可以适配多场景。调度实例动态分配需要处理的分片数。比如分片数24,如果有三个调度实例,则每个可以处理8个分片,如果有4个实例,则每个实例可以处理6个分片。业务处理时记录分片状态,以及处理进度,这样可以保证在系统故障后重新拉起,不会出现数据的重复处理,即幂等性。调度状态处理时,收敛后续触发的子调度,不影响其他功能流程。每个调度都支持重复执行,且不会重复处理数据。此外,对比现有的分布式调度方案,本方案分片相关逻辑都在专门的分片调度里面实现,对实际业务处理逻辑没有侵入。支持多次重复执行,比如数据分片执行时被中断,可以重新拉起进行数据分片。支持多场景使用。DataShardingJob、JobShardingJob、BusinessStatusJob只需要实现一次,即可在多个场景复用,仅需要基于具体的分布式任务重新实现BusinessJob即可。
图4为本申请实施例提供的一种分布式任务调度装置的结构示意图。具体包括:
接收单元401,用于接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
第一确定单元402,用于确定用于调度所述分布式任务的实例数量;
分片单元403,用于基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制单元404,用于控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
在一个可能的实施方式中,在所述基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合之后,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据之前,所述装置还包括:
第二确定单元(图中未示出),用于确定所述分片数据集合的分片信息;
存储单元(图中未示出),用于通过目标单例类,持久化存储所述分片信息。
在一个可能的实施方式中,所述目标单例类包括第一单例类和第二单例类;所述分片信息包括:所述分片数据集合中的各个分片数据以及目标分片数量,所述目标分片数量表示所述分片数据集合包括的分片数据的数量与所述实例数量的商值;以及
所述通过目标单例类,持久化存储所述分片信息,包括:
通过所述第一单例类,持久化存储所述各个分片数据;
通过所述第二单例类,持久化存储所述目标分片数量。
在一个可能的实施方式中,所述目标单例类用于持久化存储各个所述分布式任务对应的所述分片信息。
在一个可能的实施方式中,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,包括:
确定所述实例数量个线程待处理的分片数据;
确定待处理的各个分片数据中,是否存在未成功处理的分片数据;
在所述各个分片数据中存在未成功处理的分片数据的情况下,经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据。
在一个可能的实施方式中,所述确定待处理的各个分片数据中,是否存在未成功处理的分片数据,包括:
通过第三单例类,确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
在一个可能的实施方式中,所述第三单例类用于确定各个所述分布式任务对应的所述待处理的各个分片数据中,是否存在未成功处理的分片数据。
本实施例提供的分布式任务调度装置可以是如图4中所示的分布式任务调度装置,可执行以上所述的各分布式任务调度方法的所有步骤,进而实现以上所述的各分布式任务调度方法的技术效果,具体请参照以上相关描述,为简洁描述,在此不作赘述。
图5为本申请实施例提供的一种电子设备的结构示意图,图5所示的电子设备500包括:至少一个处理器501、存储器502、至少一个网络接口504和其他用户接口503。电子设备500中的各个组件通过总线系统505耦合在一起。可理解,总线系统505用于实现这些组件之间的连接通信。总线系统505除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图5中将各种总线都标为总线系统505。
其中,用户接口503可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。
可以理解,本申请实施例中的存储器502可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(Read-Only Memory,ROM)、可编程只读存储器(Programmable ROM,PROM)、可擦除可编程只读存储器(Erasable PROM,EPROM)、电可擦除可编程只读存储器(Electrically EPROM,EEPROM)或闪存。易失性存储器可以是随机存取存储器(Random Access Memory,RAM),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的RAM可用,例如静态随机存取存储器(Static RAM,SRAM)、动态随机存取存储器(Dynamic RAM,DRAM)、同步动态随机存取存储器(Synchronous DRAM,SDRAM)、双倍数据速率同步动态随机存取存储器(Double Data RateSDRAM,DDRSDRAM)、增强型同步动态随机存取存储器(Enhanced SDRAM,ESDRAM)、同步连接动态随机存取存储器(Synch link DRAM,SLDRAM)和直接内存总线随机存取存储器(DirectRambus RAM,DRRAM)。本文描述的存储器502旨在包括但不限于这些和任意其它适合类型的存储器。
在一些实施方式中,存储器502存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统5021和应用程序5022。
其中,操作系统5021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序5022,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用业务。实现本申请实施例方法的程序可以包含在应用程序5022中。
在本实施例中,通过处理存储器502存储的程序或指令,具体的,可以是应用程序5022中存储的程序或指令,处理器501用于执行各方法实施例所提供的方法步骤,例如包括:
接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
确定用于调度所述分布式任务的实例数量;
基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
上述本申请实施例揭示的方法可以应用于处理器501中,或者由处理器501实现。处理器501可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器501中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器501可以是通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(FieldProgrammable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器502,处理器501读取存储器502中的信息,结合其硬件完成上述方法的步骤。
可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(ApplicationSpecific Integrated Circuits,ASIC)、数字信号处理器(Digital Signal Processing,DSP)、数字信号处理设备(DSPDevice,DSPD)、可编程逻辑设备(Programmable LogicDevice,PLD)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、通用处理器、控制器、微控制器、微处理器、用于执行本申请的上述功能的其它电子单元或其组合中。
对于软件实现,可通过执行本文上述功能的单元来实现本文上述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。
本实施例提供的电子设备可以是如图5中所示的电子设备,可执行以上所述的各分布式任务调度方法的所有步骤,进而实现以上所述的各分布式任务调度方法的技术效果,具体请参照以上相关描述,为简洁描述,在此不作赘述。
本申请实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。
当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在电子设备侧执行的分布式任务调度方法。
上述处理器用于执行存储器中存储的任务调度程序,以实现以下在电子设备侧执行的分布式任务调度方法的步骤:
接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
确定用于调度所述分布式任务的实例数量;
基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
应理解的是,文中使用的术语仅出于描述特定示例实施方式的目的,而无意于进行限制。除非上下文另外明确地指出,否则如文中使用的单数形式“一”、“一个”以及“所述”也可以表示包括复数形式。术语“包括”、“包含”、“含有”以及“具有”是包含性的,并且因此指明所陈述的特征、步骤、操作、元件和/或部件的存在,但并不排除存在或者添加一个或多个其它特征、步骤、操作、元件、部件、和/或它们的组合。文中描述的方法步骤、过程、以及操作不解释为必须要求它们以所描述或说明的特定顺序执行,除非明确指出执行顺序。还应当理解,可以使用另外或者替代的步骤。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种分布式任务调度方法,其特征在于,所述方法包括:
接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
确定用于调度所述分布式任务的实例数量;
基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
2.根据权利要求1所述的方法,其特征在于,在所述基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合之后,所述控制所述实例数量个线程并行处理所述分片数据集合中的分片数据之前,所述方法还包括:
确定所述分片数据集合的分片信息;
通过目标单例类,持久化存储所述分片信息。
3.根据权利要求2所述的方法,其特征在于,所述目标单例类包括第一单例类和第二单例类;所述分片信息包括:所述分片数据集合中的各个分片数据以及目标分片数量,所述目标分片数量表示所述分片数据集合包括的分片数据的数量与所述实例数量的商值;以及
所述通过目标单例类,持久化存储所述分片信息,包括:
通过所述第一单例类,持久化存储所述各个分片数据;
通过所述第二单例类,持久化存储所述目标分片数量。
4.根据权利要求2所述的方法,其特征在于,所述目标单例类用于持久化存储各个所述分布式任务对应的所述分片信息。
5.根据权利要求1-4之一所述的方法,其特征在于,所述基于所述处理结果调度所述分布式任务,包括:
基于所述处理结果,确定所述分片数据集合中是否存在未成功处理的分片数据;
在所述各个分片数据中存在未成功处理的分片数据的情况下,经由所述未成功处理的分片数据对应的线程重新处理所述未成功处理的分片数据。
6.根据权利要求5所述的方法,其特征在于,所述确定待处理的各个分片数据中,是否存在未成功处理的分片数据,包括:
通过第三单例类,确定待处理的各个分片数据中,是否存在未成功处理的分片数据。
7.根据权利要求6所述的方法,其特征在于,所述第三单例类用于确定各个所述分布式任务对应的所述待处理的各个分片数据中,是否存在未成功处理的分片数据。
8.一种分布式任务调度装置,其特征在于,所述装置包括:
接收单元,用于接收分布式任务的调度请求,以及确定所述调度请求指示调度的所述分布式任务的跑批数据;
第一确定单元,用于确定用于调度所述分布式任务的实例数量;
分片单元,用于基于所述实例数量,对所述跑批数据进行分片处理,得到分片数据集合,其中,所述分片数据集合中的分片数据的数量为所述实例数量的整数倍;
控制单元,用于控制所述实例数量个线程并行处理所述分片数据集合中的分片数据,得到分片数据的处理结果,以及基于所述处理结果调度所述分布式任务。
9.一种电子设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现上述权利要求1-7任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现上述权利要求1-7任一所述的方法。
CN202311526954.1A 2023-11-15 2023-11-15 分布式任务调度方法、装置、电子设备及存储介质 Pending CN117785398A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311526954.1A CN117785398A (zh) 2023-11-15 2023-11-15 分布式任务调度方法、装置、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311526954.1A CN117785398A (zh) 2023-11-15 2023-11-15 分布式任务调度方法、装置、电子设备及存储介质

Publications (1)

Publication Number Publication Date
CN117785398A true CN117785398A (zh) 2024-03-29

Family

ID=90393388

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311526954.1A Pending CN117785398A (zh) 2023-11-15 2023-11-15 分布式任务调度方法、装置、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN117785398A (zh)

Similar Documents

Publication Publication Date Title
US11379272B2 (en) Autoscaling using file access or cache usage for cluster machines
US8595732B2 (en) Reducing the response time of flexible highly data parallel task by assigning task sets using dynamic combined longest processing time scheme
Prabhakaran et al. A batch system with efficient adaptive scheduling for malleable and evolving applications
US9396028B2 (en) Scheduling workloads and making provision decisions of computer resources in a computing environment
US9081618B2 (en) Method and apparatus for the scheduling of computing tasks
US9477460B2 (en) Non-transitory computer-readable storage medium for selective application of update programs dependent upon a load of a virtual machine and related apparatus and method
CN111176804A (zh) 包括容器的集群环境中的自动基础设施更新
CA3159788A1 (en) Version releasing method and device based on multi-environment offline task
US20130167151A1 (en) Job scheduling based on map stage and reduce stage duration
KR101626378B1 (ko) 병렬도를 고려한 병렬 처리 장치 및 방법
EP2746941A1 (en) Device and method for optimization of data processing in a MapReduce framework
CN102609296A (zh) 虚拟机分支和并行执行
CN103842959A (zh) 在计算机系统中维持操作数活性信息
US9086911B2 (en) Multiprocessing transaction recovery manager
CN114168271B (zh) 一种任务调度方法、电子设备及存储介质
US8458710B2 (en) Scheduling jobs for execution on a computer system
US8612597B2 (en) Computing scheduling using resource lend and borrow
Hofer et al. Industrial control via application containers: Migrating from bare-metal to IAAS
US10360079B2 (en) Architecture and services supporting reconfigurable synchronization in a multiprocessing system
CN100440153C (zh) 处理器
CN114253713A (zh) 一种基于reactor的异步批处理方法及系统
EP3039544B1 (en) Method and system for assigning a computational block of a software program to cores of a multi-processor system
Herault et al. Optimal cooperative checkpointing for shared high-performance computing platforms
CN117785398A (zh) 分布式任务调度方法、装置、电子设备及存储介质
CN109840137B (zh) 一种跨核调度方法和装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination