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

终端任务的调度方法、终端设备及计算机存储介质

文献发布时间:2023-06-19 12:13:22


终端任务的调度方法、终端设备及计算机存储介质

技术领域

本发明涉及金融科技(Fintech)技术领域,尤其涉及一种终端任务的调度方法、终端设备以及计算机存储介质。

背景技术

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技转变,但由于金融行业的安全性、实时性以及稳定性等要求,也对技术提出了更高的要求。

目前,在不同网络环境当中运行的运维调度系统通常被要求能够支持高可用,即至少在一个节点宕掉时,另外的节点能够快速接管调度服务以保证整体的服务运行不受影响。现有为了实现运维调度系统的高可用通常都是借助外部的检查模块或者其它开源协调服务等模块,仅运行1个调度系统的调度器进程节点,以此规避同一任务被重复调度的风险。

然而,由于外部模块的检测具有一定的滞后性,会使得整体服务存在一定的间断,并且运行一个调度进程节点进行服务调度不仅对于机器性能要求很高,且处于备用状态的节点(在当前进行服务调度的节点宕掉时接管当前节点继续进行服务调度的节点)虽然没有启动,但该备用的节点仍然需要占用一个或者多个节点进程,从而会造成机器资源的浪费。

发明内容

本发明的主要目的在于提供一种终端任务的调度方法、终端设备以及计算机存储介质,旨在以多个节点调度任务的方式,提高任务调度的稳定性,在真正提供不间断服务的基础上,避免终端机器资源的浪费,提高终端的资源利用率。

为实现上述目的,本发明提供一种终端任务的调度方法,所述终端任务的调度方法应用于终端任务的调度系统上,同时运行的多个任务调度节点中的任意一个,所述终端任务的调度方法包括:

在预设的数据库当中获取可调度的调度作业文件,其中,所述调度作业文件序列化存储在所述数据库当中;

基于悲观锁机制选择所述调度作业文件,以避免所述地调度作业文件被多个所述任务调度节点重复调度;

检测选择的所述调度作业文件以确定待执行的终端任务;

将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行。

此外,为实现上述目的,本发明还提供一种终端任务的调度系统,所述终端任务的调度系统上同时运行多个任务调度节点,多个所述任务调度节点当中的任意一个任务调度节点包括:

获取模块,用于在预设的数据库当中获取可调度的调度作业文件,其中,所述调度作业文件序列化存储在所述数据库当中;

选择模块,用于基于悲观锁机制选择所述调度作业文件,以避免所述地调度作业文件被多个所述任务调度节点重复调度;

检测模块,用于检测选择的所述调度作业文件以确定待执行的终端任务;

写入模块,用于将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行。

其中,本发明终端任务的调度系统的多个任务调度节点各自在运行时均实现如上所述的终端任务的调度方法的步骤。

此外,为实现上述目的,本发明还提供一种终端设备,所述终端设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的终端任务的调度程序,所述终端任务的调度程序被所述处理器执行时实现如上所述的终端任务的调度方法的步骤。

此外,为实现上述目的,本发明还提供一种计算机存储介质,所述计算机存储介质上存储有终端任务的调度程序,所述终端任务的调度程序被处理器执行时实现如上所述的终端任务的调度方法的步骤。

此外,为实现上述目的,本发明还提供计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如上所述的终端任务的调度方法的步骤。

本发明提供一种终端任务的调度方法、系统、终端设备、计算机存储介质以及计算机程序产品,通过终端任务的调度系统上,同时运行的多个任务调度节点中的任意一个任务调度节点,在预设的数据库当中获取可调度的调度作业文件,其中,所述调度作业文件序列化存储在所述数据库当中;基于悲观锁机制选择所述调度作业文件,以避免所述地调度作业文件被多个所述任务调度节点重复调度;检测选择的所述调度作业文件以确定待执行的终端任务;将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行。

本发明在调度执行终端任务的过程中,通过调度系统同时运行多个任务调度节点(或者称调度进程),且该多个任务调度节点当中的任意一个任务调度节点,从序列化存储调度作业文件——DAG(Directed Acyclic Graph,有向无环图)文件的数据库当中,获取当前可调度的调度作业文件,然后,该任务调度节点基于能够避免同一调度作业文件被重复调度的悲观锁机制,从获取的可调度的调度作业文件当中选择调度作业文件,并进一步检测选择的调度作业文件来确定当前待执行的终端任务,最后,该任务调度节点将该终端任务写入供任务消费进程订阅的消息中间件,从而,该任务消费进程即可从该消息中间件当中获取到终端任务并执行该终端任务。

本发明相比于传统借助外部的检查模块或者其它开源协调服务等模块来进行服务调度的方式,通过悲观锁机制同时运行多个节点来进行终端任务的调度,不仅能够提高任务调度的稳定性(如,单个节点的故障率是5%时,理想情况下两个节点同时故障的概率就是5%*5%=0.25%,故障率更小,整体稳定性相对也就更高),还能够节省传统方式存在的心跳间隔和启动节点的时间,真正提供不间断服务,并且,多个任务调度节点都可以同时提供服务,如此可以把终端机器的资源利用率提升至少一倍,避免了传统方式备用节点空跑造成的资源浪费。

此外,由于本发明多个任务调度节点实质是可以横向叠加的,即,当调度所需计算量增加时,可通过横向增加任务调度节点进行扩容即可解决,如此,不仅能提升调度能力,还无需对终端具有非常高的性能要求,从而能够进一步降低运营成本。

附图说明

图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图;

图2为本发明终端任务的调度方法第一实施例的流程示意图;

图3为本发明终端任务的调度方法一实施例所涉及的一应用场景示意图;

图4为本发明终端任务的调度方法一实施例所涉及的另一应用场景示意图;

图5为本发明终端任务的调度方法一实施例所涉及的多个任务调度节点调度相同调度作业文件的冲突变化情况;

图6为本发明终端任务的调度系统一实施例的功能模块示意图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

参照图1,图1为本发明实施例方案涉及的终端设备硬件运行环境的设备结构示意图。

本发明实施例终端设备可以是被配置为调度系统进行客户服务调度的客户端设备,该终端设备可以是智能手机、PC(Personal Computer,个人计算机)、平板电脑、便携计算机等等。

如图1所示,该终端设备可以包括:处理器1001,例如CPU,通信总线1002,用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如Wi-Fi接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。

本领域技术人员可以理解,图1中示出的终端设备结构并不构成对终端设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及终端任务的调度程序。

在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端,与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的终端任务的调度程序,并执行以下本发明终端任务的调度方法各实施例所述的操作。

基于上述硬件结构,提出本发明终端任务的调度方法的各实施例。

需要说明的是,目前,在不同网络环境当中运行的运维调度系统通常被要求能够支持高可用,即至少在一个节点宕掉时,另外的节点能够快速接管调度服务以保证整体的服务运行不受影响。现有为了实现运维调度系统的高可用通常都是借助外部的检查模块或者其它开源协调服务等模块,仅运行1个调度系统的调度器进程节点,以此规避同一任务被重复调度的风险。

然而,由于外部模块的检测具有一定的滞后性,会使得整体服务存在一定的间断,并且运行一个调度进程节点进行服务调度不仅对于机器性能要求很高,且处于备用状态的节点(在当前进行服务调度的节点宕掉时接管当前节点继续进行服务调度的节点)虽然没有启动,但该备用的节点仍然需要占用一个或者多个节点进程,从而会造成机器资源的浪费。

针对上述现象,本发明提供一种终端任务的调度方法。请参照图2,图2为本发明终端任务的调度方法第一实施例的流程示意图,在本实施例中,该终端任务的调度方法应用于终端任务的调度系统上,同时运行的多个任务调度节点中的任意一个,本发明终端任务的调度方法,包括:

步骤S10,在预设的数据库当中获取可调度的调度作业文件,其中,所述调度作业文件序列化存储在所述数据库当中;

调度系统同时运行的多个任务调度节点中的任意一个节点,在开始调度终端任务时,从序列化存储调度作业文件的数据库当中,获取当前处于非暂停状态的可调度的调度作业文件。

需要说明的是,在本实施例中,终端任务的调度系统预先通过定时进程针对调度作业文件——DAG文件进行解析,以将该DAG文件序列化存储至数据库当中。

具体地,例如,请参照如图3所示的应用场景,终端任务的调度系统预先通过任意一个定时进程,定时针对存储在共享存储当中的调度作业文件——DAG文件(图示DAGFILES)进行解析,从而将该DAG文件序列化存储至数据库(图示DB(data base,数据库))当中,然后,该调度系统同时运行的多个任务调度节点——SCHEDULER(调度系统的调度器进程)当中的任意一个SCHEDULER,在开始进行终端任务调度时,即可从该数据库当中获取处于非暂停状态的可调度的DAG文件。

需要说明的是,在本实施例中,共享存储为终端设备在内置或者外接存储空间当中预先构建,能够由任务调度节点——SCHEDULER以及任务消费进程(图示WORKER:调度系统的工作进程)直接访问得到的存储空间,如,NFS(Network File System,网络文件系统)或者Ceph(分布式文件系统)。

进一步地,在一种可行的实施例中,任务调度节点在从数据库当中获取可调度的调度作业文件时,还针对获取得到的调度作业文件的顺序进行打散。

任务调度节点——SCHEDULER在从数据库当中获取可调度的DAG文件时,采用随机打散排序的方式,针对获取得到的DAG文件的顺序进行打散。

具体地,例如,请参照图3所示应用场景中的“1、随机打散DAG”排序,任务调度节点——SCHEDULER获取得到的DAG文件排序的为[DAG1,DAG2,DAG3,DAG4,DAG5],则该SCHEDULER即采用随机算法来将该DAG文件排序进行打散,从而得到打散后的DAG文件排序为[DAG3,DAG2,DAG5,DAG1,DAG4]。

需要说明的是,在本实施例中,随机算法具体可以为python(一种计算机编程语言)语言标准库中的random.shuffle()函数。应当理解的是,基于实际应用的不同设计需要,在不同可行的实施例当中,SCHEDULER当然也可以采用其它不同于此处所列举random.shuffle()函数的随机算法来打散DAG文件排序,本发明终端任务的调度方法并不针对该随机算法的具体类型进行限定,只要SCHEDULER可以采用该随机算法打散DAG文件排序即可。本发明实施例中,可选择对DAG文件进打散,实现了每次调度作业时的随机性,无需固定作业每次调度的顺序,使得作业调度更加灵活智能。

步骤S20,基于悲观锁机制选择所述调度作业文件,以避免所述地调度作业文件被多个所述任务调度节点重复调度;

