CN110362315A - 基于dag的软件系统调度方法及装置 - Google Patents
基于dag的软件系统调度方法及装置 Download PDFInfo
- Publication number
- CN110362315A CN110362315A CN201910644797.1A CN201910644797A CN110362315A CN 110362315 A CN110362315 A CN 110362315A CN 201910644797 A CN201910644797 A CN 201910644797A CN 110362315 A CN110362315 A CN 110362315A
- Authority
- CN
- China
- Prior art keywords
- node
- dag
- task
- state
- variable
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/901—Indexing; Data structures therefor; Storage structures
- G06F16/9024—Graphs; Linked lists
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种基于DAG的软件系统调度方法及装置,所述方法包括:解析DAG任务,生成DAG节点变量,将DAG节点变量送入带有索引的DAG节点数组中;遍历DAG节点数组,找到根节点,发执行根节点任务,各节点执行对应的线程;在节点完成任务运行后,将对应的节点状态设置为完成状态,生成对应的通知变量送入先进先出队列中;消费先进先出队列中成员;每当先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。本发明解决了软件系统中的调度通用和自适应问题,处理了大数据和人工智能领域中出现的功能和任务迭代性要求,降低了相关软件应用开发的复杂度和出错率,提高了系统工作效率。
Description
技术领域
本发明涉及软件调度系统技术领域,尤指一种基于DAG的软件系统调度方法及装置。
背景技术
当下,随着大数据和人工智能的日益发展和广泛应用,基于大数据和人工智能的软件应用开发相比传统的软件开发体现出许多不同的模式特性:一个软件项目往往由很多不同的应用模块和开发步骤构成,且相互之间又具备一定的并发、从属或依赖关系,体现出一定的紧耦合度和复杂性。如,一个完整的机器学习项目通常会分解成几个步骤完成:1、实际问题抽象成数学问题;2、数据获取、清晰;3、特征工程;4、模型训练、诊断、调优;5、模型验证、误差分析;6、模型融合;7、服务上线运行。同时还要求,其中的某一步操作需要具备迭代功能,某一步操作失败后系统重新拉起能从该步操作继续执行而非从头执行。
面对上述新特性,传统的软件开发策略往往建议软件开发人员在项目开发过程中通过业务逻辑处理的方式来实现不同模块间的逻辑关系,但是这种策略工作量大、灵活性和自适应度差,即每一套软件项目就要实现一套单独的工作处理流程,特别是针对大数据和人工智能中要求的数据和功能迭代,更会显得力不从心、无法满足。
发明内容
为了解决上述问题,本发明实施例提供一种基于DAG的软件系统调度方法,所述方法包括:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的 DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
可选的,在本发明一实施例中,每当所述先进先出队列中成员被消费后,进入更新过程包括:获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
可选的,在本发明一实施例中,所述方法还包括:校验DAG任务的ID值,判断数据库中DAG任务状态表中是否存在所述ID值;若是,则遍历数据库中DAG节点状态表中的各节点的节点状态;当所述节点状态为非成功时,进入存量续跑过程;或当所述节点状态为成功时,进入重跑过程。
可选的,在本发明一实施例中,所述方法还包括:当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的DAG节点数组。
本发明实施例还提供一种基于DAG的软件系统调度装置,所述装置包括:
解析模块,用于解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
根节点模块,用于遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
通知变量模块,用于在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
成员消费模块,用于消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
更新模块,用于每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
可选的,在本发明一实施例中,所述更新模块包括:目标节点单元,用于获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;节点单元,用于获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;子节点通知变量单元,用于当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
可选的,在本发明一实施例中,所述装置还包括:校验模块,用于校验DAG任务的ID值,判断数据库中DAG任务状态表中是否存在所述ID值;节点状态模块,用于若数据库中DAG任务状态表中存在所述ID值,则遍历数据库中DAG节点状态表中的各节点的节点状态;存量续跑或重跑模块,当校验模块发现DAG任务的ID 值存在于数据库中DAG任务状态表后,DAG任务进入存量续跑或重跑过程;其中,存量续跑过程包括:检查所述节点状态为非成功时,进入对应节点的存量续跑过程;重跑过程包括:当所述节点状态为成功且节点Hash值与数据库记录的对应节点Hash 值不一致时,进入对应节点的重跑过程。否则,所述节点认定为PASS节点,产生的中间数据或结果可被当前任务复用,无需重新执行。
可选的,在本发明一实施例中,所述装置还包括:任务结束模块,用于当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的 DAG节点数组。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的 DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的 DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
本发明解决和克服了软件系统中模块与模块间、任务与任务间的调度通用和自适应问题,特别是很好地处理了大数据和人工智能领域中出现的功能和任务迭代性要求,降低了相关软件应用开发的复杂度和出错率,提高了系统工作效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一种基于DAG的软件系统调度方法的流程图;
图2为本发明实施例中机器学习流程示意图;
图3为本发明实施例中机器学习DAG流程示意图;
图4为本发明实施例中算法DAG示例图;
图5为本发明实施例一种基于DAG的软件系统调度装置的结构示意图。
具体实施方式
本发明实施例提供一种基于DAG的软件系统调度方法及装置。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示为本发明实施例一种基于DAG的软件系统调度方法的流程图,图中所示方法包括:
步骤S1,解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
步骤S2,遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
步骤S3,在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
步骤S4,消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
步骤S5,每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
作为本发明的一个实施例,每当所述先进先出队列中成员被消费后,进入更新过程包括:获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
作为本发明的一个实施例,方法还包括:校验DAG任务的ID值,判断数据库中DAG任务状态表中是否存在所述ID值;若是,则遍历数据库中DAG节点状态表中的各节点的节点状态;当所述节点状态为非成功时,进入存量续跑过程;或当所述节点状态为成功时,进入重跑过程。否则,所述节点认定为PASS节点,产生的中间数据或结果可被当前任务复用,无需重新执行。
当DAG任务ID在数据库存在时,则进入DAG任务续跑\重跑过程:校验各节点状态并将节点的输入Hash值与数据库中记录的上一次节点Hash值进行匹配。若节点状态为成功且两次Hash值一致,则认为该节点为PASS节点,节点上一次产生的中间数据与结果可被当前任务复用,无需重新执行,直接遍历下一层节点。
作为本发明的一个实施例,方法还包括:当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的DAG节点数组。
在本发明一具体实施例中,DAG(Directed Acyclic Graph),全称“有向无环图”,是指任意一条边有方向,且不存在环路的图。在数学与计算机科学中,如果一个有向图从某个顶点出发,无法经过若干条边回到该点,则这个图是一个有向无环图或有向非循环图。通常,整个软件系统中的核心任务调度部分可以解析成一张DAG图。如一个完整的机器学习项目工作流程可以表示如图2所示。细化图2主要环节,可以解析流程成一张类似如图3的DAG示例图。
图3中固定数据源的数据是固定的,流数据源的数据是不断更新的,因此数据汇总表是依赖数据表A和B以及不断更新数据的流数据源。只有当数据表A和B都准备完毕后,才会构成基础数据汇总表进行下一步操作,而流数据作为实时更新的数据对数据汇总表扮演“迭代”的角色,即后续的特征工程、模型训练和最后的模型也是依次迭代的。
为了更好讲述本发明的算法,举例一个比较复杂的DAG图,即一个系统的流程可以被解析成如图4所示的DAG图,其中每一个节点可以看做是流程中的一个操作算子或者步骤。通过图4可以明显看到算子之间的多方依赖和并行关系,并且依赖关系中体现出明显的“宽依赖”和“窄依赖”。从数据结构的角度讲,上述DAG图就是一颗树,树的节点可以是没有父节点的根节点(Root Node),可以是拥有一个或多个父节点以及一个或多个子节点的子节点(Child Node),也可以是没有子节点的叶子节点(Leaf Node),算法需要能够识别各类节点的依赖和并行关系,并组装动态工作流依次且并发处理各类节点。
通过XML的方式可以将图3的DAG抽象成具体的数据表达如下:
其中,Id的值在DAG中必须是唯一的,会被用作数组的索引值。
本发明方法核心概念是Updater(更新器),即每一个算子操作完成后会生成一个Updater,去通知DAG进行依赖状态检查和判断是否触发新的工作流拉起算子运行。
本发明方法主要有两块构成,一块是完整DAG调度处理,即从头到尾完成一次完整的DAG调度处理;另外一部分是存量续跑\重跑,主要面向任务迭代、算子报错等状况时的调度处理流程。
在本发明一具体实施例中,针对图4的DAG示例图,完成一次完整的DAG调度主要包含如下步骤:
(1)初始化
解析DAG任务(XML文件),生成DAG节点变量并全部送入DAGNodeContainer (带有索引的DAG节点数组,key=id),将所有节点状态置为“WATING”状态。
开启DAGManager(DAGScheduler系统管理员)对DAGNodeContainer中节点的状态监控。
(2)启动
遍历DAGNodeContainer找到根节点(Parent=null的Root Node)。
将根节点状态置为“READY”,并发执行根节点任务,一个节点执行对应一个线程,同时置节点状态为“RUNNING”。
启动FIFO队列(先进先出队列)DAGStatusFIFO的运行,开始消费(pop)队列成员,成员是由节点完成任务运行后送进来的通知变量,我们定义为DAGUpdater。成员被消费后会被移除出队列。
只要有根节点执行完毕,则置该节点状态为“FINISHED”。同时生成该节点的消息通知变量DAGUpdater并送入上面所说的DAGStatusFIFO中被消费。
当DAGStatusFIFO中有DAGUpdater被消费时,即进入下面的DAG状态刷新过程。
(3)DAG刷新
当DAGStatusFIFO中有DAGUpdater成员被消费时,即进入一次DAG刷新过程,步骤为:
A.获取当前被消费的DAGUpdater成员信息,找到是哪个节点发出。
B.获取该节点的所有子节点。如果没有则认为到达树梢,终止后续操作。
C.对每个子节点追溯它的所有父节点,检查所有父节点的当前状态:
如果子节点有任一个父节点的状态不为“FINISHED”则认为当前子节点不具备运行条件,退出对该子节点的检查。
如果子节点的所有父节点状态均为“FINISHED”,则认为该子节点具备运行条件,置该子节点状态为“READY”并分配一个子线程运行其任务。
D.如果节点的所有子节点均不满足运行条件,维持原有“WAITING”节点状态并退出。
如果节点有若干子节点满足运行条件被分配子线程运行,则置这些子节点的运行状态为“RUNNING”。当任务完成时置节点状态为“FINISHED”并生成对应的 DAGUpdater变量送入DAGStatusFIFO排队等待被消费触发下一次DAG刷新(重复 A->D)。
(4)结束
当DAGManager对DAGNodeContainer中节点的状态监控发现所有的节点状态均为“FINISHED”时,认为此次调度任务完成,结束DAGStatusFIFO消费、清空DAGNodeContainer、销毁DAG节点变量。
(5)容错处理
当任一执行节点算子任务的子线程发现执行算子失败后,置垓节点状态为“FAILED”,同时通知DAGManager停止DAGStatusFIFO继续消费,清空 DAGNodeContainer、销毁DAG节点变量。
(6)多DAG任务处理
单DAG可以视作一颗树,多DAG任务可以视作一个DAG森林。
DAGNodeContainer可以变成一个DAGNodeContainer数组,每个成员对应一个任务,而DAGManager统一管理这个DAGNodeContainer数组,任务执行完毕把成员从数组移除,等待下一个任务填充。
在本发明一具体实施例中,存量续跑,因为各种原因如系统内存不够等工作环境问题导致的调度任务某一步算子执行失败。在修复环境问题(无需修改算子)后,为了节约运算时间和计算资源,调度任务从当前算子开始可继续执行之前的调度任务。
存量重跑,已经完成过一次成功的调度任务,但是因为数据更新或者模型调优等需要,只需要更新任务的某一步或多步算子后进行的任务重跑。为了节约运算时间和计算资源,在更新算子命令后从该算子开始执行任务调度。
具体的处理思路是在DagXML中的Node节点下新增HashCode子节点,Value 值为当前Node算子(Executor节点值)的hash值。改进后的XML数据结构表示如下,对应于上述数据表达:
调度处理流程为:
(1)校验触发DAG的DAG任务id值(唯一性):
若数据库记录DAG任务状态的表中存在该任务id值记录,即认为是一个DAG 存量续/重跑任务;
若数据库记录DAG任务状态的表中不存在该值记录,则认为这是一个新的DAG 调度任务,按照一次完整的任务调度流程处理。
(2)若步骤1中认定DAG任务为存量续/重跑模式,在遍历每个DAG树节点前先去数据库记录DAG节点状态的表中检查记录的该节点的算子执行状态:
若节点算子的执行状态为“非成功”,则认为DAG任务为存量续跑,重新执行该节点和依赖于该节点的所有子节点的全部算子;
若节点算子的执行状态为“成功”,则执行步骤3。
(3)计算节点算子的Hash值,与数据库记录DAG节点状态的表中对应的节点 hashcode值进行比对:
如果值一致,则认为该节点为可复用节点,无需执行该节点算子,直接进入下一步节点检查;
如果值不一致,则认为DAG任务是存量重跑,更新数据库表中对应节点记录的hash code值,重新执行该节点和依赖于该节点的所有子节点的全部算子。
本发明优点在于:
1、适用性强
不同类型的软件系统,内部可能存在不同依赖关系的任务模块,造成执行顺序错综复杂。单独用业务逻辑处理的方式不仅增加了开发工作量和复杂率,还大大提高了系统出错率。使用DAG的思路将系统的工作流程解析成一张有序清晰的DAG关系图来进行调度处理,使得内部业务耦合关系变得清晰,有助于更好地进行任务调度处理,便于系统开发且大大降低出错率。
2、通用性强
不同的软件系统可以移植、复用该套调度框架进行二次开发,开发人员只需要定义实现自己系统中的业务处理算子,无需关心算子之间的执行顺序,也无需修改调度框架中的运行机制和流程。
3、时效性高
对并行算子任务进行了并发处理,提高了工作效率,除此之外,还针对可能出现的存量续跑\重跑做出了优化处理,使得系统不会因为某一处的任务模块出错而导致整个系统任务前功尽弃,使得其他已经成功且可以复用无需执行的任务模块被无谓的重启拉起执行。面对数据处理量巨大且处理比较耗时的软件系统,该方法无疑大大节约了执行时间,提高了系统工作时效性。
本发明解决和克服了软件系统中模块与模块间、任务与任务间的调度通用和自适应问题,特别是很好地处理了大数据和人工智能领域中出现的功能和任务迭代性要求,降低了相关软件应用开发的复杂度和出错率,提高了系统工作效率。
如图5所示为本发明实施例一种基于DAG的软件系统调度装置的结构示意图,图中所示装置包括:
解析模块10,用于解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
根节点模块20,用于遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
通知变量模块30,用于在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
成员消费模块40,用于消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
更新模块50,用于每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
作为本发明的一个实施例,更新模块包括:目标节点单元,用于获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;节点单元,用于获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;子节点通知变量单元,用于当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
作为本发明的一个实施例,装置还包括:校验模块,用于校验DAG任务的ID 值,判断数据库中DAG任务状态表中是否存在所述ID值;节点状态模块,用于若数据库中DAG任务状态表中存在所述ID值,则遍历数据库中DAG节点状态表中的各节点的节点状态;存量续跑或重跑模块,当校验模块发现DAG任务的ID值存在于数据库中DAG任务状态表后,DAG任务进入存量续跑或重跑过程;其中,存量续跑过程包括:检查所述节点状态为非成功时,进入对应节点的存量续跑过程;重跑过程包括:当所述节点状态为成功且节点Hash值与数据库记录的对应节点Hash值不一致时,进入对应节点的重跑过程。否则,所述节点认定为PASS节点,产生的中间数据或结果可被当前任务复用,无需重新执行。
作为本发明的一个实施例,装置还包括:任务结束模块,用于当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的DAG节点数组。
基于与上述一种基于DAG的软件系统调度方法相同的申请构思,本发明还提供了上述一种基于DAG的软件系统调度装置。由于该一种基于DAG的软件系统调度装置解决问题的原理与一种基于DAG的软件系统调度方法相似,因此该一种基于 DAG的软件系统调度装置的实施可以参见一种基于DAG的软件系统调度方法的实施,重复之处不再赘述。
本发明解决和克服了软件系统中模块与模块间、任务与任务间的调度通用和自适应问题,特别是很好地处理了大数据和人工智能领域中出现的功能和任务迭代性要求,降低了相关软件应用开发的复杂度和出错率,提高了系统工作效率。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的 DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的 DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
基于与上述一种基于DAG的软件系统调度方法相同的申请构思,本发明还提供了上述一种计算机设备及一种计算机可读存储介质。由于该一种计算机设备及一种计算机可读存储介质解决问题的原理与一种基于DAG的软件系统调度方法相似,因此该一种计算机设备及一种计算机可读存储介质的实施可以参见一种基于DAG的软件系统调度方法的实施,重复之处不再赘述。
本发明解决和克服了软件系统中模块与模块间、任务与任务间的调度通用和自适应问题,特别是很好地处理了大数据和人工智能领域中出现的功能和任务迭代性要求,降低了相关软件应用开发的复杂度和出错率,提高了系统工作效率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读取存储介质中,比如ROM/RAM、磁碟、光盘等。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于DAG的软件系统调度方法,其特征在于,所述方法包括:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
2.根据权利要求1所述的方法,其特征在于,所述每当所述先进先出队列中成员被消费后,进入更新过程包括:
获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;
获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;
当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
校验DAG任务的ID值,判断数据库中DAG任务状态表中是否存在所述ID值;
若是,则遍历数据库中DAG节点状态表中的各节点的节点状态;
当所述节点状态为非成功时,进入存量续跑过程;或
当所述节点状态为成功时,进入重跑过程。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的DAG节点数组。
5.一种基于DAG的软件系统调度装置,其特征在于,所述装置包括:
解析模块,用于解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
根节点模块,用于遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
通知变量模块,用于在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
成员消费模块,用于消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
更新模块,用于每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
6.根据权利要求5所述的装置,其特征在于,所述更新模块包括:
目标节点单元,用于获取被消费的通知变量成员信息,确定发出被消费通知变量的目标节点;
节点单元,用于获取所述目标节点的所有子节点,并确定各子节点对应的所有父节点及各父节点的节点状态;
子节点通知变量单元,用于当子节点对应的所有父节点的节点状态均为完成状态时,将该子节点的节点状态设置为准备状态,并分配给该子节点线程以运行任务,在该子节点完成任务运行后,将该子节点的节点状态设置为完成状态,并生成对应的通知变量送入所述先进先出队列中。
7.根据权利要求5所述的装置,其特征在于,所述装置还包括:
校验模块,用于校验DAG任务的ID值,判断数据库中DAG任务状态表中是否存在所述ID值;
节点状态模块,用于若数据库中DAG任务状态表中存在所述ID值,则遍历数据库中DAG节点状态表中的各节点的节点状态;
存量续跑或重跑模块,当校验模块发现DAG任务的ID值存在于数据库中DAG任务状态表后,DAG任务进入存量续跑或重跑过程;其中,存量续跑过程包括:检查所述节点状态为非成功时,进入对应节点的存量续跑过程;重跑过程包括:当所述节点状态为成功且节点Hash值与数据库记录的对应节点Hash值不一致时,进入对应节点的重跑过程。
8.根据权利要求5所述的装置,其特征在于,所述装置还包括:任务结束模块,用于当各节点的节点状态均为完成状态时,结束所述先进先出队列的消费,以及清空带有索引的DAG节点数组。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
解析DAG任务,生成DAG节点变量,将所述DAG节点变量送入带有索引的DAG节点数组中,并将各节点的节点状态设置为等候状态;
遍历所述DAG节点数组,找到根节点,并发执行根节点任务,各节点执行对应的线程,将执行线程的各节点的节点状态设置为运行状态;
在节点完成任务运行后,将对应的节点状态设置为完成状态,并生成对应的通知变量送入先进先出队列中;
消费所述先进先出队列中成员,其中,所述成员为各节点完成任务运行后送入的通知变量;
每当所述先进先出队列中的成员被消费后,进入更新过程,直到各节点的节点状态均为完成状态时,调度任务完成。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910644797.1A CN110362315B (zh) | 2019-07-17 | 2019-07-17 | 基于dag的软件系统调度方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910644797.1A CN110362315B (zh) | 2019-07-17 | 2019-07-17 | 基于dag的软件系统调度方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110362315A true CN110362315A (zh) | 2019-10-22 |
CN110362315B CN110362315B (zh) | 2023-05-12 |
Family
ID=68220220
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910644797.1A Active CN110362315B (zh) | 2019-07-17 | 2019-07-17 | 基于dag的软件系统调度方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110362315B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112130812A (zh) * | 2020-08-04 | 2020-12-25 | 中科天玑数据科技股份有限公司 | 一种基于数据流混合编排的分析模型构建方法及系统 |
CN112463131A (zh) * | 2020-11-02 | 2021-03-09 | 江苏长虹智能装备股份有限公司 | 一种用于多线性库区先进先出的编程方法 |
CN112799797A (zh) * | 2019-11-14 | 2021-05-14 | 北京沃东天骏信息技术有限公司 | 一种任务管理的方法和装置 |
CN116737349A (zh) * | 2023-08-16 | 2023-09-12 | 中国移动紫金(江苏)创新研究院有限公司 | 流式数据处理方法、系统及存储介质 |
CN117149887A (zh) * | 2023-11-01 | 2023-12-01 | 建信金融科技有限责任公司 | 一种异常处理方法、装置、电子设备及计算机可读介质 |
WO2023224549A3 (zh) * | 2022-05-16 | 2024-01-04 | 脸萌有限公司 | 调度方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6918111B1 (en) * | 2000-10-03 | 2005-07-12 | Sun Microsystems, Inc. | System and method for scheduling instructions to maximize outstanding prefetches and loads |
US20080300851A1 (en) * | 2007-06-04 | 2008-12-04 | Infosys Technologies Ltd. | System and method for application migration in a grid computing environment |
CN106293971A (zh) * | 2016-08-15 | 2017-01-04 | 张家林 | 一种分布式任务调度的方法和装置 |
CN108984284A (zh) * | 2018-06-26 | 2018-12-11 | 杭州比智科技有限公司 | 基于离线计算平台的dag任务调度方法及装置 |
CN109643255A (zh) * | 2016-08-12 | 2019-04-16 | 华为技术有限公司 | 在云系统中自动检测分布式并发错误 |
CN109871270A (zh) * | 2019-01-22 | 2019-06-11 | 深圳大学 | 调度方案生成方法及装置 |
-
2019
- 2019-07-17 CN CN201910644797.1A patent/CN110362315B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6918111B1 (en) * | 2000-10-03 | 2005-07-12 | Sun Microsystems, Inc. | System and method for scheduling instructions to maximize outstanding prefetches and loads |
US20080300851A1 (en) * | 2007-06-04 | 2008-12-04 | Infosys Technologies Ltd. | System and method for application migration in a grid computing environment |
CN109643255A (zh) * | 2016-08-12 | 2019-04-16 | 华为技术有限公司 | 在云系统中自动检测分布式并发错误 |
CN106293971A (zh) * | 2016-08-15 | 2017-01-04 | 张家林 | 一种分布式任务调度的方法和装置 |
CN108984284A (zh) * | 2018-06-26 | 2018-12-11 | 杭州比智科技有限公司 | 基于离线计算平台的dag任务调度方法及装置 |
CN109871270A (zh) * | 2019-01-22 | 2019-06-11 | 深圳大学 | 调度方案生成方法及装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112799797A (zh) * | 2019-11-14 | 2021-05-14 | 北京沃东天骏信息技术有限公司 | 一种任务管理的方法和装置 |
CN112799797B (zh) * | 2019-11-14 | 2024-04-16 | 北京沃东天骏信息技术有限公司 | 一种任务管理的方法和装置 |
CN112130812A (zh) * | 2020-08-04 | 2020-12-25 | 中科天玑数据科技股份有限公司 | 一种基于数据流混合编排的分析模型构建方法及系统 |
CN112463131A (zh) * | 2020-11-02 | 2021-03-09 | 江苏长虹智能装备股份有限公司 | 一种用于多线性库区先进先出的编程方法 |
WO2023224549A3 (zh) * | 2022-05-16 | 2024-01-04 | 脸萌有限公司 | 调度方法、装置、设备及存储介质 |
CN116737349A (zh) * | 2023-08-16 | 2023-09-12 | 中国移动紫金(江苏)创新研究院有限公司 | 流式数据处理方法、系统及存储介质 |
CN116737349B (zh) * | 2023-08-16 | 2023-11-03 | 中国移动紫金(江苏)创新研究院有限公司 | 流式数据处理方法、系统及存储介质 |
CN117149887A (zh) * | 2023-11-01 | 2023-12-01 | 建信金融科技有限责任公司 | 一种异常处理方法、装置、电子设备及计算机可读介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110362315B (zh) | 2023-05-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110362315A (zh) | 基于dag的软件系统调度方法及装置 | |
CN107239335B (zh) | 分布式系统的作业调度系统及方法 | |
Gu et al. | Liquid: Intelligent resource estimation and network-efficient scheduling for deep learning jobs on distributed GPU clusters | |
Qian et al. | Timestream: Reliable stream computation in the cloud | |
CN105719126B (zh) | 一种基于生命周期模型的互联网大数据任务调度的系统及方法 | |
US20130227194A1 (en) | Active non-volatile memory post-processing | |
US6510531B1 (en) | Methods and systems for testing parallel queues | |
CN111400011B (zh) | 一种实时任务调度方法、系统、设备及可读存储介质 | |
Wu et al. | Real-time load balancing scheduling algorithm for periodic simulation models | |
CN100484140C (zh) | 一种规范驱动的网格工作流描述和验证方法 | |
CN101685452B (zh) | 数据仓库调度方法及调度系统 | |
CN111400017A (zh) | 一种分布式复杂任务调度方法 | |
Lai et al. | Merak: An efficient distributed dnn training framework with automated 3d parallelism for giant foundation models | |
CN114756629B (zh) | 基于sql的多源异构数据交互分析引擎及方法 | |
CN103294595A (zh) | 一种基于遗传算法的软件修复方法 | |
CN106127365A (zh) | 定量遥感产品在线交互式自主生产方法 | |
Mendizabal et al. | High performance recovery for parallel state machine replication | |
Michael et al. | Teaching rigorous distributed systems with efficient model checking | |
CN113641739B (zh) | 一种基于Spark的智能数据转换方法 | |
CN113485911A (zh) | 一种基于银行业务的测试数据生成平台 | |
CN109947459A (zh) | 一种软件产品构建方法 | |
CN116150263A (zh) | 一种分布式图计算引擎 | |
CN101256491A (zh) | 基于工作流的可信软件过程的定义方法 | |
Souri | Formal specification and verification of a data replication approach in distributed systems | |
CN112581080A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |