CN113419829B - 作业调度方法、装置、调度平台及存储介质 - Google Patents
作业调度方法、装置、调度平台及存储介质 Download PDFInfo
- Publication number
- CN113419829B CN113419829B CN202110698329.XA CN202110698329A CN113419829B CN 113419829 B CN113419829 B CN 113419829B CN 202110698329 A CN202110698329 A CN 202110698329A CN 113419829 B CN113419829 B CN 113419829B
- Authority
- CN
- China
- Prior art keywords
- node
- state
- workflow
- target
- level
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本申请实施例提供了一种作业调度方法、装置、调度平台及存储介质,该方法应用于大数据技术领域,该方法包括:获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令;根据所述调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果;利用所述调度结果再次对所述第一节点进行状态更新。采用本申请,可以提升满足对复杂业务场景的作业调度需求。本申请涉及区块链技术,如将至少一个节点中每个节点的状态写入区块链中。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及大数据技术领域,尤其涉及一种作业调度方法、装置、调度平台及存储介质。
背景技术
分布式系统要做的任务就是把多台机器有机的组合、连接起来,让其协同完成一件任务,这个任务可以是计算任务,也可以是存储任务,等等。在现在的大型分布式系统中,往往需要许多作业协作起来,共同完成一个任务,这时就需要系统有能力把许多作业协作关系定义到一个规则里,并根据规则里定义的作业先后顺序,或串或并来调度作业来完成一个大任务。然而,目前的作业调度系统作业调度的业务场景过于简单,不能满足对复杂业务场景的作业调度需求。
发明内容
本申请实施例提供了一种作业调度方法、装置、调度平台及存储介质,可以满足对复杂的业务场景的作业调度需求。
第一方面,本申请实施例提供了一种作业调度方法,所述方法包括:
获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;
根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;
将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令;
根据所述调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果;
利用所述调度结果再次对所述第一节点进行状态更新。
可选的,所述根据所述运行流水确定所述第一工作流的满足运行条件的第一节点,包括:
根据所述第一工作流的至少一个节点中每个节点的状态,从所述至少一个节点中筛选出目标节点集合,所述目标节点集合中各节点的状态为目标状态;
根据所述作业依赖关系图的快照确定所述目标节点集合中各节点的目标前置节点,并根据所述目标节点集合中各节点的目标前置节点的状态,从所述目标节点集合中确定出满足运行条件的第一节点。
可选的,所述方法还包括:
确定目标节点的上一级节点的类型,所述目标节点为以下任一项:为所述第一工作流的结束节点、为所述第一工作流嵌套的第二工作流的结束节点、为所述第一工作流的为目标状态的节点;
在所述目标节点的上一级节点的类型为断点节点时,判断所述目标节点的上一级节点的状态是否为跳过或暂停;在所述目标节点的上一级节点的状态为跳过的情况下,追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;在所述目标节点的上一级节点的状态为暂停的情况下,将暂停确定为状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为断点节点时,判断所述目标节点的上一级节点的类型是否为运算符节点;在所述目标节点的上一级节点的类型为运算符节点时,若能取到所述目标节点的上一级节点的所有上一级节点的状态,则根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果;若未取到所述目标节点的上一级节点的部分或全部上一级节点的状态,则从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止,并根据追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为运算符节点时,判断所述目标节点的上一级节点的类型是否为作业节点;若所述目标节点的上一级节点的类型为作业节点,则判断所述目标节点的上一级节点是否有状态;若所述目标节点的上一级节点有状态,则获取所述目标节点的上一级节点的状态作为状态运算结果;若所述目标节点的上一级节点没有状态,则追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果;在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为作业节点时,判断所述目标节点的上一级节点的类型是否为工作流节点,若是,则获取所述目标节点的上一级节点的状态,将所述目标节点的上一级节点的状态作为状态运算结果,若否,则确定所述目标节点的上一级节点为分隔节点,追溯所述目标节点的上一级节点的父节点,并在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;
在所述目标节点为所述第一工作流的结束节点时,所述状态运算结果为所述第一工作流的状态;
在所述目标节点为所述第二工作流的结束节点时,所述状态运算结果为所述第二工作流的状态。
可选的,所述根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定所述第一工作流的状态,包括:
确定所述所有上一级节点中每个上一级节点的状态的优先级;
根据所述每个上一级节点的状态的优先级以及所述目标节点的上一级节点指示的运算符,确定所述第一工作流的状态。
可选的,所述方法还包括:
通过用户终端输出作业编排界面,以便所述用户终端根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置,并根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建所述第一工作流的作业依赖关系图;
获取所述用户终端对所述第一工作流的作业依赖关系图的反馈,并保存反馈的所述第一工作流的作业依赖关系图。
可选的,所述方法还包括:
获取所述第一工作流的至少一个节点中每个节点的状态;
将所述第一工作流的作业依赖关系数据以及所述每个节点的状态发送至用户终端,以便所述用户终端利用所述每个节点的状态加工所述作业依赖关系数据,得到加工后的作业依赖关系数据;所述依赖关系数据为所述第一工作流的作业依赖关系图或所述第一工作流的作业依赖关系图的快照;
接收所述用户终端根据所述加工的依赖关系数据发送的状态更新指令,根据所述状态更新指令对所述第一工作流的第二节点进行状态更新,并触发所述获取第一工作流的运行流水的步骤。
可选的,所述获取第一工作流的运行流水,包括:
在检测到为第一工作流配置的触发时间到达时,生成运算指令,并根据运算指令创建第一工作流的运行流水;或,
在利用所述第一工作流的第三节点的调度结果再次对所述第三节点进行状态更新后,读取所述第一工作流的运行流水。
第二方面,本申请实施例提供了一种作业调度装置,应用于调度平台,所述装置包括:
获取模块,用于获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;
确定模块,用于根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;
更新模块,用于将所述第一节点的状态更新为运行状态;
指令生成模块,用于针对所述第一节点生成调度指令;
调度模块,用于根据所述调度指令调度目标作业集群执行第一节点对应的作业;
所述获取模块,还用于获取调度结果;
所述更新模块,还用于利用所述调度结果再次对所述第一节点进行状态更新。
第三方面,本申请实施例提供了一种调度平台,包括处理器和存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如第一方面所述的方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如第一方面所述的方法。
综上所述,调度平台获取第一工作流的运行流水,并根据运行流水确定第一工作流的满足运行条件的第一节点;调度平台将第一节点的状态更新为运行状态,并针对第一节点生成调度指令,并根据调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果,从而利用调度结果再次对第一节点进行状态更新,调度平台基于工作流的运行流水来对工作流中的各项作业进行调度,能够满足对复杂业务场景的作业调度过程。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a是本申请实施例提供的一种节点的类型的示意图;
图1b是本申请实施例提供的一种状态优先级关系的示意图;
图1c是本申请实施例提供的一种状态流转的示意图;
图1d是本申请实施例提供的另一种状态流转的示意图;
图1e是本申请实施例提供的一种作业依赖关系图的示意图;
图1f是本申请实施例提供的另一种作业依赖关系图的示意图;
图1g是本申请实施例提供的另一种作业依赖关系图的示意图;
图1h是本申请实施例提供的一种状态更新算法的流程示意图;
图2是本申请实施例提供一种作业调度方法的流程示意图;
图3是本申请实施例提供的一种调度平台的结构示例图;
图4是本申请实施例提供的一种作业调度装置的结构示例图;
图5是本申请实施例提供的另一种调度平台的结构示例图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行描述。
其中,本申请实施例提及的组件封装了实现对应功能的方法。例如,工作流管理组件封装了用于实现工作流管理功能的方法。
其中,本申请实施例提及的引擎为用于实现对应功能的开发程序或核心组件。例如,工作流运算引擎为用于实现工作流运算功能的开发程序或核心组件。
其中,本申请实施例提及的节点的类型可以分为:start开始节点、end结束节点、运算符节点(包括or或节点、and与节点,等等)、split分隔节点、breakpoint断点节点、job作业节点、workflow工作流节点,具体参见图1a。其中,or节点指示的运算符为“or”或“或”,and节点指示的运算符为“and”或“与”。
其中,本申请实施例的以下三种类型的节点有状态,分别为断点节点、作业节点和工作流节点。其它类型的节点没有状态。在一个实施例中,在节点的类型为断点节点时,该节点的状态可以为skipped跳过或paused暂停。在节点的类型为作业节点或工作流节点时,该节点的状态可以为以下中的一种:stopping正被停止、stopped已被停止、failed失败、paused、await等待、timeout超时、running运行、ready准备、completed完成、skipped。
在一个实施例中,不同状态可以具有不同的优先级,状态优先级关系可以参见图1b。由图1b可以看出,优先级由高到低依次为stopping、stopped、failed、paused、await、timeout、running、ready、completed、skipped。其中,stopping和stopped为并列优先级。其中,不同状态可以通过不同颜色表示。
在一个实施例中,对于任一为作业节点的节点或为工作流节点的节点,该节点的状态流转关系,可以参见图1c。也就是说,该节点对应的作业的状态变更方式或该节点对应的工作流的状态变更方式,可以参见图1c。以为作业节点的节点为例,该节点在满足运行条件时,该节点的状态将由ready变为running。该节点对应的作业在运行过程中,若运行失败,则该节点的状态将由running变为failed,若运行成功,则该节点的状态将由running变为completed。该节点对应的作业在运行过程中,若超时运行,则该节点的状态将由running变为timeout。该节点对应的作业在超时运行过程中,若运行成功,则该节点的状态将由timeout变为completed。该节点对应的作业在运行过程中,若该节点对应的作业的运行资源被占用,则该节点的状态将由running变为await,若结束对该节点对应的作业的运行资源的占用,则该节点的状态将由await变为running。在一个应用场景中,相关应用或相关设备在运行作业或工作流的过程中,根据作业的运行情况或工作流的运行情况以及图1c所述的状态流转关系,确定作业运行后的状态或工作流在运行后的状态。
在一个实施例中,对于任一为作业节点的节点或为工作流节点的节点来说,其状态流转关系可以参见图1d。也就是说,该节点对应的作业的状态变更方式或该节点对应的工作流的状态变更方式,可以参见图1d。在节点的类型为作业节点或工作流节点时,该节点可以由上面这6个状态中的任一状态切换成下面左边的3个状态中任一状态。在下面左边的这3个状态中,ready可以切换为completed,ready和paused可以相互切换。在节点的类型为断点节点时,其状态流转关系也可以参见图1d,在图1d中,在节点的类型为断点节点时,该节点可以在paused和skipped进行切换。在一个应用场景中,相关用户可以根据作业的运行情况或工作流的运行情况以及图1d所述的状态流转关系,更新节点的状态。
其中,本申请实施例提及的作业依赖关系图可以由多个节点以及节点间的连接线构成。节点间的连接线表明了节点间的依赖关系。一个简单的作业依赖关系图可以参见图1e-图1f。由于不同颜色可以表示不同状态,因此,从图1e可以看出,图1e的为作业节点的节点的状态和为工作流节点的节点的状态都为ready,从图1f可以看出,图1f包括的两个为作业节点的节点,一个状态为completed,一个状态为running,图1f的为工作流节点的节点的状态为ready。一个复杂的作业依赖关系图可以参见图1g,图1g包括了多种类型的节点,如包括的一个为工作流节点的节点。在其它示例中,一个复杂的作业依赖关系图还可以包括多个为工作流节点的节点。
其中,本申请实施例涉及一种图状态更新算法,参见图1h,该图状态更新算法可以用于计算工作流的状态、工作流嵌套的工作流的状态、确定工作流中为目标状态的节点是否满足运行条件等过程中。调度平台通过调用图更新算法可以获取到状态运算结果。在不同应用场景下,可以通过状态运算结果获取到工作流的状态,或可以通过状态运算结果获取到工作流嵌套的工作流的状态,或可以通过状态运算结果确定工作流中为目标状态的节点是否满足运行条件。具体地,该图状态更新算法可以如下,可结合图1h来看:
①确定目标节点的上一级节点的类型。其中,目标节点可以为以下任一项:为第一工作流的结束节点、为第一工作流嵌套的第二工作流的结束节点、为第一工作流的为目标状态的节点。第二工作流为第一工作流的一个子工作流。
②在目标节点的上一级节点的类型为断点节点时,判断目标节点的上一级节点是否为跳过或暂停。在目标节点的上一级节点的状态为跳过的情况下,追溯至目标节点的上一级节点的父节点。在目标节点的上一级节点的父节点有状态时,获取目标节点的上一级节点的父节点的状态作为状态运算结果。在目标节点的上一级节点的父节点无状态时,从目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果。在目标节点的上一级节点为暂停的情况下,将暂停确定为状态运算结果。
在一个实施例中,在目标节点的上一级节点的父节点无状态时,可以利用目标节点的上一级节点的父节点替换步骤①-⑤中的目标节点的上一级节点再次执行步骤①-⑤,直到从目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果。在目标节点的上一级节点为暂停的情况下,将暂停确定为状态运算结果。
在一个实施例中,在根据每一个分支追溯到的有状态的节点确定状态运算结果的过程中,可以根据每一个分支追溯到的有状态的节点以及目标节点与每一个分支追溯到的有状态的节点之间的节点,确定状态运算结果。在一个实施例中,可以根据每一个分支追溯到的有状态的节点的状态、目标节点与每一个分支追溯到的有状态的节点之间的节点的处理方式(根据节点的类型而定),确定状态运算结果。在一个实施例中,可以根据每一个分支追溯到的有状态的节点的状态、目标节点的上一级节点的父节点指示的处理方式、目标节点的上一级节点的父节点与每一个分支追溯到的有状态的节点的之间的节点的处理方式,确定状态运算结果。
本申请实施例中,对于为运算符节点的节点,其对应的处理方式为采用该节点指示的运算符进行运算。
③在目标节点的上一级节点的类型不为断点节点时,判断目标节点的上一级节点的类型是否为运算符节点;在目标节点的上一级节点的类型为运算符节点时,若能取到目标节点的上一级节点的所有上一级节点的状态,则根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果;若未取到目标节点的上一级节点的部分或全部上一级节点的状态,则从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止,并根据追溯到的有状态的节点确定状态运算结果。
在一个实施例中,根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果的方式可以为:确定所有上一级节点中每个上一级节点的状态的优先级,并根据每个上一级节点的状态的优先级以及目标节点的上一级节点指示的运算符,确定第一工作流的状态。在一个实施例中,根据每个上一级节点的状态的优先级以及目标节点的上一级节点指示的运算符,确定第一工作流的状态方式可以为:根据每个上一级节点的状态的优先级、状态优先级关系,以及目标节点的上一级节点指示的运算符,确定第一工作流的状态。状态优先级关系可以参见图1b。在目标节点的上一级节点指示的运算符为“and”时,根据每个上一级节点的状态的优先级以及状态优先级关系从所有上一级节点的状态中确定出优先级最高的状态,将优先级最高的状态作为状态运算结果,例如所有上一级节点包括节点1和节点2,节点的状态为paused状态,节点2的状态为completed状态,由于paused状态的优先级高于completed状态,因此可以将paused状态作为状态运算结果。在目标节点的上一级节点指示的运算符为“or”时,根据状态优先级关系从所有上一级节点的状态中确定出优先级最低的状态,将优先级最低的状态作为状态运算结果,例如所有上一级节点包括节点1和节点2,节点的状态为paused状态,节点2的状态为completed状态,由于paused状态的优先级高于completed状态,因此可以将completed状态作为状态运算结果。其中,本申请的为and节点的节点或为or的节点,均可以参见此处的状态计算方式。
在一个实施例中,若未取到目标节点的上一级节点的部分或全部上一级节点的状态,则利用未取到状态的部分或全部上一级节点替代步骤①-⑤中的目标节点的上一级节点再次执行步骤①-⑤,直到从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止。
在一个实施例中,可以根据目标节点的上一级节点、所述的所有上一级节点中已取到状态的上一级节点、所述的未取到状态的部分上一级节点(或全部上一级节点)往上的每一个分支追溯到有状态的节点、所述未取到状态的部分上一级节点(或全部上一级节点)中每个上一级节点与对应的往上的每一个分支追溯到有状态的节点之间的节点,获取状态运算结果。在一个实施例中,可以根据目标节点的上一级节点指示的处理方式、所述的所有上一级节点中已取到状态的上一级节点的状态、所述的未取到状态的部分上一级节点(或全部上一级节点)往上的每一个分支追溯到有状态的节点的状态、所述未取到状态的部分上一级节点(或全部上一级节点)中每个上一级节点与对应的往上的每一个分支追溯到有状态的节点之间的节点的处理方式,获取状态运算结果。
在一个实施例中,以未取到部分上一级节点的状态为例,可以追溯到未取到状态的部分上一级节点中每个上一级节点的父节点。一种情况下,若未取到状态的部分上一级节点中每个上一级节点的父节点有状态,则根据未取到状态的部分上一级节点中每个上一级节点的父节点和所有上一级节点中已取到状态的上一级节点,获取状态运算结果。在一个实施例,可以获取未取到状态的部分上一级节点中每个上一级节点的父节点的状态;根据未取到状态的部分上一级节点中每个上一级节点的父节点的状态、所有上一级节点中已取到状态的上一级节点的状态,获取状态运算结果。在一个实施例中,可以根据未取到状态的部分上一级节点中所有上一级节点的父节点、所有上一级节点中已取到状态的上一级节点、未取到状态的部分上一级节点、目标节点的上一级节点,获取状态运算结果。在一个实施例中,可以根据未取到状态的部分上一级节点中所有上一级节点的父节点的状态、所有上一级节点中已取到状态的上一级节点的状态、未取到状态的部分上一级节点中每个上一级节点指示的处理方式(根据节点的类型而定)、目标节点的上一级节点指示的处理方式(由于目标节点的上一级节点的类型为运算符节点,因此目标节点的上一级节点的处理方式可以为and运算或or运算),获取状态运算结果。另一种情况是,若未取到状态的部分上一级节点中每个上一级节点的父节点无状态,则用未取到状态的部分上一级节点中每个上一级节点的父节点替换步骤①-⑤中的目标节点的上一级节点来重新执行步骤①-⑤,直到在未取到状态的部分上一级节点中每个上一级节点的父节点往上的每一个分支遍历到有状态的节点。在一个实施例中,可以根据每一个分支追溯到的有状态的节点、未取到状态的部分上一级节点中每个上一级节点的父节点与每一个分支追溯到的有状态的节点的之间的节点、未取到状态的部分上一级节点中每个上一级节点的父节点,所有上一级节点中已取到状态的上一级节点、未取到状态的部分上一级节点,获取状态运算结果。在一个实施例中,可以根据每一个分支追溯到的有状态的节点的状态、未取到状态的部分上一级节点中每个上一级节点的父节点与每一个分支追溯到的有状态的节点的之间的节点的处理方式、未取到状态的部分上一级节点中每个上一级节点的父节点的处理方式,所有上一级节点中已取到状态的上一级节点的状态、未取到状态的部分上一级节点的处理方式,获取状态运算结果。对于未取到状态的部分上一级节点中第一部分上一级节点中每个上一级节点有状态以及第二部分上一级节点中每个上一级节点无状态的情况,可以结合上述两种方式来获得状态运算结果,在此不做赘述。
④在目标节点的上一级节点的类型不为运算符节点时,判断目标节点的上一级节点的类型是否为作业节点;若目标节点的上一级节点的类型为作业节点,则判断目标节点的上一级节点是否有状态;若目标节点的上一级节点有状态,则获取目标节点的上一级节点的状态作为状态运算结果;若目标节点的上一级节点没有状态,则追溯至目标节点的上一级节点的父节点;在目标节点的上一级节点的父节点有状态时,获取目标节点的上一级节点的父节点的状态作为状态运算结果;在目标节点的上一级节点的父节点无状态时,从目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果。
在一个实施例中,在目标节点的上一级节点的父节点无状态时,可以用目标节点的上一级节点的父节点替换步骤①-⑤中的目标节点的上一级节点来重新执行步骤①-⑤,直到从目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止。在一个实施例中,可以根据每一个分支遍历到的有状态的节点、目标节点的上一级节点的父节点与每一个分支遍历到的有状态的节点的之间的节点,获取状态运算结果。在一个实施例中,可以根据每一个分支遍历到的有状态的节点的状态、目标节点的上一级节点的父节点与每一个分支遍历到的有状态的节点的之间的节点的处理方式,获取状态运算结果。
⑤在目标节点的上一级节点的类型不为作业节点时,判断目标节点的上一级节点是否为工作流节点,若是,则获取目标节点的上一级节点的状态,将目标节点的上一级节点的状态作为状态运算结果,若否,则确定目标节点的上一级节点为分隔节点,追溯目标节点的上一级节点的父节点,并在目标节点的上一级节点的父节点有状态时,获取目标节点的上一级节点的父节点的状态作为状态运算结果,在目标节点的上一级节点的父节点无状态时,从目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果。
在一个实施例中,在目标节点的上一级节点的父节点无状态时,可以用目标节点的上一级节点的父节点替换步骤①-⑤中的目标节点的上一级节点来重新执行步骤①-⑤,直到在目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点。在一个实施例中,可以根据每一个分支遍历到的有状态的节点、目标节点的上一级节点的父节点与每一个分支遍历到的有状态的节点的之间的节点,确定状态运算结果。具体地,可以根据每一个分支遍历到的有状态的节点的状态、目标节点的上一级节点的父节点与每一个分支遍历到的有状态的节点的之间的节点的处理方式,确定状态运算结果。
在一个实施例中,在所述目标节点为所述第一工作流的结束节点时,所述状态运算结果可以为所述第一工作流的状态。
在一个实施例中,在所述目标节点为所述第二工作流的结束节点时,所述状态运算结果可以为所述第二工作流的状态。本申请由于可以采用此方式针对工作流嵌套的场景来获取到嵌套的工作流的状态,进而实现对工作流嵌套的场景下的复杂作业调度过程,能够适应复杂业务场景的作业调度过程。
在一个实施例中,在所述目标节点为所述第一工作流的为目标状态的节点时,所述状态运算结果为用于确定为目标状态的节点是否满足运行条件的状态。例如,以图1f为例,图1f包括为工作流节点的节点,该节点的状态为ready,在确定该节点是否满足运行条件的过程中,可以通过调用所述的图状态更新算法获取到一个状态运算结果,该状态运算结果为用于判断该目标节点是否满足运行条件的状态。例如,采用图更新算法得到的状态运算结果为running,,可以确定图1f包括的为工作流节点的节点还不满足运行条件,需要等待图1f中状态为running的节点运行完成。
在一个实施例中,用户可以通过调度平台还可以对第一工作流的第一节点、第二节点等节点进行状态更新,或调度平台可以通过目标作业集群执行第一节点、第二节点等节点分别对应的作业后对第二节点等节点进行状态更新。
请参阅图2,为本申请实施例提供的一种作业调度方法的流程示意图。该方法可以应用于调度平台。调度平台可以由一个单独的服务器或服务器集群构成。具体地,该方法可以包括以下步骤:
S201、获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态。
本申请实施例中,调度平台可以在检测到为第一工作流配置的触发时间到达时,生成运算指令,并根据运算指令创建关于第一工作流的运行流水。或,调度平台可以在利用第一工作流的第三节点的调度结果再次对第三节点进行状态更新后,(如从数据库)读取第一工作流的运行流水,第三节点为第一工作流的任一节点。
在一个实施例中,调度平台可以包括工作流触发器、工作流运算引擎。工作流触发器,可以用于获取对第一工作流的触发时间的配置,还可以用于在触发时间到达时,生成运算指令以下发至工作流运算引擎。工作流运算引擎,可以用于在接收到运算指令后,根据运算指令创建第一工作流的运行流水。
S202、根据所述运行流水确定所述第一工作流的满足运行条件的第一节点。
本申请实施例中,调度平台可以根据运行流水,从第一工作流的至少一个节点中确定出第一工作流的满足运行条件的第一节点。其中,满足运行条件的第一节点,可以包括满足运行条件的为作业节点的节点和/或满足运行条件的为工作流节点的节点。
在一个实施例中,调度平台根据所述运行流水确定所述第一工作流的满足运行条件的第一节点的方式可以为:调度平台根据所述第一工作流的至少一个节点中每个节点的状态,从所述至少一个节点中筛选出目标节点集合,并根据所述作业依赖关系图的快照指示的节点依赖关系确定所述目标节点集合中各节点的目标前置节点,并根据所述目标节点集合中各节点的目标前置节点的状态,从所述目标节点集合中确定出满足运行条件的第一节点。在一个实施例中,调度平台可以调用前述提及的图状态更新算法,实现根据所述作业依赖关系图的快照确定所述目标节点集合中各节点的目标前置节点,并根据目标节点集合中各节点的目标前置节点的状态获取各状态运算结果的过程。在得到各状态运算结果后,调度平台可以根据各状态运算结果从目标节点集合中确定出满足运行条件的第一节点。例如,目标节点集合包括节点1,调度平台可以根据节点1的目标前置节点的状态获取到一个状态运算结果,在该状态运算结果为completed时,可以将节点1确定为满足运行条件的第一节点。其中,所述目标节点集合中各节点的状态为目标状态。目标状态如可以为ready。当目标节点集合中的第一数量个节点中每个节点的上一级节点都有状态时,第一数量个节点中每个节点的目标前置节点,可以为每个节点的上一级节点。当目标节点集合中第二数量个节点中每个节点的上一级节点没有状态时,第二数量个节点中每个节点的上一级节点的目标前置节点,可以为每个节点的上一级节点的有状态的父节点,或根据每个节点的上一级节点的没有状态的父节点往上的每一个分支追溯到的有状态的节点。
S203、将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令。
在一个实施例中,调度平台在更新目标节点的状态为运行状态后,可以将目标节点的状态存储至数据库中,以便后续在获取目标节点的状态的过程中,可以直接从数据库中读取。
在一个实施例中,调度平台还可以包括消息中间件。工作流运算引擎可以用于将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令,并将调度指令下发至消息中间件。
S204、根据所述调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果。
其中,目标作业集群为执行所述第一节点对应的作业的作业集群,目标作业集群可以包括一个或多个作业执行节点,节点可以为服务器等设备。
在一个实施例中,调度平台还可以包括作业指令处理组件,作业指令处理组件可以从消息中间件获取到所述调度指令,并将调度指令下发至目标作业集群。在一个实施例中,作业指令处理组件可以从消息中间件获取到所述调度指令,并将调度指令下发至目标作业集群中的目标作业执行节点。虽然下发至目标作业集群,但是实际执行第一节点对应的作业的作业执行节点有可能有目标作业执行节点,也可能没有目标作业执行节点,这取决于作业集群的作业执行策略。
在一个实施例中,调度平台可以包括所述的目标作业集群,或调度平台也可以不包括所述的目标作业集群。目标作业集群可以在收到所述调度指令后执行第一节点对应的作业,并获取调度结果,然后将调度结果发送至消息中间件。在一个实施例中,目标作业集群中的目标作业执行节点在收到所述调度指令后,可以执行所述第一节点对应的作业,作业指令组件可以获取到调度结果,并将调度结果发送至消息中间件。
其中,前述提及的调度指令可以携带目标作业集群的标识信息、第一节点对应的作业的标识信息。在此基础上可选的,调度指令还可以携带第一工作流的标识信息以及第一节点的标识信息。其中,目标作业集群的标识信息、第一节点对应的作业的标识信息这两个信息用于确定是由谁来执行的什么作业。第一工作流的标识信息以及第一节点的标识信息用于生成调度结果。调度过程无需和作业执行节点绑定,不关注到底是由集群内哪个设备来执行作业,即便设备发生变更,也不影响整个调度过程,这种方式更加灵活。其中,前述提及的调度结果可以包括第一工作流的标识信息、第一节点的标识信息第一节点对应的作业执行后的状态信息。
S205、利用所述调度结果再次对所述第一节点进行状态更新。
在一个实施例中,调度平台可以利用调度结果再次对第一节点进行状态更新,由于第一节点上一次更新的状态是运行状态,本次更新的状态将有可能是其它状态或还是目标状态。在一个实施例中,在对目标节点进行状态更新后,调度平台可以执行步骤S201的步骤。
在一个实施例中,作业指令处理组件可以用于在监听到消息中间件的调度结果时,从作业集群获取调度结果,并将调度结果发送至消息中间件,然后工作流运算引擎可以用于从消息中间件消费出调度结果,并根据调度结果对目标节点进行状态更新。在一个实施例中,在对目标节点进行状态更新后,工作流运算引擎可以执行步骤S201的步骤。
在一个实施例中,调度平台可以利用调度结果再次对第一节点进行更新,可以将调度结果包括的状态更新至数据库中。
可见,图2所示的实施例中,调度平台获取第一工作流的运行流水,并根据运行流水确定第一工作流的满足运行条件的第一节点;调度平台将第一节点的状态更新为运行状态,并针对第一节点生成调度指令,并根据调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果,从而利用调度结果再次对第一节点进行状态更新,调度平台基于工作流的运行流水来对工作流中的各项作业进行调度,能够满足复杂业务场景的作业调度过程。
在一个实施例中,调度平台的结构可以参见图3,该调度平台包括工作流触发器、工作流运算引擎、消息中间件、作业指令处理组件、作业集群(可选的)。图3所示的各个组成结构可以设置在一台服务设备上也可以分布于多台服务设备上,例如不同组成结构可以设置在不同的服务设备上。
在图3中,工作流触发器可以在为第一工作流配置的触发时间到达时,生成运算指令发送至工作流运算引擎,工作流运算引擎在接收到运算指令后,根据运算指令创建第一工作流的运行流水,并根据第一工作流的运行流水。之后,工作流运算引擎可以根据运行流水确定第一工作流的满足运行条件的第一节点。随后,工作流运算引擎可以将第一节点的状态更新为运行状态,并针对第一节点生成调度指令。然后发送调度指令至消息中间件,进而作业指令处理组件可以从消息中间件获取到调度指令,并将调度指令下发至目标作业集群,由目标作业集群执行第一节点对应的作业,从而实现通过调度指令调度目标作业集群执行第一节点对应的作业的过程。目标作业集群在在收到调度指令后,可以执行第一节点对应的作业,并获取调度结果,然后作业指令处理组件可以获取到调度结果,并将调度结果发送至消息中间件。工作流运算引擎可以从作业指令处理组件消费出调度结果,并使用调度结果再次对第一节点进行状态更新。
在一个实施例中,调度平台通过用户终端输出作业编排界面,以便所述用户终端根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置,并根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建所述第一工作流的作业依赖关系图;调度平台获取所述用户终端对所述第一工作流的作业依赖关系图的反馈,并保存反馈的所述第一工作流的作业依赖关系图。在一个应用场景中,用户可以使用用户终端向调度平台发起请求以获取作业编排界面,调度平台可以响应于该请求将作业编排界面发送至用户终端以进行显示。用户可以基于作业编排界面执行元素拖动操作,用户终端可以根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置。同时,用户还可以基于作业编排界面执行节点设置操作,用户终端可以根据基于所述作业编排界面的节点设置操作根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建第一工作流的作业依赖关系图。在构建完毕后,用户可以使用用户终端将第一工作流的作业依赖关系图发送至调度平台,调度平台可以获取到用户终端发送的第一工作流的作业依赖关系图,并保存第一工作流的作业关系图,如可以将第一工作流的作业关系图保存至数据库中。在一个实施例中,结合图3来看,调度平台还可以包括工作流管理组件,该工作流管理组件可以支持对作业依赖关系图的可视化配置。上述过程在定义工作流的过程中,可以使得一个工作流嵌套多个工作流,从而支持超大任务依赖关系定义。
在一个实施例中,调度平台可以获取第一工作流的至少一个节点中每个节点的状态,并将第一工作流的作业依赖关系数据以及每个节点的状态,发送至用户终端,用户终端可以显示该作业依赖关系数据。在用户终端显示该作业编排数据的过程中,可以对作业依赖关系数据进行加工处理,得到加工后的作业依赖关系数据。在一个实施例中,除了由用户终端自身完成加工处理的操作之外,也可以由调度平台来完成加工处理的工作,即调度平台可以采用上述方式获得加工后的作业依赖关系数据后,将该加工处理后的作业依赖关系数据发送至用户终端,以在用户终端显示该作业依赖关系数据。通过加工处理作业依赖关系数据,使得工作流的节点的状态一目了然。其中,作业依赖关系数据可以为第一工作流的作业依赖关系图或第一工作流的作业依赖关系图的快照。加工处理可以包括为每个节点添加标记信息,例如可以是根据每个节点的状态确定出为每个节点填充的颜色。不同状态的节点可以有不同的颜色,参见图1f-图1g。在一个实施例中,调度平台还可以响应于用户终端发送的对第一工作流的查看请求,执行上述获取第一工作流的至少一个节点中每个节点的状态的步骤。在一个实施例中,工作流管理组件可以支持作业依赖关系数据的可视化显示。
在一个实施例中,调度平台在将第一工作流的作业依赖关系数据以及每个节点的状态发送至用户终端后,还可以接收所述用户终端根据所述加工的依赖关系数据发送的状态更新指令,根据所述状态更新指令对所述第一工作流的第二节点进行状态更新,并触发所述获取第一工作流的运行流水的步骤。
在一个实施例中,调度平台还可以响应于状态流转图查看请求,获取状态流转图,如图1d所示的状态流转图以发送至用户终端。用户可以基于该第一工作流的作业依赖关系数据以及该状态流转图对第一工作流的第二节点进行状态更新,并发送更新指令发送至调度平台。
在一个应用场景中,当用户基于加工后的依赖关系数据发现某一个或多个作业节点或某一个或多个子工作流节点运行异常,如运行失败时,可以通过该变相应工作流的状态或相应作业节点的或子工作流的状态来指示相应工作流进行断点续跑或指示相应作业节点或相应子工作流节点重跑。在一个实施例中,上述工作流管理组件还可以支持对相应工作流进行断点续跑或指示相应作业节点或相应子工作流节点重跑的触发。例如,当某一工作流的某一个或多个节点运行异常,如运行失败时,可以基于上面的状态流转图对这一个或多个节点执行状态切换操作,也就是可以将该节点由A状态调整为B状态,然后发送状态更新指令至调度平台,触发调度平台执行获取运行流水的步骤。举例来说,结合图1d来看,假设根据第一工作流的作业依赖关系数据发送某个节点停在running,就可以将该节点的状态切成图1d下面左边三种状态中的任一状态,然后发送状态更新指令至调度平台。假设即将某个节点的切为ready,如果发现该节点的运行条件满足,那么就将节点的状态切为running,让节点继续重跑,如果发现该节点后续运行过程状态继续停在running,就表示该节点出现问题,就将节点切为completed,使得该节点对应的作业强行停止,不跑这个节点对应的作业,继续跑其它节点对应的作业。
在一个实施例中,调度平台还可以包括指令跟踪、检测组件,当某个作业节点或某个子工作流运行异常可能是出现作业执行异常或某一条或多条指令丢失导致的。在故障排除的过程中,针对指令丢失的情况,可以从指令跟踪、检测组件查询各个指令在各个组件之间传输时是否丢失。在一个实施例中,指令跟踪、检测组件可以获取到各个指令到达对应的组件的时间,从而根据各个指令到达对应的组件的时间判断各个指令是否丢失。例如,当发现某个指令到达对应的组件的时间超过预设时间时,则确定该指令丢失。
在一个实施例中,当调度平台调度出现错误,如出现指令丢失或作业集群执行作业失败时,相应组件或相应集群会以告警的方式通知相关人员处理。例如,各个组件或作业集群可以设置触发告警的埋点事件,在检测到对应的埋点事件被触发时进行告警。
在一个实施例中,本申请涉及区块链技术,例如,可以将第一工作的至少一个节点中每个节点的状态写入区块链中。
请参阅图4,为本申请实施例提供的一种作业调度装置的结构示意图,该装置可以应用于调度平台。具体地,该装置可以包括:
获取模块401,用于获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态。
确定模块402,用于根据所述运行流水确定所述第一工作流的满足运行条件的第一节点。
更新模块403,用于将所述第一节点的状态更新为运行状态。
指令生成模块404,用于针对所述第一节点生成调度指令。
调度模块405,用于根据所述调度指令调度目标作业集群执行第一节点对应的作业;
获取模块401,还用于获取调度结果。
更新模块403,还用于利用所述调度结果再次对所述第一节点进行状态更新。
在一种可选的实施方式中,确定模块402,具体用于:
根据所述第一工作流的至少一个节点中每个节点的状态,从所述至少一个节点中筛选出目标节点集合,所述目标节点集合中各节点的状态为目标状态;
根据所述作业依赖关系图的快照确定所述目标节点集合中各节点的目标前置节点,并根据所述目标节点集合中各节点的目标前置节点的状态,从所述目标节点集合中确定出满足运行条件的第一节点。
在一种可选的实施方式中,确定模块402,还用于:
确定目标节点的上一级节点的类型,所述目标节点为以下任一项:为所述第一工作流的结束节点、为所述第一工作流嵌套的第二工作流的结束节点、为所述第一工作流的为目标状态的节点;
在所述目标节点的上一级节点的类型为断点节点时,判断所述目标节点的上一级节点的状态是否为跳过或暂停;在所述目标节点的上一级节点的状态为跳过的情况下,追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;在所述目标节点的上一级节点的状态为暂停的情况下,将暂停确定为状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为断点节点时,判断所述目标节点的上一级节点的类型是否为运算符节点;在所述目标节点的上一级节点的类型为运算符节点时,若能取到所述目标节点的上一级节点的所有上一级节点的状态,则根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果;若未取到所述目标节点的上一级节点的部分或全部上一级节点的状态,则从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止,并根据追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为运算符节点时,判断所述目标节点的上一级节点的类型是否为作业节点;若所述目标节点的上一级节点的类型为作业节点,则判断所述目标节点的上一级节点是否有状态;若所述目标节点的上一级节点有状态,则获取所述目标节点的上一级节点的状态作为状态运算结果;若所述目标节点的上一级节点没有状态,则追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果;在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为作业节点时,判断所述目标节点的上一级节点的类型是否为工作流节点,若是,则获取所述目标节点的上一级节点的状态,将所述目标节点的上一级节点的状态作为状态运算结果,若否,则确定所述目标节点的上一级节点为分隔节点,追溯所述目标节点的上一级节点的父节点,并在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;
在所述目标节点为所述第一工作流的结束节点时,所述状态运算结果为所述第一工作流的状态;
在所述目标节点为所述第二工作流的结束节点时,所述状态运算结果为所述第二工作流的状态。
在一种可选的实施方式中,确定模块402,具体用于:
确定所述所有上一级节点中每个上一级节点的状态的优先级;
根据所述每个上一级节点的状态的优先级以及所述目标节点的上一级节点指示的运算符,确定所述第一工作流的状态。
在一种可选的实施方式中,获取模块401,还用于:
通过用户终端输出作业编排界面,以便所述用户终端根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置,并根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建所述第一工作流的作业依赖关系图;
获取所述用户终端对所述第一工作流的作业依赖关系图的反馈,并保存反馈的所述第一工作流的作业依赖关系图。
在一种可选的实施方式中,更新模块403,还用于:
获取所述第一工作流的至少一个节点中每个节点的状态;
将所述第一工作流的作业依赖关系数据以及所述每个节点的状态发送至用户终端,以便所述用户终端利用所述每个节点的状态加工所述作业依赖关系数据,得到加工后的作业依赖关系数据;所述依赖关系数据为所述第一工作流的作业依赖关系图或所述第一工作流的作业依赖关系图的快照;
接收所述用户终端根据所述加工的依赖关系数据发送的状态更新指令,根据所述状态更新指令对所述第一工作流的第二节点进行状态更新,并触发所述获取第一工作流的运行流水的步骤。
在一种可选的实施方式中,获取模块401,具体用于:
在检测到为第一工作流配置的触发时间到达时,生成运算指令,并根据运算指令创建第一工作流的运行流水;或,
在利用所述第一工作流的第三节点的调度结果再次对所述第三节点进行状态更新后,读取所述第一工作流的运行流水。
可见,图4所示的实施例中,作业调度装置获取第一工作流的运行流水,并根据运行流水确定第一工作流的满足运行条件的第一节点;作业调度装置将第一节点的状态更新为运行状态,并针对第一节点生成调度指令,并根据调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果,从而利用调度结果再次对第一节点进行状态更新,作业调度装置基于工作流的运行流水来对工作流中的各项作业进行调度,能够满足复杂业务场景的作业调度过程。
请参阅图5,为本申请实施例提供的一种调度平台的结构示意图。本实施例中所描述的调度平台可以包括:一个或多个处理器1000和存储器2000。处理器1000和存储器2000可以通过总线等方式连接。
处理器1000可以是中央处理模块(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
存储器2000可以是高速RAM存储器,也可为非不稳定的存储器(non-volatilememory),例如磁盘存储器。存储器2000用于存储一组程序代码,处理器1000可以调用存储器2000中存储的程序代码。具体地:
处理器1000,用于获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令;根据所述调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果;利用所述调度结果再次对所述第一节点进行状态更新。
在一个实施例中,处理器1000根据所述运行流水确定所述第一工作流的满足运行条件的第一节点,具体为根据所述第一工作流的至少一个节点中每个节点的状态,从所述至少一个节点中筛选出目标节点集合,所述目标节点集合中各节点的状态为目标状态;根据所述作业依赖关系图的快照确定所述目标节点集合中各节点的目标前置节点,并根据所述目标节点集合中各节点的目标前置节点的状态,从所述目标节点集合中确定出满足运行条件的第一节点。
在一个实施例中,处理器1000,还用于确定目标节点的上一级节点的类型,所述目标节点为以下任一项:为所述第一工作流的结束节点、为所述第一工作流嵌套的第二工作流的结束节点、为所述第一工作流的为目标状态的节点;在所述目标节点的上一级节点的类型为断点节点时,判断所述目标节点的上一级节点的状态是否为跳过或暂停;在所述目标节点的上一级节点的状态为跳过的情况下,追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;在所述目标节点的上一级节点的状态为暂停的情况下,将暂停确定为状态运算结果;和/或,在所述目标节点的上一级节点的类型不为断点节点时,判断所述目标节点的上一级节点的类型是否为运算符节点;在所述目标节点的上一级节点的类型为运算符节点时,若能取到所述目标节点的上一级节点的所有上一级节点的状态,则根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果;若未取到所述目标节点的上一级节点的部分或全部上一级节点的状态,则从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止,并根据追溯到的有状态的节点确定状态运算结果;和/或,在所述目标节点的上一级节点的类型不为运算符节点时,判断所述目标节点的上一级节点的类型是否为作业节点;若所述目标节点的上一级节点的类型为作业节点,则判断所述目标节点的上一级节点是否有状态;若所述目标节点的上一级节点有状态,则获取所述目标节点的上一级节点的状态作为状态运算结果;若所述目标节点的上一级节点没有状态,则追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果;在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;和/或,在所述目标节点的上一级节点的类型不为作业节点时,判断所述目标节点的上一级节点的类型是否为工作流节点,若是,则获取所述目标节点的上一级节点的状态,将所述目标节点的上一级节点的状态作为状态运算结果,若否,则确定所述目标节点的上一级节点为分隔节点,追溯所述目标节点的上一级节点的父节点,并在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;在所述目标节点为所述第一工作流的结束节点时,所述状态运算结果为所述第一工作流的状态;在所述目标节点为所述第二工作流的结束节点时,所述状态运算结果为所述第二工作流的状态。
在一个实施例中,处理器1000根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定所述第一工作流的状态,具体为确定所述所有上一级节点中每个上一级节点的状态的优先级;根据所述每个上一级节点的状态的优先级以及所述目标节点的上一级节点指示的运算符,确定所述第一工作流的状态。
在一个实施例中,处理器1000,还用于通过用户终端输出作业编排界面,以便所述用户终端根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置,并根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建所述第一工作流的作业依赖关系图;获取所述用户终端对所述第一工作流的作业依赖关系图的反馈,并保存反馈的所述第一工作流的作业依赖关系图。
在一个实施例中,处理器1000,还用于获取第一工作流的至少一个节点中每个节点的状态;将所述第一工作流的作业依赖关系数据以及所述每个节点的状态发送至用户终端,以便所述用户终端利用所述每个节点的状态加工所述作业依赖关系数据,得到加工后的作业依赖关系数据;所述依赖关系数据为所述第一工作流的作业依赖关系图或所述第一工作流的作业依赖关系图的快照;接收所述用户终端根据所述加工的依赖关系数据发送的状态更新指令,根据所述状态更新指令对所述第一工作流的第二节点进行状态更新,并触发所述获取第一工作流的运行流水的步骤。
在一个实施例中,处理器1000获取第一工作流的运行流水,具体为在检测到为第一工作流配置的触发时间到达时,生成运算指令,并根据运算指令创建第一工作流的运行流水;或,在利用所述第一工作流的第三节点的调度结果再次对所述第三节点进行状态更新后,读取所述第一工作流的运行流水。
具体实现中,本申请实施例中所描述的处理器1000可执行图2实施例所描述的实现方式,也可执行本申请实施例所描述的实现方式,在此不再赘述。
在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以是两个或两个以上模块集成在一个模块中。上述集成的模块既可以采样硬件的形式实现,也可以采样软件功能模块的形式实现。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的计算机可读存储介质可为易失性的或非易失性的。例如,该计算机存储介质可以为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。所述的计算机可读存储介质可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据区块链节点的使用所创建的数据等。
其中,本申请所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
以上所揭露的仅为本申请一种较佳实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于本申请所涵盖的范围。
Claims (10)
1.一种作业调度方法,其特征在于,所述方法包括:
获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;所述节点的类型分为开始节点、结束节点、运算符节点、分隔节点、断点节点、作业节点、工作流节点;在所述第一工作流嵌套有第二工作流时,所述第二工作流的状态是采用图状态更新算法,以根据所述第二工作流的作业依赖关系图的快照和所述第二工作流的至少一个节点中每个节点的状态计算得到的;
根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;
将所述第一节点的状态更新为运行状态,并针对所述第一节点生成调度指令;
根据所述调度指令调度目标作业集群执行第一节点对应的作业,并获取调度结果;
利用所述调度结果再次对所述第一节点进行状态更新。
2.根据权利要求1所述的方法,其特征在于,所述根据所述运行流水确定所述第一工作流的满足运行条件的第一节点,包括:
根据所述第一工作流的至少一个节点中每个节点的状态,从所述至少一个节点中筛选出目标节点集合,所述目标节点集合中各节点的状态为目标状态;
根据所述作业依赖关系图的快照确定所述目标节点集合中各节点的目标前置节点,并根据所述目标节点集合中各节点的目标前置节点的状态,从所述目标节点集合中确定出满足运行条件的第一节点。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
确定目标节点的上一级节点的类型,所述目标节点为以下任一项:为所述第一工作流的结束节点、为所述第一工作流嵌套的第二工作流的结束节点、为所述第一工作流的为目标状态的节点;
在所述目标节点的上一级节点的类型为断点节点时,判断所述目标节点的上一级节点的状态是否为跳过或暂停;在所述目标节点的上一级节点的状态为跳过的情况下,追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;在所述目标节点的上一级节点的状态为暂停的情况下,将暂停确定为状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为断点节点时,判断所述目标节点的上一级节点的类型是否为运算符节点;在所述目标节点的上一级节点的类型为运算符节点时,若能取到所述目标节点的上一级节点的所有上一级节点的状态,则根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定状态运算结果;若未取到所述目标节点的上一级节点的部分或全部上一级节点的状态,则从未取到状态的部分或全部上一级节点往上的每一个分支追溯到有状态的节点为止,并根据追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为运算符节点时,判断所述目标节点的上一级节点的类型是否为作业节点;若所述目标节点的上一级节点的类型为作业节点,则判断所述目标节点的上一级节点是否有状态;若所述目标节点的上一级节点有状态,则获取所述目标节点的上一级节点的状态作为状态运算结果;若所述目标节点的上一级节点没有状态,则追溯至所述目标节点的上一级节点的父节点;在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果;在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支追溯到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;和/或,
在所述目标节点的上一级节点的类型不为作业节点时,判断所述目标节点的上一级节点的类型是否为工作流节点,若是,则获取所述目标节点的上一级节点的状态,将所述目标节点的上一级节点的状态作为状态运算结果,若否,则确定所述目标节点的上一级节点为分隔节点,追溯所述目标节点的上一级节点的父节点,并在所述目标节点的上一级节点的父节点有状态时,获取所述目标节点的上一级节点的父节点的状态作为状态运算结果,在所述目标节点的上一级节点的父节点无状态时,从所述目标节点的上一级节点的父节点往上的每一个分支遍历到有状态的节点为止,根据每一个分支追溯到的有状态的节点确定状态运算结果;
在所述目标节点为所述第一工作流的结束节点时,所述状态运算结果为所述第一工作流的状态;
在所述目标节点为所述第二工作流的结束节点时,所述状态运算结果为所述第二工作流的状态。
4.根据权利要求3所述的方法,其特征在于,所述根据所有上一级节点的状态以及目标节点的上一级节点指示的运算符,确定所述第一工作流的状态,包括:
确定所述所有上一级节点中每个上一级节点的状态的优先级;
根据所述每个上一级节点的状态的优先级以及所述目标节点的上一级节点指示的运算符,确定所述第一工作流的状态。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过用户终端输出作业编排界面,以便所述用户终端根据基于所述作业编排界面的元素拖动操作,将所述目标可编排元素移动至目标位置,并根据基于所述作业编排界面的节点设置操作,为移动位置的目标可编排元素添加节点信息和连接线,以构建所述第一工作流的作业依赖关系图;
获取所述用户终端对所述第一工作流的作业依赖关系图的反馈,并保存反馈的所述第一工作流的作业依赖关系图。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述第一工作流的至少一个节点中每个节点的状态;
将所述第一工作流的作业依赖关系数据以及所述每个节点的状态发送至用户终端,以便所述用户终端利用所述每个节点的状态加工所述作业依赖关系数据,得到加工后的作业依赖关系数据;所述依赖关系数据为所述第一工作流的作业依赖关系图或所述第一工作流的作业依赖关系图的快照;
接收所述用户终端根据所述加工的依赖关系数据发送的状态更新指令,根据所述状态更新指令对所述第一工作流的第二节点进行状态更新,并触发所述获取第一工作流的运行流水的步骤。
7.根据权利要求1所述的方法,其特征在于,所述获取第一工作流的运行流水,包括:
在检测到为第一工作流配置的触发时间到达时,生成运算指令,并根据运算指令创建第一工作流的运行流水;或,
在利用所述第一工作流的第三节点的调度结果再次对所述第三节点进行状态更新后,读取所述第一工作流的运行流水。
8.一种作业调度装置,其特征在于,应用于调度平台,所述装置包括:
获取模块,用于获取第一工作流的运行流水,所述运行流水包括所述第一工作流的作业依赖关系图的快照和所述第一工作流的至少一个节点中每个节点的状态;所述节点的类型分为开始节点、结束节点、运算符节点、分隔节点、断点节点、作业节点、工作流节点;在所述第一工作流嵌套有第二工作流时,所述第二工作流的状态是采用图状态更新算法,以根据所述第二工作流的作业依赖关系图的快照和所述第二工作流的至少一个节点中每个节点的状态计算得到的;
确定模块,用于根据所述运行流水确定所述第一工作流的满足运行条件的第一节点;
更新模块,用于将所述第一节点的状态更新为运行状态;
指令生成模块,用于针对所述第一节点生成调度指令;
调度模块,用于根据所述调度指令调度目标作业集群执行第一节点对应的作业;
所述获取模块,还用于获取调度结果;
所述更新模块,还用于利用所述调度结果再次对所述第一节点进行状态更新。
9.一种调度平台,其特征在于,包括处理器和存储器,其中,所述存储器用于存储计算机程序,所述计算机程序包括程序指令,所述处理器被配置用于调用所述程序指令,执行如权利要求1-7任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110698329.XA CN113419829B (zh) | 2021-06-23 | 2021-06-23 | 作业调度方法、装置、调度平台及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110698329.XA CN113419829B (zh) | 2021-06-23 | 2021-06-23 | 作业调度方法、装置、调度平台及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113419829A CN113419829A (zh) | 2021-09-21 |
CN113419829B true CN113419829B (zh) | 2023-01-13 |
Family
ID=77716322
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110698329.XA Active CN113419829B (zh) | 2021-06-23 | 2021-06-23 | 作业调度方法、装置、调度平台及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113419829B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115297180B (zh) * | 2022-08-04 | 2024-03-29 | 苏州创意云网络科技有限公司 | 集群调度方法、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110310088A (zh) * | 2019-06-14 | 2019-10-08 | 平安科技(深圳)有限公司 | 工作流配置方法及相关产品 |
CN110427252A (zh) * | 2019-06-18 | 2019-11-08 | 平安银行股份有限公司 | 基于任务依赖关系的任务调度方法、装置及存储介质 |
CN111316106A (zh) * | 2017-09-05 | 2020-06-19 | 迪森德克斯公司 | 自动化样品工作流程门控和数据分析 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8560372B2 (en) * | 2007-12-22 | 2013-10-15 | Sap Ag | Compiling workflows into instructions for a state correlation engine |
CN106874084B (zh) * | 2017-01-04 | 2020-04-07 | 北京百度网讯科技有限公司 | 一种分布式工作流调度的方法、装置及计算机设备 |
CN111796811B (zh) * | 2020-07-08 | 2021-07-30 | 上海富数科技有限公司 | 联邦学习中实现支持断点调试的流控制引擎系统 |
CN112527484B (zh) * | 2020-12-17 | 2024-05-10 | 平安银行股份有限公司 | 工作流断点续跑方法、装置、计算机设备及可读存储介质 |
-
2021
- 2021-06-23 CN CN202110698329.XA patent/CN113419829B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111316106A (zh) * | 2017-09-05 | 2020-06-19 | 迪森德克斯公司 | 自动化样品工作流程门控和数据分析 |
CN110310088A (zh) * | 2019-06-14 | 2019-10-08 | 平安科技(深圳)有限公司 | 工作流配置方法及相关产品 |
CN110427252A (zh) * | 2019-06-18 | 2019-11-08 | 平安银行股份有限公司 | 基于任务依赖关系的任务调度方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113419829A (zh) | 2021-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8020044B2 (en) | Distributed batch runner | |
US8954579B2 (en) | Transaction-level health monitoring of online services | |
US20180300173A1 (en) | Serverless computing and task scheduling | |
US9535754B1 (en) | Dynamic provisioning of computing resources | |
CN109656782A (zh) | 可视化调度监控方法、装置及服务器 | |
US11294711B2 (en) | Wait a duration timer action and flow engine for building automated flows within a cloud based development platform | |
US11394801B2 (en) | Resiliency control engine for network service mesh systems | |
CN110611707B (zh) | 一种任务调度的方法及装置 | |
CN109033814B (zh) | 智能合约触发方法、装置、设备及存储介质 | |
CN113220431B (zh) | 跨云的分布式数据任务调度方法、设备及存储介质 | |
KR102553440B1 (ko) | 서버리스 개발 지원 플랫폼 | |
CN111858007A (zh) | 一种基于消息中间件的任务调度方法方法和装置 | |
CN113419829B (zh) | 作业调度方法、装置、调度平台及存储介质 | |
US11068487B2 (en) | Event-stream searching using compiled rule patterns | |
US20200210548A1 (en) | Production plan supporting apparatus and method | |
CN113434323A (zh) | 数据中台的任务流控制方法及相关装置 | |
CN112527480A (zh) | 端到端双活方法、装置、设备及存储介质 | |
US20120159445A1 (en) | Aspect and system landscape capability-driven automatic testing of software applications | |
CN111147541A (zh) | 基于参数服务器的节点处理方法、装置、设备及存储介质 | |
CN114595042A (zh) | 任务执行方法、机器人、存储介质及计算机程序产品 | |
JP6928182B1 (ja) | 停止原因特定支援装置、停止原因特定支援プログラムおよび方法 | |
CN113052571A (zh) | 工作流关键路径的处理方法及装置 | |
CN112540771A (zh) | 自动化运维方法、系统、设备和计算机可读存储介质 | |
CN117971412A (zh) | 一种支持依赖编排的任务依赖调度方法 | |
US10977210B2 (en) | Methods for implementing an administration and testing tool |
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 |