需要说明的是,在本实施例中,悲观锁机制为序列化存储调度作业文件的数据库的一种行锁机制,基于该悲观锁机制可实现各个同时运行的任务调度节点的高可用,即,在多个任务调度节点中的某一个或者多个任务调度节点尝试调度某一个相同的调度作业文件时,基于该悲观锁机制会阻塞当前调度该调度作业文件的第一个任务调度节点执行完毕之后,再允许下一个任务调度节点调度该调度作业文件,如此,能够减少各个任务调度节点之间的冲突情况,实现多个任务调度节点的正常工作。

调度系统同时运行的多个任务调度节点中的任意一个节点,在从数据库获取得到可调度的调度作业文件之后,即进一步基于数据库的悲观锁机制,从获取得到的该调度作业文件当中,选择当前要执行的预设数量的调度作业文件。

需要说明的是,在本实施例中,预设数量为调度系统同时运行的多个任务调度节点中的任意一个节点,基于终端设备在当前时刻CPU(中央处理器)的空闲程度来确定。应当理解的是,基于实际应用的不同设计需要,在不同可行的实施方式当中,不同性能表现的终端设备在不同时刻CPU的空闲程度当然是不同的,而在该空闲程度高时,任务调度节点可确定该预设数量相应更大,反之,在该空闲程度较小时,任务调度节点可确定该预设数量相应也较小。

具体地,例如,假定序列化存储调度作业文件——DAG文件的数据库的管理系统为“MYSQL8”(MySQL是一个关系型数据库管理系统),则终端设备预先可通过使用“SELECT…FOR UPDATE”语句实现该数据库悲观锁机制的行锁机制,即,任务调度节点——SCHEDULER执行该“SELECT…FOR UPDATE”语句进行DAG文件的选择执行即可避免多个SCHEDULER相互之间存在冲突。并且,进一步假定任务调度节点——SCHEDULER基于当前时刻终端设备CPU的空闲程度确定的预设数量为N,则请参照如图3所示应用场景中的“2、通过SELECT…FORUPDATE选择其中一批DAG”,调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在从数据库当中获取处于非暂停状态的可调度的各DAG文件之后,执行该“SELECT…FOR UPDATE”语句以进一步从获取得到的各DAG文件当中,提取N个用于在当前调度执行的DAG文件。

需要说明的是,在本实施例中,本发明终端任务的调度方法可以实现多个SCHEDULER同时工作,并且可以规避重复调度的问题,所有SCHEDULER节点是平等的,配置一致并且可以随时进行水平方向扩容。

以下阐述下本实施例提供的终端任务的调度方法多个SCHEDULER节点之间调度不存在冲突的论证:

假设当前有m个DAG文件待调度,而当前调度系统中有n个SCHEDULER节点,为了计算同一个DAG文件同时被两个SCHEDULER调度的概率P,先计算逆命题——所有SCHEDULER调度的DAG都不相同的概率Q,从而P=1-Q。

由于第一个SCHEDULER选中其中一个DAG的概率是m选m,第二个SCHEDULER是m选m-1,第n个SCHEDULER是m选m-n+1,如此:

从而,当n=2和n=3时,可计算得出如图5所示的情况,进而可得出如下结论:

随着DAG文件的数量增大,各SCHEDULER调度冲突的情况会快速变小,而在DAG数量不大的时候,冲突概率已经在可接受的范围了(如n=2、m=100个,或者n=3、m=300个时,P是小于或者等于1%的)。

然而,当SCHEDULER个数增大,DAG文件数量保持相同时,冲突概率P会增大(在n=3时P大约是n=2时P的2至3倍),因此需要当DAG数量变大时候,才考虑在水平方向增加SCHEDULER的数量。而当DAG文件只有几个的时候,尽管冲突的概率比较大,但此时整体的调度压力相对也很小,这种情况也可以接受。

由此可知,在DAG文件的数量较多时,预期各SCHEDULER发生调度冲突的概率可以接受,并且,即使发生冲突了,立即调度下一个DAG文件也不会带来太大的性能损失。

步骤S30,检测选择的所述调度作业文件以确定待执行的终端任务;

调度系统同时运行的多个任务调度节点中的任意一个节点,在基于悲观锁机制选择出当前要执行的预设数量的调度作业文件之后,进一步检测该调度作业文件,从而确定该调度作业文件中在当前要提供给任务消费进程执行的终端任务。

具体地,例如,运行该调度系统的终端设备通过配置预设调度决策规则来确定所选择的各DAG文件当中在当前要提供给任务消费进程执行的终端任务——TASK,从而该调度系统同时运行的多个任务调度节点中的任意一个节点,即通过检测该DAG文件当中的终端任务——TASK是否符合该预设调度决策规则以确定当前要提供给任务消费进程执行的TASK。

需要说明的是,在本实施例中,预设调度规则由终端设备预先配置得到,该预设调度规则包括但不限于:定时任务达到既定时间、非定时任务被外部触发、运行中的DAG的TASK没有被依赖或者依赖该TASK的上游已执行完成。应当理解的是,基于实际应用的不同设计需要,在不同可行的实施例当中,终端设备当然可以配置与此处所列举不同或者更多的规则,本发明终端任务的调度方法,比不针对该预设调度规则的具体内容进行限定。

进一步地,在一种可行的实施例中,上述步骤S30,可以包括:

步骤S301,检测选择的所述调度作业文件中的终端任务是否符合预设调度决策规则;

