CN112286661B - 任务调度方法及装置、存储介质、终端 - Google Patents
任务调度方法及装置、存储介质、终端 Download PDFInfo
- Publication number
- CN112286661B CN112286661B CN202011189452.0A CN202011189452A CN112286661B CN 112286661 B CN112286661 B CN 112286661B CN 202011189452 A CN202011189452 A CN 202011189452A CN 112286661 B CN112286661 B CN 112286661B
- Authority
- CN
- China
- Prior art keywords
- task
- tasks
- execution
- subsequent
- executed
- 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
- 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)
- Telephonic Communication Services (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种任务调度方法及装置、存储介质、终端,所述方法包括:确定多个后续任务的前置执行任务,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,将全部前置执行任务均已完成的后续任务,记为待执行后续任务,并所述待执行后续任务加入待执行队列;确定执行数量,执行所述待执行队列中所述执行数量个后续任务。本发明的技术方案能够提高任务调度的效率和准确度。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种任务调度方法及装置、存储介质、终端。
背景技术
随着证券交易市场的快速发展,交易业务种类和待处理数据量也随之不断增加,作为企业级的数据存储和计算中心,数据平台的批处理任务关系越来越复杂,时效性和正确性要求越来越高,导致留给数据平台的处理时间窗口和应急时间窗口越来越小,这些都对数据平台的批处理架构的高效性、高可用性和易维护性等方面提出了更高的要求。
在现有技术中,通常基于开源软件二次开发或采用商用软件进行任务调度。但由于目前基于开源软件的调度方法采用基于任务流的调度方法,如oozie,azkaban等,均需要定义任务流中的各个任务之间的逻辑关系。这种调度方法中,不同任务流之间的耦合性较高,当任务数量和任务关系复杂增加时,准确清楚地定义任务流是十分困难的,如果无法准确定义任务流,容易在调度过程中出现错误。另外,基于开源软件的调度方法通常仅提供核心的任务调度功能,辅助的任务开发、任务关系组织、任务状态维护、任务监控、任务治理、服务监控、日志下载等诸多能力都比较欠缺,二次开发的工作量依旧很巨大。此外,商业软件虽然成熟稳定,当任务关系复杂时,商业软件也很难及时满足各种复杂或个性化的调度和监控需求。
例如:Elastic-job任务调度***采用的任务调度方法对任务间的依赖关系支持较弱,支持的任务类型比较单一,监控的范围和粒度都不能满足证券交易业务的需要。Airflow任务调度方法主要由PYTHON实现,任务的定义无法通过XML或者界面定义,只能依靠PYTHON定义,所以无法做到调度架构和应用业务的解耦合;另外,Airflow开源时间较短,调度性能较低,比较适用于简单的ETL类的编排,所以易用性,稳定性和性能等方面都无法满足当前和未来证券业务的发展。Dataflow任务调度方法根据批任务的生命周期长短不同,把应用处理分为流处理和任务处理,但是云调度性能不足,一个微服务的调度达到了分钟级并且其次整体架构比较庞大,任务调度的效率较低。
故现有的任务调度方法无法解决任务数量不断增加,任务之间的关系越来越复杂、任务监控和处理时效越来越高的需求场景,因此,亟需一种任务调度方法能够满足多样复杂的调度需求,并提高任务调度的效率和准确度。
发明内容
本发明解决的技术问题是如何满足多样复杂的调度需求并提高任务调度的效率和准确度。
为解决上述技术问题,本发明实施例提供一种任务调度方法,所述方法包括:确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。
可选的,在确定多个后续任务的前置执行任务之前,所述方法还包括:在每个后续任务的所有前置执行任务中,确定各个前置执行任务最后一个被执行的概率;确定所述概率最大的前置执行任务作为所述后续任务的前置触发任务。
可选的,如果有后续任务T,其有n个前置执行任务T1……Tn,采用下述公式确定前置执行任务Tj最后一个被执行的概率P(T|Tj):
其中,1≤j≤n,M为统计周期,W(Ti)是所述后续任务T在所述统计周期M内的第i个执行示例的权重值,W(Tji)是前置执行任务Tj在所述统计周期M内的第i个执行实例的权重值,是第i个执行实例中所述后续任务T被加入等待队列的时间与所述前置执行任务Tj的完成时间之间差的标准化值。
可选的,所述方法还包括:每当将所述待执行后续任务加入所述待执行队列时,在所述等待队列中清除所述待执行后续任务。
可选的,所述确定执行数量包括:获取当前允许执行的任务数量,记为当前可执行数量;比较所述当前可执行数量和当前待执行队列中后续任务的数量的大小;如果所述当前可执行数量小于等于当前待执行队列中后续任务的数量,则将所述当前可执行数量作为所述执行数量;如果所述当前可执行数量大于当前待执行队列中后续任务的数量,则将当前待执行队列中后续任务的数量作为所述执行数量。可选的,当前待执行队列中的各个后续任务分别具有对应的任务组,所述当前可执行数量为各个任务组当前允许执行任务数量之和,采用下述公式确定任务组Gj当前允许执行任务数量:
其中,NUM(Gj)用于表示所述任务组Gj当前允许执行任务数量;其中S为当前待执行队列中的各个后续任务分别具有对应的任务组的个数,W(Gj)为所述任务组Gj的权重,L为当前最大并发度,R(Gj)为所述任务组Gj当前正在执行的任务数量。
可选的,执行所述待执行队列中执行数量个待执行后续任务包括:从所述待执行队列中取出执行数量个待执行后续任务放入执行队列中进行执行。
可选的,每个后续任务具有优先级,执行所述待执行队列中执行数量个待执行后续任务包括:依照各个后续任务的优先级,根据优先级从高到低的顺序,从所述待执行队列中选取执行数量个待执行后续任务进行执行。
可选的,所述方法还包括:如果执行任一前置执行任务失败,则将执行失败的前置执行任务加入异常队列。
可选的,每个前置执行任务具有优先级,所述方法还包括:读取所述执行失败的前置执行任务,根据所述执行失败的前置执行任务的优先级,发出警示信息。
可选的,采用下述公式计算所述前置执行任务Tj的优先级P(Tj):
其中,N是所述前置执行任务Tj对应的结束任务B的个数;P(Tj|Bi)用于表示所述前置执行任务Tj对其结束任务Bi的影响因子,W(Bi)用于表示所述前置执行任务Tj对应的结束任务Bi的权重值。
本发明实施例还提供一种任务调度装置,所述装置包括:前置确定模块,用于确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;前置执行模块,用于依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;后续判断模块,用于判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;后续执行模块,用于确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。
本发明实施例还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述任务调度方法的步骤。
本发明实施例还提供一种终端,所述终端包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述任务调度方法的步骤。
与现有技术相比,本发明实施例的技术方案具有以下有益效果:
本发明实施例提供一种任务调度方法,所述方法包括:确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。通过本发明实施例提供的技术方案,确定并执行多个前置执行任务,当前置执行任务中的前置触发任务执行成功后,由于每个前置执行任务与后续任务具有预设的映射关系,可以基于前置触发任务已完成,将前置触发作业对应的后续任务放入等待队列中,再根据前置执行任务与后续任务的映射关系,判断所述等待队列中各个后续任务的全部执行任务是否均已完成,将全部前置执行任务执行完成的后续任务放入待执行队列中等待执行,再确定执行数量,并执行所述待执行队列中所述执行数量个待执行后续任务,由此调度后续任务之前无需定义该后续任务的所有前置执行任务的执行顺序,只需要根据前置执行任务与后续任务的关系以及前置执行任务的执行状态,即可完成后续任务的调度和执行,从而可以满足多样复杂的调度需求,并提高任务调度的准确性。
进一步地,在每个后续任务的前置执行任务中确定各个前置执行任务最后一个被执行的概率,进而选择概率最大的前置执行任务作为前置触发任务,如果所述前置触发任务是最后一个执行的前置执行任务,当前置触发任务执行完成后,将所述前置触发任务对应的后续任务放入准备队列中,此时所述后续任务的全部前置执行任务均已执行完成,由此可以减少所述后续任务在所述等待队列中的等待时间,提高了任务调度的效率。
进一步地,每个后续任务具有优先级,在判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成时,可以依照各个后续任务的优先级,根据优先级从高到低的顺序,从所述待执行队列中选取执行数量个待执行后续任务,从而使得优先级较高的任务能够先得到执行。
附图说明
图1是本发明实施例中一种任务调度方法的流程图。
图2是本发明实施例中一种发布任务和回退任务的工作场景示意图。
图3是本发明实施例中一种任务调度装置的结构示意图。
图4是本发明实施例中一种任务调度方法适用的整体架构示意图。
具体实施方式
在现有技术中,通常基于开源软件二次开发或采用商用软件进行任务调度。但由于目前基于开源软件的调度方法采用基于任务流的调度方法,如oozie,azkaban等,均需要定义任务流中的各个任务之间的逻辑关系。这种方法不同任务流之间的耦合性较高,当任务数量和任务关系复杂增加时,准确清楚地定义任务流是十分困难的,如果无法准确定义任务流,容易在调度过程中出现错误。另外,基于开源软件的调度方法通常仅提供核心的任务调度功能,辅助的任务开发、任务关系组织、任务状态维护、任务监控、任务治理、服务监控、日志下载等诸多能力都比较欠缺,二次开发的工作量依旧很巨大。此外,商业软件虽然成熟稳定,当任务关系复杂时,商业软件也很难及时满足各种复杂或个性化的调度需求。
本发明的发明人经研究发现,现有的任务调度方法依赖提前定义的任务流进行任务调度,但随着任务数量不断增加,任务之间的关系越来越复杂,定义任务流时很容易出现错误,一旦出现错误,整个任务流的调度便会失败,亟需一种无需定义任务流的任务调度方法,以满足多样复杂的调度需求并提高任务调度的效率和准确度。
在本发明实施例中,确定并执行多个前置执行任务,当前置执行任务中的前置触发任务执行成功后,由于每个前置执行任务与后续任务具有预设的映射关系,基于前置触发任务已完成,将前置触发作业对应的后续任务放入等待队列中,再根据前置执行任务与后续任务的映射关系,判断所述等待队列中各个后续任务的全部执行任务是否均已完成,再将全部前置执行任务执行完成的后续任务放入待执行队列中等待执行,再确定执行数量,并执行所述待执行队列中所述执行数量个待执行后续任务,由此调度后续任务之前无需定义该后续任务的所有前置执行任务的执行顺序,只需要根据获知前置执行任务与后续任务的关系以及前置执行任务的执行状态,即可完成后续任务的调度和执行,从而可以满足多样复杂的调度需求,并提高任务调度的准确性。
为使本发明的上述目的、特征和有益效果能够更为明显易懂,下面结合附图对本发明的具体实施例做详细的说明。
参考图1,图1是本发明实施例中一种任务调度方法的流程图,该方法可以由客户端执行,所述客户端可以是计算机等,用于对各种计算机可执行的任务进行调度。图1所述的任务调度方法可以包括如下步骤:
步骤S101:确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;
步骤S102:依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;
步骤S103:判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;
步骤S104:确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。
在步骤S101的具体实施中,确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务。
具体而言,本实施例中可以包含一个预设的任务关系表,所述任务关系表记载了所述前置执行任务与一个或多个后续任务的映射关系。
进一步地,所述前置执行任务可以包括依赖任务、所述前置触发任务、相关任务。所述依赖任务是指,只有全部的依赖任务完成之后,才能开始同一批次的后续任务的执行。所述前置触发任务是负责唤起后续任务调度的任务,例如当所述前置触发任务执行完成后,可以触发将所述前置触发任务对应的后续任务放入准备队列中的步骤。所述相关任务是指跨调度批次的任务关系,目的是保证同一调度批次的任务的整体完整性,只有当前批次的相关任务都执行完成后,才能开始下一批次的任务的执行。
由上,本发明实施例可以通过任务之间的依赖关系、触发关系、相关关系来自动编排任务,通过自定义任务之间的关系,可以有效保证任务的有序运行,不会出现任务跨周期执行时调度混乱的错误。
由于本实施例的任务调度方法依赖的是前置执行任务与后续任务的预设的映射关系,本发明实施例并不受限于任务流的定义,能够支持多样的调度机制,包括但不限于离散调度、准实时调度、交互式调度等。本实施例的任务调度方法既能支持短周期任务,也能支持长周期任务。
进一步地,当某一前置执行任务与后续任务的映射关系出现变化时,不会影响其他前置执行任务与后续任务的映射关系,只需要在所述任务关系表中对该前置执行任务与后续任务的映射关系进行更新。
进一步地,所述前置触发任务可以是所述前置执行任务中的任意一个,优选的,将前置执行任务中最后一个被执行的概率最大的前置执行任务作为前置触发任务,从而可以提高任务调度的时效性。具体而言,在确定多个后续任务的前置执行任务之前,还包括:在每个后续任务的所有前置执行任务中,确定各个前置执行任务最后一个被执行的概率;确定所述概率最大的前置执行任务作为所述后续任务的前置触发任务。例如,可以根据算法确定各个前置执行任务最后一个被执行的概率。将最后一个被执行的概率最大的前置执行任务作为前置触发任务,如果所述前置触发任务为前置执行任务中最后一个被执行的任务,当前置触发任务执行完成后,将所述前置执行任务对应的后续任务放入准备队列时,此时后续任务的全部前置执行任务均已执行完成,即可将所述后续任务加入待执行队列,由此可以减少所述后续任务在所述等待队列中的等待时间,提高了任务调度的效率。
进一步地,如果有后续任务T,其有n个前置执行任务T1……Tn,采用下述公式确定前置执行任务Tj最后一个被执行的概率P(T|Tj):
其中,1≤j≤n,M为统计周期,W(Ti)是所述后续任务T在所述统计周期M内的第i个执行示例的权重值,W(Tji)是前置执行任务Tj在所述统计周期M内的第i个执行实例的权重值,是第i个执行实例中所述后续任务T被加入等待队列的时间与所述前置执行任务Tj的完成时间之间差的标准化值。本领域技术人员可以理解,后续任务T被加入等待队列的时间与前置执行任务Tj的完成时间之间差的标准化值越小,前置执行任务Tj是后续任务T的触发任务的概率越大。
进一步地,本发明实施例中的任务调度方法可以支持多种触发方式,包括但不限于时间触发、依赖触发、混合触发等。
进一步地,本发明实施例中的任务调度方法可以支持多种计算机可执行的任务类型,包括但不限于数据仓库存储任务、读取结构化查询语言任务、超时任务分析任务、Oracle存储任务等,并能实现灵活拓展。
本实施例中的任务调度方法还可以包括,在确定多个后续任务的前置执行任务之前,还可以包括发布任务和/或回退的步骤,图2示出了本发明实施例中一种发布任务和回退任务的工作场景示意图,所述发布任务和回退任务可以设置于图中示出的步骤S101之前执行。
发布任务主要包括以下步骤:升级前备份脚本和数据库;发布脚本程序到对应的执行客户端,例如agent服务器;进行升级后检查,包括任务依赖关系检查、任务触发关系检查、任务对应的脚本是否和元数据一致等;同步最新脚本到对应的最新版本库目录中。
回退任务主要包括以下步骤:根据备份回退元数据和脚本;进行回退后检查,包括任务依赖关系检查、任务触发关系检查、任务对应的脚本是否和元数据一致等,如果检查时存在错误,则进行任务回退。
可以理解的是,本实施例中前置执行任务、后续任务、等待队列、待执行队列、执行队列、异常队列的一项或多项可以通过任务发布和任务回退的步骤进行设置。通过上述步骤可以实现自动的发布任务和回退任务,能够保证任务发布的规范性,提高任务发布的效率。
可以理解的是,本发明实施例中的任务调度方法可以支持任务发布、任务校验等,可以解决传统调度***在任务发布时需要手动配置任务基本信息和任务依赖关系等问题。
在步骤S102的具体实施中,依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列。
具体而言,执行所述前置执行任务后,获取所述前置执行任务的执行状态信息。如果所述前置执行任务为前置触发任务,则根据所述前置执行任务与所述后续任务的映射关系,将所述前置触发任务对应的后续任务加入等待队列。所述等待队列用于存放前置触发任务已经执行完成的后续任务。
进一步地,如果执行任一前置执行任务失败,则将执行失败的前置执行任务加入异常队列。所述执行任一前置执行任务失败的情况包括但不限于以下异常情况:任务执行中断、任务执行结果校验不通过、任务到指定时间未调起等。
进一步地,每个前置执行任务具有优先级,在具体实施中,可以读取所述执行失败的前置执行任务,根据所述执行失败的前置执行任务的优先级,发出警示信息。
需要指出的是,所述优先级可以是预设的,也可以是通过计算实时确定的。
进一步地,可以采用下述公式计算所述前置执行任务Tj的优先级P(Tj):
其中,N是所述前置执行任务Tj对应的结束任务B的个数;P(Tj|Bi)用于表示所述前置执行任务Tj对其结束任务Bi的影响因子,W(Bi)用于表示所述前置执行任务Tj对应的结束任务Bi的权重值。所述影响因子可以取0至1之间的任意值。本领域技术人员可以理解,所述结束任务为所述前置执行任务对应的最终的后续任务,所述结束任务由前置执行任务所属的业务决定,例如监管业务、交易业务等。当所述结束任务完成时,即完成了所述前置执行任务所对应的业务。
在具体实施中,每一前置执行任务具有唯一对应的任务标识,每一种类型的异常情况具有唯一对应的错误标识,将所述前置执行任务加入所述异常队列可以包括将所述任务标识加入异常队列,还可以包括将执行失败的前置执行任务的异常情况对应的错误标识加入异常队列。
进一步地,如果前置执行任务的优先级是预设的,所述方法还可以包括读取所述异常队列中的前置执行任务的任务标识和/或错误标识,根据所述任务标识,在预设的优先级列表中查找所述任务标识对应的预设优先级,所述优先级列表可以体现前置执行任务与预设的优先级的映射关系,根据所述任务标识对应的预设优先级,发出警示信息。
在具体实施中,所述警示信息可以采用以下一项或多项的方式发出:文字显示提醒、声音提醒、图标闪烁提醒等。可以理解的是,具有不同优先级的前置执行任务可以对应不同方式的警示信息,例如,优先级可以分为一级、二级、三级、四级,级数越大,优先级越高,对于优先级三级和四级的任务,可以选择声音提醒的方式发出警示信息,对于优先级一级和二级的任务,可以选择文字显示提醒的方式发出警示信息。
可以理解的是,在本发明实施例的一种具体实施方式中,可以在执行失败的前置执行任务加入异常队列时,读取新加入异常队列的执行失败的前置执行任务,发出警示信息;在另一种具体实施方式中,可以设定一个时间段,定期读取异常队列中的前置执行任务,发出警示信息。
进一步地,所述方法还可以包括根据所述错误标识,在预设的异常列表中查找所述错误标识对应的异常原因和/或解决方法,其中,所述预设的异常列表可以包含多个错误标识,以及和每个错误标识具有映射关系的异常原因和/或解决方法。
进一步地,所述警示信息可以包括以下一项或多项:所述任务标识、所述任务标识对应的任务名称、所述错误标识、所述错误标识对应的异常原因、所述错误标识对应的解决方法。
进一步地,本发明实施例中,所述任务调度方法还可以包括记录所述警示信息,按周期自动统计、分析异常情况。
在步骤S103的具体实施中,判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列。
进一步地,每当将所述待执行后续任务加入所述待执行队列时,在所述等待队列中清除所述待执行后续任务,以便加入新的后续任务。
在步骤S104的具体实施中,确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。
在具体实施中,确定执行数量包括:获取当前允许执行的任务数量,记为当前可执行数量;比较所述当前可执行数量和当前待执行队列中后续任务的数量的大小;如果所述当前可执行数量小于等于当前待执行队列中后续任务的数量,则将所述当前可执行数量作为所述执行数量;如果所述当前可执行数量大于当前待执行队列中后续任务的数量,则将当前待执行队列中后续任务的数量作为所述执行数量。
具体而言,所述当前允许执行的任务数量可以根据客户端数量、任务组、任务类型、当前最大并发度等多维度确定当前可执行的任务数量。
进一步地,当前待执行队列中的各个后续任务分别具有对应的任务组,所述当前可执行数量为各个任务组当前允许执行任务数量之和,采用下述公式确定任务组Gj当前允许执行任务数量:
其中,NUM(Gj)用于表示所述任务组Gj当前允许执行任务数量;其中S为当前待执行队列中的各个后续任务分别具有对应的任务组的个数,W(Gj)为所述任务组Gj的权重,L为当前最大并发度,R(Gj)为所述任务组Gj当前正在执行的任务数量。具体而言,当前最大并发度是指客户端当前允许执行的任务数量,当前最大并发度与各个任务组正在执行的任务数量的差值为当前剩余的可执行数量,由于待执行队列中的后续任务属于不同的任务组,需要将客户端剩余的可执行数量按任务组的权重分配给各个任务组,各个任务组当前允许执行任务数量之和为当前可执行数量。
进一步地,从所述待执行队列中取出执行数量个待执行后续任务放入执行队列中进行执行。如果执行数量为当前可执行数量,则按照各个任务组当前允许执行任务数量分别从待执行队列中取出各个任务组的后续任务进行执行;如果执行数量为当前待执行队列中后续任务的数量,则可以将当前待执行队列中后续任务的数量按任务组的权重分配给各个任务组,以得到各个任务组当前可执行的后续任务的数量,并根据各个任务组当前可执行的后续任务的数量从待执行队列中取出各个任务组的后续任务进行执行。
进一步地,各个后续任务具有优先级,可以依照各个后续任务的优先级,根据优先级从高到低的顺序,从所述待执行队列中选取执行数量个待执行后续任务进行执行。需要指出的是,后续任务的优先级可以是预设的,也可以是通过计算确定的。
进一步地,本发明实施例中的任务方法还可以设置执行频率,例如交易日/非交易日执行,或者每日、每周、每旬、每半月、每月、每季度、每半年、每年等不同执行周期,在各个周期内还支持当周日、第一自然日、第一个交易日,最后一个自然日、最后一个交易日、第N个自然日、第N个交易日等时间执行待执行队列中的待执行后续任务。
本领域技术人员可以理解,当所述待执行任务执行完成后,所述待执行任务可以成为新的前置执行任务。
通过本发明实施例,确定并执行多个前置执行任务,当前置执行任务中的前置触发任务执行成功后,由于每个前置执行任务与后续任务具有预设的映射关系,基于前置触发任务已完成,可以将前置触发作业对应的后续任务放入等待队列中,再根据前置执行任务与后续任务的映射关系,判断所述等待队列中各个后续任务的全部执行任务是否均已完成,再将全部前置执行任务执行完成的后续任务放入待执行队列中等待执行,再可以确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。由此调度后续任务之前无需定义该后续任务的所有前置执行任务的执行顺序,只需要根据前置执行任务与后续任务的关系以及前置执行任务的执行状态,即可完成后续任务的调度和执行,从而可以满足多样复杂的调度需求,并提高任务调度的准确性。
图3是本发明实施例的一种任务调度装置的结构示意图。本实施例中的任务调度装置包括前置确定模块31、前置执行模块32、后续判断模块33、后续执行模块34,其中:
前置确定模块31,用于确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;
前置执行模块32,用于依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;
后续判断模块33,用于判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;
后续执行模块34,用于确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务。
本领域技术人员理解,本实施例中的任务调度装置可以用于实施上述图1至图2所示实施例中的任务调度方法。
进一步地,本发明实施例还公开一种存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时执行上述图1至图2所示实施例中的方法技术方案。优选地,存储介质可以包括诸如非挥发性(non-volatile)存储器或者非瞬态(non-transitory)存储器等计算机可读存储介质。存储介质可以包括ROM、RAM、磁盘或光盘等。进一步地,本发明实施例还公开一种终端,包括存储器和处理器,所述存储器上存储有能够在处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行上述图1至图2所示实施例中的方法技术方案。所述终端包括但不限于手机、计算机、平板电脑等终端设备。
需要指出的是,在本申请实施例中,上述任务调度方法可以采用微服务架构。微服务架构将单一应用程序划分成一组小的服务,每个微服务仅关注于完成一件任务,但服务之间可以互相协调、互相配合,每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通。
本领域技术人员可以理解的是,现有的微服务之间通常采用远程过程调用(Remote Procedure Call,RPC)的方式进行通信,这种通信方式是同步的,例如,微服务A想要与微服务B进行通信,首先必须要建立起通信连接,接着还要解决寻址的问题,也即,微服务A如何连接到微服务B所属的服务器以及特定的端口,寻址完成建立连接之后,进行RPC通信时,需要将传输的数据进行序列化。这种RPC的通信方式由于只能支持同步通信,无法解耦,性能较差。
而本发明实施例中的微服务之间采用消息队列的机制进行交互,用于支持微服务执行的各个任务。所述消息队列可以包括:等待队列、待执行队列、执行队列等,但并不限于此。具体而言,本发明实施例中的任务调度方法是基于微服务架构的,该微服务架构中的各个微服务之间通过任务调度过程中的消息队列实现的,各个微服务之间是解耦的。由于本发明实施例中无需定义后续任务的所有前置执行任务的执行顺序,任务与任务之间也是解耦的,因此,本发明实施例中不仅各个微服务之间是解耦的,各个任务之间也是解耦的,能够满足多样复杂的调度需求,极大地提高了***的性能。
本领域技术人员可以理解的是,微服务架构具有复杂度可控、可被独立部署、技术选型灵活、容错性能和扩展性能好的优点。
具体而言,微服务架构将服务分解,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰表述各个微服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发效率。
每个微服务都围绕着具体业务进行构建,并且每个微服务可以具备独立的运行进程,因而能够被独立地部署到生产环境、类生产环境等。当某个微服务发生变更时无需编译、部署整个应用。
在微服务架构下,技术选型是去中心化的,每个微服务可以根据自身的需求自由选择最适合的技术栈,对技术栈进行升级时面临的风险较低,甚至可以完全重构一个微服务。
在微服务架构下,由于故障被隔离在单个服务中,其他服务可以通过重试、平稳退化等机制实现应用层面的容错,可以避免在单一进程的传统架构中,故障在进程内扩散,形成应用全局性的不可用的情况。
在微服务架构下,由于微服务架构具有灵活性,每个微服务可以根据实际需求独立进行拓展,进而解决应用的不同组件在扩展需求上存在的差异,从而可以将整个应用复制到不同的节点。
采用上述任务调度方法的任务调度装置也可以涉及多种功能的微服务,这些微服务内部涉及到大量复杂的、交互的事件处理、状态转换。通过上述任务调度方法,各个微服务实现无状态化,服务之间通过消息队列进行通讯,具有异步、并发等特点,更加高效,可以避免统一的、集中式的服务管理机制。
参考图4,图4示出了本发明实施例中一种任务调度方法适用的整体架构示意图。
本领域技术人员可以理解,数据平台的建设和抽取、转换、装载(ETL)是密不可分的,随着业务发展,数据平台承载着成千上万甚至几十万的ETL任务调度,这些任务的形态各种各样,互相之间还存在着一定的约束关系。怎么样让大量的ETL任务高效且准确的完成调度而不出现问题,甚至在任务调度执行中出现错误的情况下,任务能够完成自我恢复,同时执行错误告警与完整的日志查询,成为提高数据平台开发效率和服务能力的关键。本发明实施例的方案提出一种基于微服务的自研架构。
具体而言,本发明实施例采用微服务架构,可以实现任务管理401、任务发布402、任务查询403、任务监控404、***配置405等功能。本发明实施例还可以提供开放***接口,也即对外提供REST API,便于对接周边***。
具体而言,所述任务管理401可以是指对拥有权限的任务进行管理,包括添加,删除,修改,重跑等;支持任务优先级管理,并根据最终服务的对象自动计算关键路径,并根据关键路径设置和数据服务级别匹配的任务优先级;支持作业失败自动重试,可以设置自动重试次数,重试间隔等;可以临时禁止或启用一个周期任务,禁止后批量会停在禁止的任务处,启动后自动根据预定的顺序继续执行;进行并发管理,根据客户端、任务组、任务类型等多维度设置任务执行的并发度。
所述任务发布402是指支持自动化的任务模版上传、检验、发布,解决传统调度***在任务上线时需要手工配置任务基本信息、任务依赖关系等既繁琐又容易出错的问题。
所述任务查询403是指支持当日任务计划和执行流水的检索,支持周期任务信息的检索,包括任务概况,历史运行流水,运行日志,变更记录,依赖关系树查询等。
所述任务监控404可以基于状态检测服务415、异常处理服务416、主机监控服务417来实现,从而进行全面的运维监控管理。
进一步需要指出的是,本发明实施例中公开的任务调度方法,还可以支持用户权限管理(图未示),不同角色的用户具有不同的操作权限,也可以支持多租户隔离,支持分散管理、统一调度的平台化调度模式,支持各种粒度的用户审计,满足审计要求。
本发明实施例的微服务架构中采用微服务可以包括:任务实例触发事件监听服务411、接口触发服务412、任务控制服务413、任务下发服务414、状态检测服务415、异常处理服务416、主机监控服务417,但并不限于此。
其中,任务实例触发事件监听服务411用于监听后续任务的触发条件是否满足,如果满足将对应的加载就绪消息放到任务实例就绪消息队列(图未示)中。任务实例触发时间监听服务411可以包括日批任务监听、多批次任务监听、交互式任务监听等。
接口触发服务412用于监听任务实例就绪消息队列(图未示),根据任务的优先级从任务实例就绪消息队列(图未示)中取出相应数量的任务,并调用任务执行服务(图未示)执行任务。
任务控制服务413用于监听等待队列421,判断等待队列421中的后续任务是否满足依赖、翻牌等各种运行条件,如果满足则从等待队列421中删除并将该任务加入到待执行队列422中。
任务下发服务414用于监听待执行队列422,根据当前的并发情况确定当前可执行任务数量,并调用任务执行服务(图未示)执行任务。
状态检测服务415用于监听异常队列,并对于执行失败的任务进行报警等。
异常处理服务416用于负责任务的异常重提、重跑、跳过等异常操作。异常处理服务416可以对执行失败的任务进行异常分析,具体可以包括对每一条异常预警提供异常原因,事后支持在线异常分类和分析登记,按周期自动统计异常分析情况,对异常进行分类编码,并对每一类异常制定异常现象、异常原因、建议解决方案等;还可用于进行异常日志管理,查看和下载执行失败的历史任务日志,快速分析和定位问题。
主机监控服务417用于监控各个客户端是否正常,并按照预定的策略自动恢复或者报警。
由上,本发明实施例通过状态检测服务415、异常处理服务416和主机监控服务417能够实现全面地运维监控管理。
需要指出的是,在本发明实施例中公开的微服务架构,每个微服务负责的功能清晰,互相耦合度低,具有良好的扩展性、稳定性和容错性,能够实现功能模块化,实现不同微服务内部的高内聚,服务之间松耦合。
本领域技术人员可以理解的是,多个微服务内部涉及到大量复杂的、交互的时间处理、状态转换,同时,这些时间处理和状态转换又对实时性和效率提出了极高的要求,因此需要一个高效的通讯机制。本发明实施例中的微服务之间采用消息队列的机制进行交互,用于支持微服务执行的各个任务,具有异步、并发等特点,更加高效,核心服务无状态化。所述消息队列可以包括:等待队列421、待执行队列422、执行队列423、异常队列424、延时队列425。
所述等待队列421用于存放被触发的任务,也即用于存放前置触发任务执行完成的后续任务;所述待执行队列422用于存放满足运行条件的后续任务;所述执行队列423用于根据并发度执行待执行队列422中的任务;所述异常队列424用于存放执行失败的任务;所述延时队列425用于存放延迟执行的任务。更多关于等待队列421、待执行队列422、执行队列423、异常队列424的内容可以参考图1至图2的相关描述,在此不再赘述。
虽然本发明披露如上,但本发明并非限定于此。任何本领域技术人员,在不脱离本发明的精神和范围内,均可作各种更动与修改,因此本发明的保护范围应当以权利要求所限定的范围为准。
Claims (12)
1.一种任务调度方法,其特征在于,所述方法包括:
确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;
依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;
判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;
确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务;其中,在确定多个后续任务的前置执行任务之前,还包括:
在每个后续任务的所有前置执行任务中,确定各个前置执行任务最后一个被执行的概率;
确定所述概率最大的前置执行任务作为所述后续任务的前置触发任务;
其中,如果有后续任务T,其有n个前置执行任务T1……Tn,采用下述公式确定前置执行任务Tj最后一个被执行的概率P(T|Tj):
2.根据权利要求1所述的任务调度方法,其特征在于,还包括:
每当将所述待执行后续任务加入所述待执行队列时,在所述等待队列中清除所述待执行后续任务。
3.根据权利要求1所述的任务调度方法,其特征在于,所述确定执行数量包括:
确定当前允许执行的任务数量,记为当前可执行数量;
比较所述当前可执行数量和当前待执行队列中后续任务的数量的大小;
如果所述当前可执行数量小于等于当前待执行队列中后续任务的数量,则将所述当前可执行数量作为所述执行数量;
如果所述当前可执行数量大于当前待执行队列中后续任务的数量,则将当前待执行队列中后续任务的数量作为所述执行数量。
5.根据权利要求1所述的任务调度方法,其特征在于,执行所述待执行队列中执行数量个待执行后续任务包括:
从所述待执行队列中取出执行数量个待执行后续任务放入执行队列中进行执行。
6.根据权利要求5所述的任务调度方法,其特征在于,每个后续任务具有优先级,执行所述待执行队列中执行数量个待执行后续任务包括:
依照各个后续任务的优先级,根据优先级从高到低的顺序,从所述待执行队列中选取执行数量个待执行后续任务进行执行。
7.根据权利要求1所述的任务调度方法,其特征在于,还包括:
如果执行任一前置执行任务失败,则将执行失败的前置执行任务加入异常队列。
8.根据权利要求7所述的任务调度方法,其特征在于,每个前置执行任务具有优先级,所述方法还包括:
读取所述执行失败的前置执行任务,根据所述执行失败的前置执行任务的优先级,发出警示信息。
10.一种任务调度装置,其特征在于,包括:
前置确定模块,用于确定多个后续任务的前置执行任务,每个前置执行任务与一个或多个后续任务具有预设的映射关系,其中,在每个后续任务的前置执行任务中选取一个任务作为前置触发任务;
前置执行模块,用于依次执行所述前置执行任务,如果执行成功,并且所述前置执行任务为前置触发任务,则将所述前置执行任务的后续任务加入等待队列;
后续判断模块,用于判断所述等待队列中各个后续任务的全部前置执行任务是否均已完成,对于全部前置执行任务均已完成的后续任务,记为待执行后续任务,并将所述待执行后续任务加入待执行队列;
后续执行模块,用于确定执行数量,执行所述待执行队列中所述执行数量个待执行后续任务;
其中,所述装置还包括:
概率计算模块,用于在每个后续任务的所有前置执行任务中,确定各个前置执行任务最后一个被执行的概率;
前置触发确定模块,用于确定所述概率最大的前置执行任务作为所述后续任务的前置触发任务;
其中,如果有后续任务T,其有n个前置执行任务T1……Tn,采用下述公式确定前置执行任务Tj最后一个被执行的概率P(T|Tj):
11.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器运行时执行权利要求1至9任一项所述的任务调度方法。
12.一种任务调度终端,包括存储器和处理器,所述存储器上存储有能够在所述处理器上运行的计算机程序,其特征在于,所述处理器运行所述计算机程序时执行权利要求1至9任一项所述的任务调度方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011189452.0A CN112286661B (zh) | 2020-10-30 | 2020-10-30 | 任务调度方法及装置、存储介质、终端 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011189452.0A CN112286661B (zh) | 2020-10-30 | 2020-10-30 | 任务调度方法及装置、存储介质、终端 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112286661A CN112286661A (zh) | 2021-01-29 |
CN112286661B true CN112286661B (zh) | 2021-10-15 |
Family
ID=74352568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011189452.0A Active CN112286661B (zh) | 2020-10-30 | 2020-10-30 | 任务调度方法及装置、存储介质、终端 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112286661B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113268318A (zh) * | 2021-04-07 | 2021-08-17 | 北京思特奇信息技术股份有限公司 | 一种任务调度的方法和分布式*** |
CN113806051B (zh) * | 2021-09-22 | 2022-08-19 | 海通证券股份有限公司 | 计算设备的任务管理方法及装置、存储介质、计算设备 |
CN115601195B (zh) * | 2022-10-17 | 2023-09-08 | 桂林电子科技大学 | 基于电力用户实时标签的交易双向推荐***及其方法 |
CN116362652B (zh) * | 2023-06-01 | 2023-10-31 | 上海仙工智能科技有限公司 | 一种运输分拨任务调度方法及***、存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630588A (zh) * | 2014-11-06 | 2016-06-01 | 卓望数码技术(深圳)有限公司 | 一种分布式作业调度方法和*** |
CN109933414A (zh) * | 2017-12-18 | 2019-06-25 | 飞狐信息技术(天津)有限公司 | 一种任务调度方法、装置及*** |
CN110704173A (zh) * | 2019-09-29 | 2020-01-17 | 深圳前海环融联易信息科技服务有限公司 | 任务调度方法、调度***、电子设备及计算机存储介质 |
CN110858158A (zh) * | 2018-08-23 | 2020-03-03 | 北京京东金融科技控股有限公司 | 分布式任务调度方法、装置、电子设备、存储介质 |
CN110909077A (zh) * | 2019-11-05 | 2020-03-24 | 四川中讯易科科技有限公司 | 一种分布式存储方法 |
CN111459629A (zh) * | 2020-03-24 | 2020-07-28 | 深圳市云智融科技有限公司 | 基于Azkaban的项目运行方法、装置及终端设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103365708B (zh) * | 2012-04-06 | 2017-03-22 | 阿里巴巴集团控股有限公司 | 任务调度方法和装置 |
US9921890B2 (en) * | 2014-11-26 | 2018-03-20 | Rockwell Automation Technologies, Inc. | Event generation management for an industrial controller |
CN107748696B (zh) * | 2017-09-20 | 2020-05-01 | 深圳壹账通智能科技有限公司 | 一种任务调度的方法及终端设备 |
CN110928655A (zh) * | 2019-11-11 | 2020-03-27 | 深圳前海微众银行股份有限公司 | 一种任务处理方法及装置 |
-
2020
- 2020-10-30 CN CN202011189452.0A patent/CN112286661B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105630588A (zh) * | 2014-11-06 | 2016-06-01 | 卓望数码技术(深圳)有限公司 | 一种分布式作业调度方法和*** |
CN109933414A (zh) * | 2017-12-18 | 2019-06-25 | 飞狐信息技术(天津)有限公司 | 一种任务调度方法、装置及*** |
CN110858158A (zh) * | 2018-08-23 | 2020-03-03 | 北京京东金融科技控股有限公司 | 分布式任务调度方法、装置、电子设备、存储介质 |
CN110704173A (zh) * | 2019-09-29 | 2020-01-17 | 深圳前海环融联易信息科技服务有限公司 | 任务调度方法、调度***、电子设备及计算机存储介质 |
CN110909077A (zh) * | 2019-11-05 | 2020-03-24 | 四川中讯易科科技有限公司 | 一种分布式存储方法 |
CN111459629A (zh) * | 2020-03-24 | 2020-07-28 | 深圳市云智融科技有限公司 | 基于Azkaban的项目运行方法、装置及终端设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112286661A (zh) | 2021-01-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112286661B (zh) | 任务调度方法及装置、存储介质、终端 | |
US11397709B2 (en) | Automated configuration of log-coordinated storage groups | |
EP3543866B1 (en) | Resource-efficient record processing in unified automation platforms for robotic process automation | |
US10373247B2 (en) | Lifecycle transitions in log-coordinated data stores | |
US8938421B2 (en) | Method and a system for synchronizing data | |
US10942823B2 (en) | Transaction processing system, recovery subsystem and method for operating a recovery subsystem | |
US10642647B2 (en) | Concurrent queueing and control command feedback loop in unified automation platforms | |
JP6223569B2 (ja) | ビジネスフローをスケジュールするためのコンピュータ装置、方法及び装置 | |
EP3428811A1 (en) | Database interface agent for a tenant-based upgrade system | |
US9680893B2 (en) | Method and system for event state management in stream processing | |
US7200626B1 (en) | System and method for verification of a quiesced database copy | |
US10831619B2 (en) | Fault-tolerant stream processing | |
EP3195117B1 (en) | Automated configuration of log-coordinated storage groups | |
CN107016480B (zh) | 任务调度方法、装置及*** | |
US20150127679A1 (en) | System and method for identifying and synchronizing data from multiple backend enterprise computer systems to multiple types of mobile devices | |
CN108491254A (zh) | 一种数据仓库的调度方法及装置 | |
US8812896B1 (en) | High-availability data center | |
CN111367989B (zh) | 一种实时数据指标计算***和方法 | |
US20170206208A1 (en) | System and method for merging a mainframe data file to a database table for use by a mainframe rehosting platform | |
CN112631795A (zh) | 业务申请信息自动同步方法、装置、设备及存储介质 | |
CN110908793A (zh) | 长时任务执行方法、装置、设备及可读存储介质 | |
US8336053B2 (en) | Transaction management | |
WO2018234265A1 (en) | SYSTEM AND APPARATUS FOR TREATMENT GUARANTEED EXACTLY ONCE OF AN EVENT IN AN ENVIRONMENT MANAGED BY A DISTRIBUTED EVENT | |
US9015533B1 (en) | Error handling for asynchronous applications | |
CN112181723A (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 |