任务调度方法、系统及存储介质与流程

文档序号:32659659发布日期:2022-12-23 23:03阅读:93来源:国知局
任务调度方法、系统及存储介质与流程

1.本技术涉及计算机领域,具体而言,涉及一种任务调度方法、系统及存储介质。


背景技术:

2.渲染平台由数百乃至上千个渲染节点组成。渲染平台获取渲染任务,输出高质量的逼近真实的图片。整个渲染过程主要分为场景文件加载、图片渲染,过程需要用到大量的网络io、存储io、内存、cpu、gpu等资源。
3.目前,传统渲染平台一般包括了机器管理模块、任务管理模块、队列模块和调度模块等,而调度模块在实现上多为集中式调度器,调度器一旦宕机则无法进行渲染任务的下发,影响系统的可用性。并且队列模块中一般是单队列或多队列;常常导致队列中高优先级的任务不能被及时执行。


技术实现要素:

4.本技术实施例的目的在于提供一种任务调度方法、系统及存储介质,区域调度模块只负责区级别的任务调度,通过二级调度的方式降低作业的平均周转时间,提高系统的吞吐能力。并且消息队列之间与消息队列内都存在优先级,保证了高优先级的任务优先执行。
5.第一方面,本技术实施例提供一种任务调度方法,该任务调度方法应用于任务调度系统;任务调度系统包括具有核心交互子模块、消息生成子模块、区域调度子模块和数据存储子模块的区域调度模块;方法包括:由核心交互子模块,获取目标任务,并将目标任务存储至数据存储子模块。由消息生成子模块,从数据存储子模块获取目标任务,并生成消息队列;由区域调度子模块,从消息队列中获取目标消息队列;由区域调度子模块,从核心交互子模块中获取目标机器;其中,目标机器用于执行目标任务,目标任务包括渲染任务;由区域调度子模块,根据目标消息队列和目标机器生成区域调度策略。
6.在上述实现过程中,本技术实施例提供的任务调度方法,在区域调度模块通过获取目标任务生成目标消息队列,此目标消息队列中的消息具有优先级,能够保证在执行任务时,优先级高的任务先出队,优先级低的后出队;保证高优先级的任务能够被及时执行。进一步地,通过目标消息队列和目标机器能够选择正确的可用区,而不是直接对单个的机器进行调度;而是后续再继续在可用区域中调度目标机器,在调度上任务的状态、可用区的状态、机器的状态均为共享,具备极高的可用性。
7.可选地,在本技术实施例中,由区域调度子模块,从消息队列中获取目标消息队列包括:获取消息队列的id;根据id获取消息队列的优先级;根据优先级生成目标消息队列。
8.在上述实现过程中,任务调度子模块能够根据消息队列的id生成一个具有优先级的目标消息队列;在执行任务时,目标消息队列按照消息队列的优先级以及消息队列内部的优先级进行任务的出队;队列与队列之间存在优先级,队列内部也存在优先级,从而保证了高优先级任务的及时执行。
9.可选地,在本技术实施例中,由区域调度子模块,从核心交互子模块中获取目标机器包括:由区域调度子模块,从核心交互子模块中获取机器状态;其中,机器状态包括节点锁的状态;节点锁为机器的通用唯一识别码;机器状态包括节点的ip、节点的运行状态和节点锁的状态;节点ip为机器的通用唯一识别码。
10.在上述实现过程中,本技术实施例通过判断机器状态中的节点锁状态是否为空来找出空闲的机器,即目标机器;并结合可用区目标机器的数量与渲染任务来确定出最终的区域调度策略,区域调度策略中包括选中的可用区。本技术实施例先对可用区域进行选定,后续再选择具体的机器,对所有可用区的机器合理评估下做出机器资源利用率最大的调度策略。
11.可选地,在本技术实施例中,任务调度系统还包括应用模块;区域调度模块还包括数据存储子模块。在由区域调度子模块,根据目标消息队列、机器状态和节点锁的状态的生成区域调度策略之后该任务调度方法还包括:由区域调度子模块,将区域调度策略发送至核心交互子模块。由核心交互子模块,将区域调度策略发送至数据存储子模块。由应用模块,从数据存储子模块获取目标任务和区域调度策略。
12.在上述实现过程中,通过设置mysql数据库(数据存储模块)和应用模块,可以实现用于模块从mysql数据库拿取数据,实现数据的实时同步展示;并且应用模块的存在能够减少cpu资源、内存资源和网络带宽资源的消耗。
13.可选地,在本技术实施例中,任务调度系统的区域调度模块还包括机器控制子模块;该任务调度方法还包括:由机器控制子模块,从核心交互子模块获取目标消息队列和空闲机器。判断目标消息队列对应的目标机器数量是否小于空闲机器的数量;若目标消息队列对应的目标机器数量小于空闲机器的数量,则关闭指定数目的空闲机器;其中,指定数目为空闲机器数量与目标机器数量的差值。
14.在上述实现过程中,通过机器管理子模块的设置能够合理管控系统内的机器,使合理数量的机器在线,若存在过多的空闲机器时,机器管理子模块会关闭多余的空闲机器,以实现资源的合理利用。
15.可选地,在本技术实施例中,任务调度系统还包括具有节点调度子模块和任务执行子模块的节点调度模块;该方法还包括:由节点调度子模块,判断是否能从核心交互子模块拉取数据;若能从核心交互子模块拉取数据,则从核心交互子模块获取区域调度策略。由节点调度子模块,根据区域调度策略对目标机器下发调度指令;由任务执行子模块,根据调度指令执行目标任务。
16.在上述实现过程中,节点调度子模块从区域调度子模块中获取区域调度策略,并进一步对目标机器进行调度,进而执行渲染任务;本技术实施例提供的任务调度系统通过二级调度的方式克服集中调度的缺陷,区域调度子模块负责区级别的调度任务,节点调度子模块负责节点级的调度任务;这种二级调度方式能够降低作业的平均周转时间,提高系统的吞吐能力。
17.可选地,在本技术实施例中,该任务调度方法还包括:若不能从核心交互子模块拉取数据,则由节点调度子模块,从消息生成子模块中获取目标消息队列。获取目标机器,并根据目标消息队列和目标机器生成区域调度策略。
18.在上述实现过程中,节点调度子模块在区域调度子模块完全故障的情况下,能够
直接从消息队列中拿取任务进行调度,不会造成系统瘫痪和机器资源的损失。
19.可选地,在本技术实施例中,在由任务执行子模块,根据调度指令执行目标任务之后,该任务调度方法还包括:由任务执行子模块,获取机器状态,并发送至节点调度子模块。由节点调度子模块,将机器转态发送至核心交互子模块。
20.在上述实现过程中,在执行目标任务之后,任务执行子模块会重新获取机器的状态;将此时的机器状态发送给节点调度子模块;进一步地,节点调度子模块将机器状态回传给区域调度模块的核心交互子模块。从而核心调度子模块又将机器状态进行了更新,可以作为后续任务调度的基础信息,保证任务调度系统高效地运行。
21.第二方面,本技术实施例提供一种任务调度系统,其特征在于,应用于任务调度系统;任务调度系统包括具有核心交互子模块、消息生成子模块和区域调度子模块的区域调度模块;核心交互子模块,用于获取目标任务;消息生成子模块,用于从核心交互子模块获取目标任务,并生成消息队列。区域调度子模块,用于从消息队列中获取目标消息队列;区域调度子模块,还用于从核心交互子模块中获取目标机器;其中,目标机器用于执行目标任务;目标任务包括渲染任务。区域调度子模块,还用于根据目标消息队列和目标机器生成区域调度策略。
22.第三方面,本技术实施例提供一种电子设备,电子设备包括存储器和处理器,存储器中存储有程序指令,处理器读取并运行程序指令时,执行上述任一实现方式中的步骤。
23.第四方面,本技术实施例还提供一种计算机可读存储介质,可读取存储介质中存储有计算机程序指令,计算机程序指令被一处理器读取并运行时,执行上述任一实现方式中的步骤。
附图说明
24.为了更清楚地说明本技术实施例的技术方案,下面将对本技术实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本技术的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
25.图1为本技术实施例提供的区域调度流程图;
26.图2为本技术实施例提供的目标消息队列生成流程图;
27.图3为本技术实施例提供的目标机器获取流程图;
28.图4为本技术实施例提供的机器控制流程图;
29.图5为本技术实施例提供的节点调度流程图;
30.图6为本技术实施例提供的任务调度示意图;
31.图7为本身实施例提供的任务调度系统的模块示意图;
32.图8为本技术实施例提供的电子设备的结构示意图。
具体实施方式
33.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。例如,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一
个模块、程序段或代码的一部分,模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
34.申请人在研究过程中发现,目前传统渲染平台一般包括了机器管理模块、任务管理模块、队列模块和调度模块等,而调度模块在实现上多为集中式调度器,调度器一旦宕机则无法进行渲染任务的下发,影响系统的可用性。并且队列模块中一般是单队列或多队列,没有实现同一个队列内的优先级;常常导致队列中高优先级的任务没有被及时执行。
35.基于此,本方案提供一种任务调度方法、系统及存储介质,区域调度模块只负责区级别的任务调度,通过二级调度的方式降低作业的平均周转时间,提高系统的吞吐能力。并且消息队列之间与消息队列内都存在优先级,保证了高优先级的任务优先执行,系统的可用性高。
36.在介绍本技术实施例的具体方案之前,在此先对本技术中任务调度系统中各个模块对应执行的服务进行统一介绍。
37.核心交互子模块,可用于执行core-service(核心服务),core-service主要用于提供全局状态;其中,全局状态主要包括机器状态、任务状态等。
38.消息生成子模块,可用于执行api-service,api-service为本技术实施例任务调度系统的业务网关,能够实现保护内部服务并对外暴露接口的功能;其中,向外暴露的接口包括但不限于任务的提交、任务状态的查询、实时里程碑日志的查询(查询控制面组件的健康状态、查询任务队列的堆积数量以及查询所有机器的内存和cpu的使用率、禁止或允许机器调度)等。
39.数据存储子模块,可以是mysql数据库,用于存储区域调度模块和节点调度模块的数据,如机器状态、任务状态、消息队列等。
40.区域调度子模块,包括用于调度渲染任务的scheduler服务,区域调度子模块中的scheduler服务用于实现调度任务,专注于实现可用区级别的调度。
41.应用模块,包括ui服务与第三方服务,支持对接运营支持系统(oss),在运行时可以将场景文件直接上传到oss中,在执行渲染任务时进行下载。
42.机器控制子模块可执行node-scaler服务,node-scaler服务是用于控制机器的弹性开关机的服务,主要用于提升机器的利用率和不必要的资源浪费。
43.节点调度子模块,主要在节点调度模块进行scheduler服务,用于实现节点级别的任务调度。
44.任务执行子模块用于执行渲染服务。
45.请参看图1,图1为本技术实施例提供的区域调度流程图;该方法应用于任务调度系统,该任务调度系统包括具有核心交互子模块、消息生成子模块和区域调度子模块的区域调度模块。该方法包括:
46.步骤s100:由核心交互子模块,获取目标任务,并将该目标任务存储至数据存储子模块。
47.在上述步骤s100中,核心交互子模块core-service获取目标任务;core-service将目标任务同步更新至mysql数据库。每一次目标任务的更新,core-service都会将更新的目标任务同步至mysql数据库,这样可以保证数据库中为最新状态。本技术实施例提供的任务调度方法主要用于能够执行任渲染任务的染污调度系统,该目标任务主要包括渲染任务。
48.需要说明的是,在本技术实施例提供的任务调度系统中,核心交互子模块可用于执行core-service(核心服务),core-service主要用于提供全局状态;其中,全局状态主要包括机器状态、机器节点锁的状态、任务状态等。
49.步骤s101:由消息生成子模块,从数据存储子模块获取目标任务,并生成消息队列。
50.在上述步骤s101中,消息生成子模块从数据存储子模块获取该目标任务,并根据目标任务生成消息队列。api-service从mysql数据库中获取到目标任务,根据目标任务生成消息队列(api-service作为kafka的生产者往kafka的队列中创建一个新消息)。
51.需要说明的是,本技术实施例提供的任务调度系统中的消息生成子模块,可用于执行api-service,api-service为本技术实施例任务调度系统的业务网关,能够实现保护内部服务并对外暴露接口的功能;其中,向外暴露的接口包括但不限于任务的提交、任务状态的查询、实时里程碑日志的查询(查询控制面组件的健康状态、查询任务队列的堆积数量以及查询所有机器的内存和cpu的使用率、禁止或允许机器调度)等。
52.可选地,在生成消息队列后api-service将任务数据推送至消息队列,此消息队列可以是kafka消息队列。其中,不同优先级的任务会被api-service提交到不同优先级下,保证每个优先级下只包括一个队列。
53.本领域技术人员可以理解的是,kafka是一个分布式、支持分区的(partition)、多副本的(replica),基于zookeeper协调的分式消息系统,它的最大的特性就是可以实时的处理大量数据以满足各种需求场景。
54.在上述实现过程中,生成消息队列后api-service将任务数据推送至消息队列,能够保证高优先级的任务被优先执行,能够保证重要且紧急的渲染任务不被非紧急的不重要的(高优先级的被低优先级的)覆盖,导致重要任务的延后执行。
55.步骤s102:由区域调度子模块,从消息队列中获取目标消息队列。
56.在上述步骤s102中,由区域调度子模块从消息队列中获取目标消息队列。示例性地,scheduler服务从kafka队列中拉取目标消息队列中任务的id,存放在scheduler服务的内存队列中;可以理解的是,scheduler服务中的消息队列与kafka中的消息队列是一一对应的。
57.步骤s103:由区域调度子模块,从核心交互子模块中获取目标机器。
58.在上述步骤s103中,由区域调度子模块scheduler服务从核心交互子模块中获取目标机器;需要说明的是,目标机器是用于执行目标任务的机器,而本技术实施例中的目标任务包括渲染任务。
59.步骤s104:由区域调度子模块,根据目标消息队列和目标机器生成区域调度策略。
60.在上述步骤s104中,由区域调度子模块根据目标消息队列和目标机器生成区域调度策略;例如,当目标消息队列所需的机器数大于机器可用区a中的空闲机器数目,scheduler服务则忽略机器可用区a,也就是不调度a区域的机器。当目标消息队列所需要的机器数目小于等于机器可用区b中的空闲机器数目,scheduler服务则选中机器可用区b;在可用区域被选中后,将目标消息队列中的渲染任务的scheduledzone字段(该字段表征将要执行目标消息队列的机器可用区的地址)设置机器可用区b的区域名称;同时,将区域调度策略回传给core-service,从而core-service中存在区域调度策略,由此,可用区层面的调度完成。
61.通过图1可知,本技术实施例提供的任务调度方法,在区域调度模块通过获取目标任务生成目标消息队列,此目标消息队列中的消息具有优先级,能够保证在执行任务时,优先级高的任务先出队,优先级低的后出队;保证高优先级的任务能够被及时执行。进一步地,通过目标消息队列和目标机器能够选择正确的可用区,而不是直接对单个的机器进行调度;而是后续再继续在可用区域中调度目标机器,在调度上任务的状态、可用区的状态、机器的状态均为共享,具备极高的可用性。
62.请参看图2,图2为本技术实施例提供的目标消息队列生成流程图;该方法包括:
63.步骤s200:获取消息队列的id。
64.在上述步骤s200中,scheduler服务从kafka队列中拉取目标消息队列中任务的id,存放在scheduler服务的内存中;需要说明的是,scheduler服务中的消息队列与kafka中的消息队列是一一对应的。
65.步骤s201:根据id获取消息队列的优先级。
66.在上述步骤s201中,scheduler服务根据id获取消息队列的优先级。
67.步骤s202:根据优先级生成目标消息队列。
68.在上述步骤s201-s202中,根据消息队列的id能够生成目标消息队列,目标消息队列是具有优先级的,在此进行举例说明,目标消息队列中的消息依据优先级出队,优先级高的元素先出队,优先级低的后出队。例如,目标消息队列中存在3个消息队列a、b、c,对应的优先级为3、2、1;在出队时,a队列中的任务优先出队,c队列中的任务最后出队;其中,每个队列中内部的任务也存在优先级,出队也对分先后顺序。
69.通过图2可知,任务调度子模块能够根据消息队列的id生成一个具有优先级的目标消息队列;在执行任务时,目标消息队列按照消息队列的优先级以及消息队列内部的优先级进行任务的出队;队列与队列之间存在优先级,队列内部也存在优先级,从而保证了高优先级任务的及时执行。
70.请参看图3,图3为本技术实施例提供的目标机器获取流程图;该方法包括:
71.步骤s300:由区域调度子模块,从核心交互子模块中获取机器状态。
72.在上述步骤s300中,区域调度子模块scheduler服务从核心交互子模块的core-service中获取机器的状态;其中,机器的状态可以是可用的、不可用的;不可用的情况包括故障机器与正在执行任务的机器。
73.需要说明的是,机器状态包括节点锁状态,可以将节点锁理解为表征机器状态的一个字段。
74.步骤s301:判断机器状态的节点锁的状态是否为空。
75.在上述步骤s301中,节点锁的状态可以为空、可以不为空;当节点锁的状态不为空时,那么认定该不为空的节点对应的机器正在运行任务,那么scheduler服务就忽略此节点;当节点锁的值为空并且机器的状态正常,同时该可用区的空闲机器数目大于等于渲染任务中所需的机器数目,就可选中该可用区,并将最终的区域调度结果回写给core-service。
76.步骤s302:若节点锁的状态为空,则将节点锁对应的机器作为目标机器。
77.在上述步骤s302中,scheduler服务判断节点锁为空,将节点锁对应的机器作为目标机器;若可用区的目标机器数目大于等于渲染任务中所需的机器数目,就可选中该可用区。
78.通过图3可知,本技术实施例通过判断机器状态中的节点锁状态是否为空来找出空闲的机器,即目标机器;并结合可用区目标机器的数量与渲染任务来确定出最终的区域调度策略,区域调度策略中包括选中的可用区。本技术实施例先对可用区域进行选定,后续再选择具体的机器,对所有可用区的机器合理评估下做出机器资源利用率最大的调度策略。
79.在一可选地实施例中,本技术实施例提供的任务调度系统还包括应用模块,应用模块包括ui服务与第三方服务,支持对接运营支持系统(oss),在运行时可以将场景文件直接上传到oss中,在执行渲染任务时进行下载;从而能够最大程度地节省服务端的资源和成本,如cpu资源、内存资源、网络带宽资源等。
80.在由区域调度子模块,根据目标消息队列、机器状态和节点锁的状态的生成区域调度策略之后,方法还包括:由区域调度子模块,将区域调度策略发送至核心交互子模块;由核心交互子模块,将区域调度策略发送至数据存储子模块。进一步地,由应用模块,从数据存储子模块获取目标任务和区域调度策略。示例性地,本技术实施例中的mysql数据库,在核心交互子模块获取目标任务、获取机器状态、生成区域调度策略后都会将数据同步至mysql数据库。应用模块可直接从mysql数据库中获取数据,可以将其传递至第三方服务或者ui界面;例如,可直接从ui界面获取任务进度、机器状态等,能够实时全局掌握任务状态。
81.由此可知,通过设置mysql数据库(数据存储模块)和应用模块,可以实现用于模块从mysql数据库拿取数据,实现数据的实时同步展示;并且应用模块的存在能够减少cpu资源、内存资源和网络带宽资源的消耗。
82.请参看图4,图4为本技术实施例提供的机器控制流程图;本技术实施例提供的任务调度系统的区域调度模块还包括机器控制子模块;该方法包括:
83.步骤s400:由机器控制子模块,从核心交互子模块获取目标消息队列和空闲机器。
84.在上述步骤s400中,机器控制子模块的node-scaler服务从核心交互子模块的core-service中获取目标消息队列和空闲机器;前面提到core-service能够获取机器状态与任务状态,其中就包括空闲的机器。
85.步骤s401:判断目标消息队列对应的目标机器数量是否小于空闲机器的数量。
86.步骤s402:若目标消息队列对应的目标机器数量小于空闲机器的数量,则关闭指定数目的空闲机器。
87.在上述步骤s401-s402中,当执行渲染任务时,当产生的目标消息队列中所需的目标机器数量小于区域中空闲的机器数量时,那么node-scaler服务关闭指定数目的空闲机
器,只留下执行目标消息队列相应数量的空闲机器。其中,指定数目的空闲机器为空闲机器数量减去目标机器数量的差值。
88.示例性地,众多机器空闲时,node-scaler服务调用core-service的接口主动将过多的空闲机器下线,即让这些空闲机器不被调度任务;可以令云厂商api关闭机器,从而避免机器资源浪费。另一方面,当大量任务等待执行时,又调用云厂商api将关闭的机器开启,让更多的机器执行渲染任务,加快队列的消耗。
89.通过图4可知,通过机器管理子模块的设置能够合理管控系统内的机器,使合理数量的机器在线,若存在过多的空闲机器时,机器管理子模块会关闭多余的空闲机器,以实现资源的合理利用。
90.请参看图5,图5为本技术实施例提供的节点调度流程图;本技术实施例提供的任务调度系统还包括具有节点调度子模块和任务执行子模块的节点调度模块;该方法包括:
91.步骤s500:由节点调度子模块,判断是否能从核心交互子模块拉取数据。
92.在上述步骤s500中,节点调度子模块的scheduler服务判断scheduler服务能否从核心交互子模块core-service中拉取数据,主要是区域调度策略。
93.步骤s501:若能从核心交互子模块拉取数据,则从核心交互子模块获取区域任务调度策略。
94.在上述步骤s501中,若节点调度子模块的scheduler服务能够从核心交互子模块core-service中拉取数据,就从core-service中获取区域调度策略,基于前面的描述可以清楚地知道,区域调度策略中包括目标任务对应的可用区。
95.步骤s502:由节点调度子模块,根据区域调度策略对目标机器下发调度指令。
96.在上述步骤s502中,节点调度子模块的scheduler服务根据区域调度策略根据区域调度策略对目标机器下发调度指令,至此才开始对目标机器进行调度。
97.步骤s503:由任务执行子模块,根据调度指令执行目标任务。
98.在上述步骤s503中,任务执行子模块根据调度指令使机器执行目标任务。
99.示例性地,节点调度子模块的scheduler服务从core-service中获取区域调度策略中本可用区中所有机器信息;并将机器状态为正常、节点锁状态为空、空闲机器数量大于目标机器数量的区域中的机器选中;将这些选中的空闲机器的ip回传给core-service表明调度任务完成。进一步地,core-service接收到被选中的空闲机器的ip后,将这些机器的节点锁进行锁定,并将节点锁的值设置为任务id。任务执行子模块根据任务调度指令对机器下发渲染任务。
100.通过图5可知,节点调度子模块中的scheduler服务从core-service中获取区域调度策略,并进一步对目标机器进行调度,进而执行渲染任务;本技术实施例提供的任务调度系统通过二级调度的方式克服集中调度的缺陷,区域调度子模块负责区级别的调度任务,节点调度子模块负责节点级的调度任务;这种二级调度方式能够降低作业的平均周转时间,提高系统的吞吐能力。
101.在一可选地实施例中,若不能从核心交互子模块拉取数据,则由节点调度子模块,从消息生成子模块中获取目标消息队列。获取目标机器,并根据目标消息队列和目标机器生成区域调度策略。示例性地,若节点调度器通过服务注册中心发现区域调度器离线超过预设时间,则由节点调度子模块,从消息生成子模块中获取目标消息队列。获取目标机器,
并根据目标消息队列和目标机器生成区域调度策略。需要说明的是,在本技术实施例中该预设时间可以为1分钟,在实际应用中,可根据实际需求进行设置,本技术实施例提供的预设时间为1分钟不能成为该预设时间的限制。
102.示例性地,若节点调度子模块中的scheduler服务不能从core-service中获取区域调度策略。那么节点调度子模块中的scheduler服务久从消息生成子模块的api-service中获取目标消息队列;示例性地,若节点调度子模块中的scheduler服务从服务注册中心发现区域调度器离线超过1分钟;那么节点调度子模块中的scheduler服务就kafka中获取消息并在内存中生成目标队列。进一步地,根据目标消息队列和目标机器生成区域调度策略;也就是说,在区域调度子模块出现故障时,节点调度子模块也可独立完成任务的调度。如果节点调度器从服务注册中心发现区域调度器已恢复,则不再直接执行区域调度的逻辑,区域调度的责任由刚恢复的区域调度器来执行。
103.由此可知,节点调度子模块在区域调度子模块完全故障的情况下,能够直接从消息队列中拿取任务进行调度,不会造成系统瘫痪和机器资源的损失。
104.在一可选地实施例中,在由任务执行子模块,根据调度指令执行目标任务之后,该任务调度方法还包括:由任务执行子模块,获取机器状态,并发送至节点调度子模块;由节点调度子模块,将机器转态发送至核心交互子模块。
105.由此可知,在执行目标任务之后,任务执行子模块会重新获取机器的状态;将此时的机器状态发送给节点调度子模块;进一步地,节点调度子模块将机器状态回传给区域调度模块的核心交互子模块。从而核心调度子模块又将机器状态进行了更新,可以作为后续任务调度的基础信息,保证任务调度系统高效地运行。
106.请参看图6,图6为本技术实施例提供的任务调度示意图。这里采取逐个模块进行介绍本技术任务调度方法。在介绍之前需要说明的是,本技术实施例提供的各个模块之间使用同一个注册中心实例和配置中心实例,共用相同的注册中心和配置中心方便运维工程师管理。
107.应用模块主要包括ui服务和第三方服务。ui服务可直接对接oss系统;可直接将场景文件上传至oss系统,在执行任务时下载即可;能够最大程度地减少cpu资源、内存资源、网络带宽资源的浪费。
108.区域调度模块主要实现区域级别的调度。主要包括区域调度子模块,消息生成子模块、数据存储子模块、机器管理子模块和核心交互子模块。渲染服务以日志的形式推送至核心交互子模块中,核心交互子模块将渲染服务落库到数据存储子模块,并通知消息生成子模块有日志新增的时间;进一步地,消息生成子模块从数据存储子模块读取日志并转发给应用模块。渲染任务的数据被持久化到数据存储模块中后被查询(主要查询正在渲染的任务、已经结束的历史任务),将任务推送至消息生成子模块的消息队列,消息队列可以是kafka队列;区域调度子模块拿取消息队列,最终生成区域调度策略。同时,当系统中存在比目标任务所需的目标机器数量更多的空闲机器时,机器管理子模块会将多余的空闲机器关闭;当系统中任务队列发生大量堆积时,重新开启被关闭的机器。
109.节点调度模块主要实现节点级别的任务调度。节点调度模块包括节点调度子模块和任务执行子模块;节点调度子模块先从区域地调度子模块获取区域调度策略,获取后任务执行子模块根据任务调度指令执行目标任务,从而渲染任务下发成功。若渲染任务下发
失败,则节点调度子模块直从消息队列中拉取任务,防止kafka队列由于区域调度子模块的故障因素发生任务堆积。
110.任务执行子模块用于执行渲染任务,它整合各种渲染引擎和oss存储来对外提供渲染能力。节点调度模块的scheduler服务将任务下发,渲染服务获取任务后,调用渲染引擎进行渲染,渲染完成则将输出文件传送到oss中,在整个渲染过程中,会实时地将来自渲染引擎的重要里程碑日志回写给core-service服务,任务结束后将最终的任务状态回给core-service服务,并调用core-service服务的释放节点锁的接口进行释放锁,从而一来区域调度子模块能知道该机器为空闲状态。同时,渲染服务周期性地将心跳(本机cpu内存使用率、cpu核心数量、内存容量等)发送给core-service服务。
111.通过图6可知,本技术实施例提供的任务调度方法通过二级调度的方式,即区域调度模块实现区级别的调度、节点调度模块实现节点级别的调度;当区域调度模块宕机无法实现区级别的调度时,节点调度模块通过注册中心感知到,则自动从消息队列中获取一个任务进行调度,此时系统依然正常运行,机器资源利用率没有损失。
112.请参看图7,图7为本身实施例提供的任务调度系统的模块示意图;该任务调度系统100包括:具有核心交互子模块111、消息生成子模块112和区域调度子模块113的区域调度模块110。
113.核心交互子模块111,用于获取目标任务;
114.消息生成子模块112,用于从核心交互子模块111获取目标任务,并生成消息队列;
115.区域调度子模块113,用于从消息队列中获取目标消息队列;
116.区域调度子模块113,还用于从核心交互子模块111中获取目标机器;其中,目标机器用于执行目标任务;目标任务包括渲染任务。
117.区域调度子模块113,还用于根据目标消息队列和目标机器生成区域调度策略。
118.在一可选地实施例中,由区域调度子模块113,从消息队列中获取目标消息队列包括:区域调度子模块113获取消息队列的id;根据id获取消息队列的优先级;区域调度子模块113根据优先级生成目标消息队列。
119.在一可选地实施例中,由区域调度子模块113从核心交互子模块111中获取目标机器包括:由区域调度子模块113,从核心交互子模块111中获取机器状态;其中,机器状态包括节点锁的状态;节点锁为机器的通用唯一识别码。述区域调度子模块113判断机器状态的节点锁的状态是否为空;若节点锁的状态不为空,述区域调度子模块113将节点锁对应的机器作为目标机器。
120.在一可选地实施例中,任务调度系统100还包括应用模块120,区域调度模块110还包括数据存储子模块114;在由区域调度子模块113,根据目标消息队列、机器状态和节点锁的状态的生成区域调度策略之后,方法还包括:由区域调度子模块113,将区域调度策略发送至核心交互子模块111;由核心交互子模块111,将区域调度策略发送至数据存储子模块114。由应用模块120,从数据存储子模块114获取目标任务和区域调度策略。
121.在一可选地实施例中,任务调度系统100的区域调度模块110还包括机器控制子模块150;由机器控制子模块150,从核心交互子模块111获取目标消息队列和空闲机器。机器控制子模块150判断目标消息队列对应的目标机器数量是否小于空闲机器的数量;若目标消息队列对应的目标机器数量小于空闲机器的数量,则机器控制子模块150关闭指定数目
的空闲机器;其中,指定数目为空闲机器数量与目标机器数量的差值。
122.在一可选地实施例中,任务调度系统100还包括具有节点调度子模块131和任务执行子模块132的节点调度模块130;由节点调度子模块131,判断是否能从核心交互子模块拉取数据;若能从核心交互子模块拉取数据,则节点调度子模块131从核心交互子模块获取区域调度策略。由节点调度子模块131,根据区域调度策略对目标机器下发调度指令。由任务执行子模块132,根据调度指令执行目标任务。
123.在一可选地实施例中,若节点调度子模块131不能从核心交互子模块111拉取数据,则由节点调度子模块131,从消息生成子模块112中获取目标消息队列获取目标机器,节点调度子模块131根据目标消息队列和目标机器生成区域调度策略。
124.在一可选地实施例中,在由任务执行子模块132,根据调度指令执行目标任务之后,由任务执行子模块132,获取机器状态,并发送至节点调度子模块131;由节点调度子模块131,将机器转态发送至核心交互子模块111。
125.请参见图8,图8为本技术实施例提供的电子设备的结构示意图。本技术实施例提供的一种电子设备300,包括:处理器301和存储器302,存储器302存储有处理器301可执行的机器可读指令,机器可读指令被处理器301执行时执行如上的方法。
126.基于同一发明构思,本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序指令,所述计算机程序指令被一处理器读取并运行时,执行上述任一实现方式中的步骤。
127.所述计算机可读存储介质可以是随机存取存储器(random access memory,ram),只读存储器(read only memory,rom),可编程只读存储器(programmable read-only memory,prom),可擦除只读存储器(erasable programmable read-only memory,eprom),电可擦除只读存储器(electric erasable programmable read-only memory,eeprom)等各种可以存储程序代码的介质。其中,存储介质用于存储程序,所述处理器在接收到执行指令后,执行所述程序,本发明实施例任一实施例揭示的过程定义的电子终端所执行的方法可以应用于处理器中,或者由处理器实现。
128.在本技术所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
129.另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
130.再者,在本技术各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
131.可以替换的,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品
包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。
132.所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。
133.在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
134.以上所述仅为本技术的实施例而已,并不用于限制本技术的保护范围,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1