调度系统同时运行的多个任务调度节点中的任意一个节点,在基于悲观锁机制选择出当前要执行的预设数量的调度作业文件之后,即进一步逐一检测该调度作业文件中的终端任务,是否满足运行该调度系统的终端所配置的预设调度规则。

具体地,例如,请参照如图3所示应用场景中的“3、调度选定的DAG”,调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在选择提取出N个用于在当前调度执行的DAG文件之后,进一步逐一检测该DAG文件中的终端任务——TASK是否没有被依赖或者依赖该TASK的上游已执行完成、以及在该TASK为定时任务时,检测当前时间是否达到既定时间,或者在该TASK为非定时任务时,检测该TASK是否被外部触发。

步骤S302,将检测到的符合所述预设调度决策规则的终端任务确定为待执行的终端任务。

调度系统同时运行的多个任务调度节点中的任意一个节点,在检测到调度作业文件中的终端任务,满足运行该调度系统的终端所配置的预设调度规则时,将该终端任务确定为在当前要提供给任务消费进程执行的终端任务。

具体地,例如,请参照如图3所示应用场景的“3、调度选定的DAG”,调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在检测到DAG文件中的终端任务——TASK为定时任务,但当前时间已经达到既定时间,且该TASK没有被依赖或者依赖该TASK的上游已执行完成时,确定该TASK符合预设调度规则并将该TASK确定为在当前要提供给任务消费进程——WORKER(负责最终的任务执行)执行的TASK。

或者,该SCHEDULER在检测到DAG文件中的终端任务——TASK为非定时任务,但该TASK是被外部触发,且该TASK没有被依赖或者依赖该TASK的上游已执行完成时,确定该TASK符合预设调度规则并将该TASK确定为在当前要提供给任务消费进程——WORKER(负责最终的任务执行)执行的TASK。

步骤S40,将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行。

调度系统同时运行的多个任务调度节点中的任意一个节点,在检测确定调度作业文件中在当前要提供给任务消费进程执行的终端任务之后,立即将该终端任务编写至预先由任务消费进程订阅的消息中间件当中,从而由该任务消费进程直接从该消息中间件当中获取该终端任务进行执行。

具体地,例如,请参照如图3所示的应用场景,调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在检测并确定DAG文件中的终端任务——TASK为在当前要提供给任务消费进程——WORKER执行的TASK(图示“待执行TASK”)之后,即将该TASK编写入消息中间件——MQ(Message Queue,消息队列)当中,从而由该MQ通过WORKER预先的订阅,将该TASK传输给该WORKER,该WORKER在基于该MQ获取得到该TASK之后,即可开始执行该TASK。

需要说明的是,在本实施例中,由于任务调度节点在检测终端任务是否符合预设调度规则时,需要检测该终端任务是否被依赖或者依赖的上游已执行完成,因此,任务消费进程在执行终端任务之后,需要反馈该终端任务执行完毕或者处于执行中等任务调度状态,以用于任务调度节点检测该终端任务是否被依赖的上游执行完成从而符合预设调度规则。

进一步,在一种可行的实施例中,在上述步骤S40之后,本发明终端任务的调度方法,还可以包括:

步骤S50,接收所述任务消费进程反馈的任务调度状态,并将所述任务调度状态写入所述数据库,其中,所述任务消费进程在执行所述终端任务之后生成所述任务调度状态。

任务消费进程在执行终端任务之后,按照该终端任务执行完毕或者仍处于执行中需要继续执行的结果,生成对应的任务调度状态,然后,该任务消费进程即针对该任务调度状态进行反馈以更新至数据库当中。

具体地,例如,任务消费进程——WORKER在基于订阅的消息中间件——MQ获取得到终端任务——TASK,并针对该TASK进行执行之后,若该TASK成功执行完毕,则任务消费进程生成TASK执行完成的任务调度状态,或者,若该TASK成功执行失败,则任务消费进程生成TASK执行失败需重新执行的任务调度状态。该任务消费进程在生成该任务调度状态之后,即立即将该任务调度状态直接反馈至数据库当中由数据库针对封装该TASK的DAG文件进行状态更新,或者,该任务消费进程在生成该任务调度状态之后,还可以立即将该任务调度状态反馈至任务调度节点——SCHEDULER,从而由该SCHEDULER将该任务调度状态写入数据库以针对该数据库中封装该TASK的DAG文件进行状态更新。

本发明实施例提供一种终端任务的调度方法,通过调度系统同时运行的多个任务调度节点中的任意一个节点,在开始调度终端任务时,从序列化存储调度作业文件的数据库当中,获取当前处于非暂停状态的可调度的调度作业文件;然后,该节点在从数据库获取得到可调度的调度作业文件之后,即进一步基于数据库的悲观锁机制,从获取得到的该调度作业文件当中,选择当前要执行的预设数量的调度作业文件;再然后,该节点进一步检测选择的该调度作业文件,从而确定该调度作业文件中在当前要提供给任务消费进程执行的终端任务;最后,该节点在检测确定调度作业文件中在当前要提供给任务消费进程执行的终端任务之后,立即将该终端任务编写至预先由任务消费进程订阅的消息中间件当中,从而由该任务消费进程直接从该消息中间件当中获取该终端任务进行执行。

本发明相比于传统借助外部的检查模块或者其它开源协调服务等模块来进行服务调度的方式,通过悲观锁机制同时运行多个节点来进行终端任务的调度,不仅能够提高任务调度的稳定性(如,单个节点的故障率是5%时,理想情况下两个节点同时故障的概率就是5%*5%=0.25%,故障率更小,整体稳定性相对也就更高),还能够节省传统方式存在的心跳间隔和启动节点的时间,真正提供不间断服务,并且,多个任务调度节点都可以同时提供服务,如此可以把终端机器的资源利用率提升至少一倍,避免了传统方式备用节点空跑造成的资源浪费。

此外,由于本发明多个任务调度节点实质是可以横向叠加的,即,当调度所需计算量增加时,可通过横向增加任务调度节点进行扩容即可解决,如此,不仅能提升调度能力,还无需对终端具有非常高的性能要求,从而能够进一步降低运营成本。

进一步地,基于上述第一实施例,提出本发明终端任务的调度方法的第二实施例。需要说明的是,由于调度系统在每次调度之前,都需要解析调度作业文件——DAG文件,以确保该DAG文件是用户最新修改(比如在DAG文件中增删了终端任务——TASK,或者,在DAG文件中修改了TASK的内容,还或者,在DAG文件中修改了TASK的依赖等等)的版本。如此,当DAG文件越来越多时,调度就会越来越慢,针对此,本实施例与上述第一实施例之间的主要区别在于,在本实施例中,所述数据库中构建有待调度工作目录,上述步骤S10中,“在预设的数据库当中获取可调度的调度作业文件”的步骤,可以包括:

步骤S101,在预设的数据库的所述待调度工作目录当中,获取可调度的调度作业文件。

运行调度系统的终端预先在序列化存储调度作业文件的数据库当中,维护构建一个待调度工作目录,并将解析确定的可调度的调度作业文件直接存储在该待调度工作目录当中,从而,调度系统同时运行的多个任务调度节点中的任意一个节点,在每一轮开始调度终端任务时,即可直接从该待调度工作目录当中获取当前处于该可调度的调度作业文件。

具体地,例如,运行调度系统的终端设备预先通过定时进程(如每间隔10分钟)遍历解析当前的全部调度作业文件——DAG文件,以从该全部的DAG文件当中确定处于非暂停状态可调度的DAG文件,然后,该终端设备及将该全部可调度的DAG文件,直接序列化存储在数据库中预先维护构建的待调度工作目录之下,从而,任务调度节点——SCHEDULER在每一轮开始进行终端任务调度时,即可从该待调度工作目录当中获取处于非暂停状态的可调度的DAG文件。

进一步地,在一种可行的实施例中,所述数据库中还构建有冷数据工作目录,本发明终端任务的调度方法,还可以包括:

步骤A,定期解析所述调度作业文件以确定符合预设冷数据条件的目标调度作业文件;

需要说明的是,在本实施例中,运行调度系统的终端设备除了在序列化存储调度作业文件的数据库中维护待调度工作目录来存储调度作业文件中的热数据,还同时维护一个冷数据工作目录来存储调度作业文件中的冷数据。此外,预设冷数据条件包括但不限于:调度作业文件不是定时自动调度的、调度作业文件在一段时间(如24小时)内没有生成过调度、调度作业文件处于非激活状态(如,调度作业文件处于暂停时即为该非激活状态),应当理解的是,基于实际应用的不同设计需要,在不同可行的实施方式当中,该预设冷数据条件当然也可以不同,本发明终端任务的调度方法并不针对该预设冷数据条件的具体内容进行限定。

运行调度系统的终端设备基于预设时间周期,定期的解析当前的全部调度作业文件,从而检测确定该全部调度作业文件当中,符合预设冷数据条件的目标调度作业文件。

具体地,例如,假定预设时间周期为10分钟,则运行调度系统的终端设备每间隔10分钟通过遍历的方式解析当前的全部调度作业文件——DAG文件,从而逐一检测该全部DAG文件当中,不是定时自动调度、在24小时内没有生成过调度,或者,处于非激活状态的各DAG文件,并将该各DAG文件确定为符合预设冷数据条件的目标DAG文件。

步骤B,将所述目标调度作业文件移动至所述冷数据工作目录进行存储;

运行调度系统的终端设备在将从当前的全部调度作业文件当中,确定出符合预设冷数据条件的目标调度作业文件之后,即直接将该目标调度作业文件移动到预先在数据库中维护的冷数据工作目录当中进行序列化存储。

进一步地,在一种可行的实施例中,上述步骤B,可以包括:

步骤B1,计算所述目标调度作业文件的文件标识的哈希值;

运行调度系统的终端设备在将目标调度作业文件移动存储至数据库中维护的冷数据工作目录之下时,先基于该目标调度作业文件唯一的文件标识,计算该文件标识的哈希值。

需要说明的是,在本实施例中,终端设备可以采用MD5、SHA1、SHA128、SHA256等多种HASH算法之一来计算文件标识的哈希值。

具体地,例如,终端设备通过遍历解析全部DAG文件确定出其中一个符合预设冷数据条件的目标DAG文件,该目标DAG文件唯一的文件标识为:dag_868c0cc65fa511ebaba0525400b8de32,则该终端设备基于HASH算法——MD5,来计算得到该文件标识的哈希值为:53e426da96190ad9b3e894afc4c18041。

步骤B2,按照所述哈希值生成所述冷数据工作目录当中的文件存放路径,并按照所述文件存放路径针对所述目标调度作业文件进行存储。

运行调度系统的终端设备在基于目标调度作业文件唯一的文件标识,计算该文件标识的哈希值之后,即按照该哈希值生成该目标调度作业文件在冷数据工作目录下的文件存放路径,然后,按照该文件存储路径将该目标调度作业文件序列化存储在该冷数据工作目录当中。

具体地,例如,运行调度系统的终端在计基于目标DAG文件唯一的文件标识:dag_868c0cc65fa511ebaba0525400b8de32,则基于HASH算法——MD5,计算得到该文件标识的哈希值为:53e426da96190ad9b3e894afc4c18041之后,在数据库——DB中所维护的冷数据工作目录需要取5层子目录时,按照该哈希值dag_868c0cc65fa511ebaba0525400b8de32生成该目标DAG文件的文件存放路径为:COLD_DAGS/5/53/53e/53e4/53e42/dag_868c0cc65fa511ebaba0525400b8de32.dag,如此,终端设备即按照该文件存放路径,将该目标DAG文件存储在该冷数据工作目录之下。

需要说明的是,在本实施例中,终端设备基于目标DAG文件文件标识的哈希值来生成文件存放路径,假定冷数据工作目录的每个子目录可以放10000个文件,由于文件标识的哈希值是由0-9a-z总共36个字符组成,即总共可以在该冷数据工作目录之下安排存储36e5*10000=6046617600000个DAG文件。

步骤C,在获取到预设的冷数据调度请求时,将所述冷数据调度请求指向的目标调度作业文件移回至所述待调度工作目录。

需要说明的是,在本实施例中,冷数据调度请求为终端设备基于调度作业文件的重新调度需要或者查看需要等生成的,用于令终端设备从冷数据目录下将作为冷数据目标调度作业文件重新移回待调度工作目录作为热数据。

运行调度系统的终端设备,在获取到基于调度作业文件的重新调度需要或者查看需要等生成的冷数据调度请求时,先确定该冷数据调度请求所指向的目标调度作业文件,并同样基于该目标调度文件唯一的文件标识计算哈希值以确定该目标调度作业文件在冷数据工作目录当中的文件存储路径,进而按照该文件存储路径提取该目标调度作业文件,并将该目标调度作业文件转移存储至待调度工作目录当中以供后续调度。

进一步,在另一种可行的实施方式当中,还可以采用如下方案进行调度作业文件的解析处理,以节省文件处理时间来加快调度系统的整体调度速度,即:在每一轮调度时,不需要解析所有DAG文件,只需要检查(1)、DAG文件的最后更新时间是否大于上次调度时间;(2)、DAG文件的HASH值是否和上次调度时一致。其中,检查(1)一般可以应用于大部分的场景,只需确保文件修改了,文件在文件系统中的最后更新时间被更新,而检查(2)由于需要计算和保存HASH(哈希)值,所需的计算和存储资源比(1)大,但针对文件更新时间被更新了,但实际上文件内容并没有修改这种场景可以有效地规避。

需要说明的是,上述方案中,检查(1)和检查(2)可基于实际应用场景进行选择,即,该检查(1)和检查(2)可任选其一进行或者也可同时进行。针对该方案,假设调度系统中有1000个DAG文件,每次调度时处理一个DAG文件所需时间为0.2秒,处理的并发为50,而平均每次调度之间有10个文件发生更新,从而,如果每次调度都需要解析处理所有DAG文件,则整体所需时间为0.2*1000/50=4秒;而采用方案1所需的时间仅为0.2*10/10=0.2秒。

在本实施例中,针对终端任务的调度随调度作业文件数量的增长,终端解析文件进行调度会越来越慢的问题,通过运行调度系统的终端预先在序列化存储调度作业文件的数据库当中,维护构建一个待调度工作目录,并将解析确定的可调度的调度作业文件直接存储在该待调度工作目录当中,从而,调度系统同时运行的多个任务调度节点中的任意一个节点,在每一轮开始调度终端任务时,即可直接从该待调度工作目录当中获取当前处于该可调度的调度作业文件。

并且,还通过运行调度系统的终端设备除了在序列化存储调度作业文件的数据库中维护待调度工作目录来存储调度作业文件中的热数据,还同时维护一个冷数据工作目录来存储调度作业文件中的冷数据,如此,运行调度系统的终端设备基于预设时间周期,定期的解析当前的全部调度作业文件,从而检测确定该全部调度作业文件当中,符合预设冷数据条件的目标调度作业文件,直接将该目标调度作业文件移动到预先在数据库中维护的冷数据工作目录当中进行序列化存储,以及,运行调度系统的终端设备,在获取到基于调度作业文件的重新调度需要或者查看需要等生成的冷数据调度请求时,先确定该冷数据调度请求所指向的目标调度作业文件,并同样基于该目标调度文件唯一的文件标识计算哈希值以确定该目标调度作业文件在冷数据工作目录当中的文件存储路径,进而按照该文件存储路径提取该目标调度作业文件,并将该目标调度作业文件转移存储至待调度工作目录当中以供后续调度。

从而,本发明实现了,在调度作业文件的总数量持续增长至数十万的情况下,只要基本保持同一时间待调度的调度作业文件的数量变化不大,仍然能够保持良好的调度性能,无需额外增加机器资源和架构改造。

进一步地,基于上述第一实施例,提出本发明终端任务的调度方法的第三实施例,本实施例与上述第一实施例和第二实施例之间的主要区别在于,在本实施例中,所述消息中间件上建立有各任务调度队列,各所述任务调度队列分别对应不同的调度环境,上述步骤S40,将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行,可以包括:

步骤S401,检测所述终端任务的环境标识,以根据所述环境标识确定执行所述终端任务的目标调度环境;

需要说明的是,在本实施例中,运行调度系统的终端设备在定义每一个调度作业文件时,均针对该调度作业文件中的终端任务,添加一个指示执行该终端任务的调度环境(或者称网络环境等)的环境标识,例如,调度作业文件——DAG1中的终端任务——TASK需要在X环境上执行,则在该TASK上增加环境标识——queue=“X”。

调度系统同时运行的多个任务调度节点中的任意一个节点,在检测确定调度作业文件中在当前要提供给任务消费进程执行的终端任务,从而将该终端任务编写至预先由任务消费进程订阅的消息中间件当中时,先检测该终端任务当中携带的预先由运行该调度系统的终端设备所定义的环境标识,从而基于该环境标识确定执行该终端任务的任务消费进程所属的目标调度环境。

具体地,例如,调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在检测并确定DAG文件中的终端任务——TASK为在当前要提供给任务消费进程——WORKER执行的TASK之后,检测到该TASK携带有环境标识——queue=“X”,从而,SCHEDULER确定执行该TASK的任务消费进程——WORKER所属的目标调度环境为环境X。

步骤S402,在所述消息中间件中,将所述终端任务写入所述目标调度环境对应的任务调度队列,以供所述目标调度环境上部署的订阅所述任务调度队列的任务消费进程,从所述任务调度队列获取所述终端任务,并在所述目标调度环境执行所述终端任务。

调度系统同时运行的多个任务调度节点中的任意一个节点,在确定执行终端任务的任务消费进程所属的目标调度环境之后,即开始在消息中间件中所建立的多个各自与不同调度环境对应的任务调度队列当中,确定该目标调度环境对应的任务调度队列,并将该终端任务写入到该目标调度环境对应的任务调度队列当中,从而,由被部署在该目标调度环境当中的任务消费者进行基于订阅该任务调度队列,来获取得到该终端任务以在该目标调度环境当中执行该终端任务。

具体地,例如,请参照如图4所示的应用场景,运行调度系统的终端设备预先开通其它调度环境——环境X到当前调度环境——环境A中消息中间件——MQ的防火墙策略(环境X到环境A的方向),调度系统同时运行的多个任务调度节点——SCHEDULER当中的任意一个SCHEDULER,在确定执行TASK的任务消费进程——WORKER所属的目标调度环境为环境X之后,该SCHEDULER即将该TASK直接写入到消息中间件——MQ多个任务调度队列中,该环境X对应的任务调度队列QUEUE_X上,从而,被部署在环境X当中的任务消费队列即可通过订阅该QUEUE_X,从而获取得到该携带有环境标识——queue=“X”的TASK并直接在环境X上执行。

进一步地,在一种可行的实施例中,本发明终端任务的调度方法,还可以包括:

步骤D,将当前调度环境中可调度的调度作业文件同步至其它调度环境,以供所述其它调度环境中上部署的任务消费进程,在所述其它调度环境中解析所述调度作业文件以执行终端任务。

需要说明的是,在本实施例中,当前调度环境中部署有完整的运维调度系统,包括:多个任务调度节点、数据库、消息中间件以及任务消费进程,而其它调度环境中则仅部署有任务消费进程和用于调用该任务消费进程的外部系统。

运行调度系统的终端设备还可以在解析调度作业文件以将该调度作业文件序列化存储到数据库中时,将在当前调度环境当中解析的可调度的调度作业文件,直接同步到其它调度环境,从而由该其它调度环境当中部署的任务消费进程直接解析该调度作业文件来执行该调度作业文件中的终端任务。

具体地,例如,请参照如图4所示的应用场景,运行调度系统的终端设备在当前调度环境——环境A上解析调度作业文件——DAG文件时,使用定期Rsync(rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步)同步的方式,从环境A把DAG文件主动同步到其它环境——环境X上(开通环境A到环境X的防火墙策略即可),从而,该环境X上部署的WORKER即可直接通过解析调度该DAG文件,以在该环境X上执行该DAG文件中的终端任务TASK。

需要说明的是,在本实施例中,部署在环境X当中的WORKER在执行完TASK之后,同样也需要将执行结果写回DB(即,将该执行结果生成任务调度状态写入到DB中,需要打通环境X当中的WORKER到环境A中DB的防火墙策略),从而,用户可直接在环境A的SCHEDULER上看到该TASK被调度和执行的结果。

在本实施例中,通过调度系统同时运行的多个任务调度节点中的任意一个节点,在检测确定调度作业文件中在当前要提供给任务消费进程执行的终端任务,从而将该终端任务编写至预先由任务消费进程订阅的消息中间件当中时,先检测该终端任务当中携带的预先由运行该调度系统的终端设备所定义的环境标识,从而基于该环境标识确定执行该终端任务的任务消费进程所属的目标调度环境;调度系统同时运行的多个任务调度节点中的任意一个节点,在确定执行终端任务的任务消费进程所属的目标调度环境之后,即开始在消息中间件中所建立的多个各自与不同调度环境对应的任务调度队列当中,确定该目标调度环境对应的任务调度队列,并将该终端任务写入到该目标调度环境对应的任务调度队列当中,从而,由被部署在该目标调度环境当中的任务消费者进行基于订阅该任务调度队列,来获取得到该终端任务以在该目标调度环境当中执行该终端任务。

或者,运行调度系统的终端设备还可以在解析调度作业文件以将该调度作业文件序列化存储到数据库中时,将在当前调度环境当中解析的可调度的调度作业文件,直接同步到其它调度环境,从而由该其它调度环境当中部署的任务消费进程直接解析该调度作业文件来执行该调度作业文件中的终端任务。

如此,本发明相比于传统客户服务调度方式,实现了跨环境的终端任务调度,用户只需在一个环境配置好调度作业流程,即可在不同的环境上执行任务,不需要再像传统方式一样分别登录多个环境来维护调度作业,即避免重复登录环境的重复操作,节约了时间资源,更有效地提高终端任务的调度效率。并且,运维调度系统的管理员同样只需要部署和维护一套调度环境,而不需要针对每个环境都单独维护一套运维调度系统,极大程度上减轻了工作量。

此外,本发明实现跨环境的终端任务调度,只在对应的环境中部署任务消费进程,只需要打开有限的三条防火墙策略(环境X当中的WORKER到环境A中DB、MQ的防火墙策略,和环境A到环境X的防火墙策略),从而,在环境相互之间的安全层面来说仍然是可控的。

进一步地,本发明还提供一种终端任务的调度系统,所述终端任务的调度系统上同时运行多个任务调度节点。请参照图6,图6为本发明终端任务的调度系统一实施例的功能模块示意图。如图6所示,本发明终端任务的调度系统多个所述任务调度节点当中的任意一个任务调度节点包括:

获取模块10,用于获取模块,用于在预设的数据库当中获取可调度的调度作业文件,其中,所述调度作业文件序列化存储在所述数据库当中;

选择模块20,用于基于悲观锁机制选择所述调度作业文件,以避免所述地调度作业文件被多个所述任务调度节点重复调度;

检测模块30,用于检测选择的所述调度作业文件以确定待执行的终端任务;

写入模块40,用于将所述终端任务写入预设的消息中间件,以供订阅所述消息中间件的任务消费进程,从所述消息中间件获取所述终端任务并执行。

进一步地,所述数据库中构建有待调度工作目录,获取模块10,还用于在预设的数据库的所述待调度工作目录当中,获取可调度的调度作业文件。

进一步地,所述数据库中还构建有冷数据工作目录,本发明终端任务的调度系统多个所述任务调度节点当中的任意一个任务调度节点,还包括:

文件解析模块,用于定期解析所述调度作业文件以确定符合预设冷数据条件的目标调度作业文件;

冷数据存储模块,用于将所述目标调度作业文件移动至所述冷数据工作目录进行存储;

冷数据移回模块,用于在获取到预设的冷数据调度请求时,将所述冷数据调度请求指向的目标调度作业文件移回至所述待调度工作目录。

进一步地,冷数据存储模块,包括:

哈希单元,用于计算所述目标调度作业文件的文件标识的哈希值;

存储单元,用于按照所述哈希值生成所述冷数据工作目录当中的文件存放路径,并按照所述文件存放路径针对所述目标调度作业文件进行存储。

进一步地,检测模块30,包括:

第一检测单元,用于检测选择的所述调度作业文件中的终端任务是否符合预设调度决策规则;

确定单元,用于将检测到的符合所述预设调度决策规则的终端任务确定为待执行的终端任务。

进一步地,所述消息中间件上建立有各任务调度队列,各所述任务调度队列分别对应不同的调度环境,写入模块40,包括:

第二检测单元,用于检测所述终端任务的环境标识,以根据所述环境标识确定执行所述终端任务的目标调度环境;

写入单元,用于在所述消息中间件中,将所述终端任务写入所述目标调度环境对应的任务调度队列,以供所述目标调度环境上部署的订阅所述任务调度队列的任务消费进程,从所述任务调度队列获取所述终端任务,并在所述目标调度环境执行所述终端任务。

进一步地,本发明终端任务的调度系统多个所述任务调度节点当中的任意一个任务调度节点,还包括:

跨环境文件同步模块,用于将当前调度环境中可调度的调度作业文件同步至其它调度环境,以供所述其它调度环境中上部署的任务消费进程,在所述其它调度环境中解析所述调度作业文件以执行终端任务。

进一步地本发明终端任务的调度系统多个所述任务调度节点当中的任意一个任务调度节点,还包括:

调度状态更新模块,用于接收所述任务消费进程反馈的任务调度状态,并将所述任务调度状态写入所述数据库,其中,所述任务消费进程在执行所述终端任务之后生成所述任务调度状态。

其中,上述终端任务的调度系统中任务调度节点的各个模块的功能实现,与上述终端任务的调度方法实施例中各步骤相对应,其功能和实现过程在此处不再一一赘述。

本发明还提供一种计算机存储介质,该计算机存储介质上存储有终端任务的调度程序,所述终端任务的调度程序被处理器执行时实现如以上任一项实施例所述的终端任务的调度方法的步骤。

本发明计算机存储介质的具体实施例与上述终端任务的调度方法各实施例基本相同,在此不作赘述。

本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现如以上任一项实施例所述的终端任务的调度方法的步骤。

本发明计算机存储介质的具体实施例与上述终端任务的调度方法各实施例基本相同,在此不作赘述。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

相关技术
  • 终端任务的调度方法、终端设备及计算机存储介质
  • 任务调度方法、装置、终端设备及计算机存储介质
技术分类

06120113212944