CN114662932B - 一种节点分级的工作流类定时任务调度方法 - Google Patents
一种节点分级的工作流类定时任务调度方法 Download PDFInfo
- Publication number
- CN114662932B CN114662932B CN202210301754.5A CN202210301754A CN114662932B CN 114662932 B CN114662932 B CN 114662932B CN 202210301754 A CN202210301754 A CN 202210301754A CN 114662932 B CN114662932 B CN 114662932B
- Authority
- CN
- China
- Prior art keywords
- task
- scheduled
- time
- scheduling
- workflow
- 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
- 238000000034 method Methods 0.000 title claims abstract description 55
- 230000008569 process Effects 0.000 claims abstract description 21
- 238000005516 engineering process Methods 0.000 claims abstract description 13
- 239000011159 matrix material Substances 0.000 claims description 41
- 238000004364 calculation method Methods 0.000 claims description 13
- 230000005540 biological transmission Effects 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 4
- 238000004891 communication Methods 0.000 claims description 3
- 230000007774 longterm Effects 0.000 claims description 3
- 238000013461 design Methods 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 238000011160 research Methods 0.000 description 3
- 101100233916 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) KAR5 gene Proteins 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 101001121408 Homo sapiens L-amino-acid oxidase Proteins 0.000 description 1
- 102100026388 L-amino-acid oxidase Human genes 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
- G06Q10/063—Operations research, analysis or management
- G06Q10/0631—Resource planning, allocation, distributing or scheduling for enterprises or organisations
- G06Q10/06312—Adjustment or analysis of established resource schedule, e.g. resource or task levelling, or dynamic rescheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/20—Design optimisation, verification or simulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/04—Forecasting or optimisation specially adapted for administrative or management purposes, e.g. linear programming or "cutting stock problem"
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
- G06Q10/063—Operations research, analysis or management
- G06Q10/0633—Workflow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/06—Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
- G06Q10/063—Operations research, analysis or management
- G06Q10/0639—Performance analysis of employees; Performance analysis of enterprise or organisation operations
- G06Q10/06393—Score-carding, benchmarking or key performance indicator [KPI] analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/103—Workflow collaboration or project management
Landscapes
- Business, Economics & Management (AREA)
- Engineering & Computer Science (AREA)
- Human Resources & Organizations (AREA)
- Strategic Management (AREA)
- Economics (AREA)
- Theoretical Computer Science (AREA)
- Entrepreneurship & Innovation (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Tourism & Hospitality (AREA)
- Marketing (AREA)
- Development Economics (AREA)
- General Business, Economics & Management (AREA)
- Quality & Reliability (AREA)
- Operations Research (AREA)
- Game Theory and Decision Science (AREA)
- Educational Administration (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Geometry (AREA)
- Computer Hardware Design (AREA)
- Data Mining & Analysis (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明请求保护一种节点分级的工作流类定时任务调度方法,其包括以下步骤:通过工作流技术对定时任务进行建模,将定时任务形成一条标准的工作流;将图形化的工作流转为可被调度程序识别并调度的数据,将工作流中的所有定时任务节点排列成一个任务节点线性序列以供调度服务进行操控,完成任务节点分级;对该工作流中每一级定时任务节点的调度指标进行计算,调度指标可以用于描述当工作流中存在多个同级任务调度器对于该批次任务调度的优先级;对当前不同阶段的任务计算任务调度的优先级,并形成任务调度优先级列表,根据任务调度优先级列表将任务分配到执行处理器上进行定时任务的执行;最终使整体工作流完成时间达到最优。
Description
技术领域
本发明属于计算机科学的调度领域,具体涉及采用工作流技术对任务调度问题进行建模并通过分级调度策略优化任务调度的方法。
背景技术
在计算机科学领域,任务调度问题可以细化为进程级调度与线程级调度。前者也可称为资源调度,综合来看,其更关注于资源如何更合理的分配,并且此系统的具体实现上,通常要求用户任务打包上传至资源管理平台,调度模块则依托于资源管理平台进行工作,这类系统有像Mesos技术体系下的Marathon、Chronos、Aurora等,Hadoop平台的Yarn,以及基于Docker容器技术的Machine、Swarm、Compose、kubernetes等系统;后者是本发明研究的对象,由于其通常都依赖于定时器,因此也可称为定时任务,更关注于如何提升调度器的调度性能,如何更灵活地调度任务,如何无感知融入第三方应用,并且由于是线程级的任务调度,因此通常此类用户任务不需要上传至资源管理平台,从而使得定时任务系统更加易于操作。
定时任务在计划时间的执行可能以一定周期执行,也可能是一次性执行,其执行频率由具体业务场景决定,其应用频率较高的三种场景分别是业务应用、数据处理和分布式事务。例如,电商系统通过定时任务完成每天晚上12点清空用户积分的业务和数据需求,金融系统中通过定时任务实现分布式事务,保证资金流的正常流转。
在企业级应用发展初期,由于系统逻辑简单和用户群体基数较小,通过使用操作系统的定时任务服务或者编程语言自带的定时器就可以满足定时任务的业务需求。但是随着系统逻辑复杂度不断提高以及用户群体基数扩大,操作系统层面和编程语言层面的定时器已难以满足应用的相关需求,目前传统的定时任务解决方案主要存在以下两个问题:
1.定时任务调度能力较差。在传统的任务调度解决方案中,为了防止业务系统对单个定时任务的错误调度,通常会采用单线程或者线程同步对竞争资源进行访问,但是此类解决方案会导致系统资源利用率较低,从而影响任务的调度性能;
2.定时任务流程编排方案不完整。现有的流程编排解决方案是通过工作流技术实现了对任务进行流程化建模,但是在执行过程中,由于任务节点皆为串行触发,则会导致整条工作流的运行效率较低。本发明通过对整条工作流进行层级划分,相同层级的定时任务具备相同的前置触发条件,则通过并行触发的方式提高了整条工作流的运行效率。同时通过任务节点与云服务器的匹配算法实现了更加高效的工作流任务调度。
CN112346842A,一种基于有向无环图的工作流任务调度方法,包括:获取不同流程下的多个任务节点;基于DAG对多个任务节点建立模型,该模型包括多个工作流,该工作流由多个任务节点以及任务节点和任务节点之间的前后依赖关系组成,该模型的顶点表示任务节点,该模型的有向边表示任务节点与任务节点之间的前后依赖关系;获取事件,并根据事件触发该模型中的工作流的状态流转;根据工作流的状态流转来启动工作流的任务节点的调度,以进行任务执行。通过上述方式,本发明所公开的基于有向无环图的工作流任务调度方法能够实现跨流程自由编排的同时,还能按照依赖关系实现跨流程任务的调度。经过分析该专利也有上面第二点的缺陷,因此需要对此提出改进。
发明内容
本发明旨在解决以上现有技术的问题。提出了一种节点分级的工作流类定时任务调度方法。本发明的技术方案如下:
一种节点分级的工作流类定时任务调度方法,其包括以下步骤:
S1:通过工作流技术对定时任务进行建模,将定时任务形成一条标准的工作流;
S2:将图形化的工作流转为可被调度程序识别并调度的数据,将工作流中的所有定时任务节点排列成一个任务节点线性序列以供调度服务进行操控,完成任务节点分级;
S3:通过S2进行了任务节点分级后,定时任务组成具备逻辑关系的线性序列,对该工作流中每一级定时任务节点的调度指标进行计算,调度指标可以用于描述当工作流中存在多个同级任务即多个没有父级定时任务的任务节点时,调度器对于该批次任务调度的优先级;
S4:以S2提出的任务节点线性序列和S3提出的节点调度指标为基础,将对当前不同阶段的任务计算任务调度的优先级,并形成任务调度优先级列表,根据任务调度优先级列表将任务分配到执行处理器上进行定时任务的执行;最终使整体工作流完成时间达到最优;
S5:任务推入多层级时间轮中进行任务调度。
进一步的,所述S1:通过工作流技术对定时任务进行建模,具体如下:
工作流存在多种建模方式,结合本系统的特点,将通过有向无环图DAG对工作流进行建模,其中一个工作流作为一个有向无环图,记为一个二元组G=<T,E>,其中T={t1,t2,...,tn}是当前工作流中所有定时任务的集合,集合中每一个元素都对应着工作流中的一个任务节点;E是工作流的边集,E中每一个元素都代表着两个定时任务之间存在依赖关系,则表示在工作流中存在一条由点ti指向点tj的有向边,定时任务ti是定时任务tj的前置依赖,必须执行定时任务ti完成后才能执行定时任务tj,称ti为父级定时任务,tj为子级定时任务;
用户首先创建多个定时任务,并根据工作流技术对定时任务进行流程编排,形成一张图,图的表示将采用邻接矩阵法进行表示;如果用户自定义的图不为一个标准的DAG工作流,那么在进行后续的定时任务调度的时候则会出现无法调度或重复调度的问题,因此需要对用户自定义的图进行解析。
进一步的,所述对用户自定义的图进行解析分为以下步骤:
步骤A1:遍历邻接矩阵,获取当前图中入度为0的任务节点,该节点作为操作顶点,并对此节点做出标记;
步骤A2:遍历操作顶点的所有邻接顶点,邻接顶点作为下一组操作顶点,并对此组邻接顶点进行标记,如果存在邻接顶点则转向步骤A2,若不存在邻接顶点则转向步骤A3;
步骤A3:如果还有任务节点未被访问到,则证明该图不是一个有效的DAG工作流,以上三个步骤完毕,将得到DAG工作流。
进一步的,所述S2将图形化的工作流转为可被调度程序识别并调度的数据,将工作流中的所有定时任务节点排列成一个任务节点线性序列以供调度服务进行操控,完成任务节点分级,具体如下:
线性序列S={t1,t2,...,tn},其中定时任务t1出现在定时任务t2之前,则定时任务t1为定时任务t2的父级定时任务,节点分级策略具体步骤如下:
步骤B1:遍历邻接矩阵,找出所有入度为0的定时任务节点,将此组节点作为父级节点;
步骤B2:将此组父级节点从有向无环图中删除,并重新更新图;
步骤B3:重复执行步骤B1和步骤B2,直至当前有向无环图中不存在节点为止;
执行完毕节点分级策略后,会形成线性序列,在策略流程中第n组定时任务节点为线性序列S中第n级节点,线性序列S可以直接被调度模型识别并从前往后进行调度。
进一步的,所述S3:通过S2进行了任务节点分级后,定时任务组成具备逻辑关系的线性序列,对该工作流中每一级定时任务节点的调度指标进行计算,计算方式如下:
工作流的定时任务指标可由三元组M=<TIME,DATA,LENGTH>,其中TIME={time1,time2,...,timen}是工作流中定时任务计划时间的集合,集合中的每一个元素都对应一个定时任务的计划时间;DATA是一个n×n的数据矩阵:
式中,dataij——任务ti传输到任务tj的全部数据量。
LENGTH={length1,length2,...,lengthn}是工作流中定时任务计划的指令长度集合,集合中的每一个元素都对应一个定时任务的指令长度;
假设集群中存在P={p1,p2,...,pm},P代表集群中存在m个处理器,每一个处理器都可以为任意定时任务提供调度服务;定时任务的调度指标将用定时任务开始时间与定时任务执行时间共同组成,首先需要计算每个定时任务的完成时间,定时任务的任务执行时间跟两个因素有关,分别是数据传输时间与机器指令执行时间。
进一步的,所述计算每个定时任务的完成时间,定时任务的任务执行时间跟两个因素有关,分别是数据传输时间与机器指令执行时间,计算过程如下:
定时任务ti到定时任务tj的数据传输时间为:
其中:
式中,IOPSk表示处理器k的每秒的读写次数;表示集群通信的平均延迟;Bk表示处理器k的网络传输速度;表示处理器k的上行带宽;代表处理器k的下行带宽;
定时任务ti在处理器pk的任务计算时间为:
其中:
式中,UCPUk表示处理器n的CPU使用率;NCPUk表示处理器n的CPU数量;表示CPU平均每毫秒处理指令数;Di表示CPU执行定时任务ti等待时长指标;Ci表示CPU执行定时任务ti计算时长指标;
定时任务的ti的任务执行时间为TETi:
进一步的,还需要计算定时任务的最早开始时间,在本系统中,定时任务的最早开始时间与两个因素相关,定时任务的计划时间和父级定时任务的执行完成时间;定时任务最早开始时间ESTi表达式如下:
式中,timeentry表示入口任务的开始时间,TETparent表示定时任务ti父级节点的任务执行时间ESTparent表示定时任务ti父级节点的最早开始时间;任务调度指标与定时任务的最早开始时间成反比,定时任务最早开始时间越早,则表示该任务可以更早地分发给处理器,处理器无须等待,该任务的调度指标越好;任务调度指标与定时任务的执行时间成正比,任务执行时间越长,则表示该任务需更早地分发给处理器进行长时间处理,该任务的调度指标越好。
进一步的,所述步骤S4的节点调度策略包含以下九个步骤:
步骤C1:通过对工作流中定时任务的任务节点集合T分级,得到线性序列S={t1,t2,...,tn};
步骤C2:通过计算任务节点的任务执行时间和最早开始时间,计算定时任务ti在处理器pk上的调度成本;调度成本与调度指标成反比,调度指标越好,则代表着调度成本越低,调度成本为:
步骤C3:对于第l级调度,建立矩阵Ml(n×m)表示第l级的调度矩阵,其中矩阵存在n行代表着任务节点集合T的n个任务,m列代表集群处理器集合P中存在m个处理器;
步骤C4:对矩阵Ml(n×m)中每一行元素,减去所在行中的最小值,这会使得每一行至少出现一个0值;
步骤C5:对矩阵Ml(n×m)中每一列元素,减去所在列中的最小值,这会使得每一列至少出现一个0值;
步骤C6:遍历矩阵Ml(n×m),用尽可能少的垂直线和水平线覆盖矩阵Ml(n×m)全部的0值;
步骤C7:垂直线和水平线数量之和小于min(n,m),则转向步骤C8;否则,转向步骤C9;
步骤C8:寻找矩阵Ml(n×m)中所有没有被垂直线和水平线覆盖的最小元素,记为k,并将所有没有被垂直线和水平线覆盖的元素都减去k,并对垂直线和水平线交叉的元素加上k,最后转向步骤6;
步骤C9:此时矩阵Ml(n×m)中存在第i行或第j列中有唯一的0值,将此0值所对应的定时任务推入处理器,并删除此0值对应的行与列;重复步骤C9,若出现定时任务过剩而处理器均被分配任务的情况,则将后续未被调度的定时任务通过由大至小排序并分发至后续空闲的处理器进行调度,直至该级定时任务均被调度。
进一步的,所述步骤S5具体包括以下步骤:
步骤D1:初始化不同层级的时间轮并指定其唯一的父级时间轮,每个时间轮由槽位数量、时间单位、时间轮开始启动的时间以及定时任务队列几个变量组成;
步骤D2:将任务实例TimerTask添加至时间轮;
步骤D3:时间推动时间轮,首先启动一个时间线程,通过对DelayQueue.poll方法取出放在最前面的槽的TimerTaskListw,DelayQueue是一个以timeexpire从小到大排列的有序延迟队列,如果队列中没有TimerTaskListw的timeexpire到达,操作会阻塞,直到timeexpire到达;
步骤D4:时间轮消费任务,通过DelayQueue.poll方法获取TimerTaskListw,说明该槽位的任务实例已经过期,则遍历TimerTaskListw中的任务实例,将任务实例放入线程池中执行;
步骤D5:任务降级,在时间轮推动的同时,若时间轮槽位内的任务实例的过期时间timeexpire小于时间轮的时间单位unitw,则将任务下发至其子级时间轮,若下发失败则立即执行任务实例。
进一步的,所述步骤D2:将任务实例(TimerTask)添加至时间轮,具体包括以下步骤:
时间轮的时间容积Vw表示第w级时间轮能容纳的时间范围,表达式为:
Vw=numw×unitw
式中,numw——时间轮w的槽位数量
unitw——时间轮w的时间单位
若任务实例的过期时间timeexpire小于系统时间,则立即执行任务实例;若任务实例的timeexpire小于等于时间容积,则此任务实例的时间轮下标indexw为:
然后通过挂链的方法将任务实例添加至时间轮下标为indexw的TimerTaskList中,最后将TimerTaskListw加入DelayQueue中;若任务实例的timeexpire大于Vw,则进行时间轮升级并重复步骤D2.
本发明的优点及有益效果如下:
本发明的创新点具体在S3、S4和S5。
S3:在工作流类调度模型的基础之上,首先通过将工作流进行拓扑排序形成一条前后具备逻辑关系的线性序列,也可称为节点分级列表,以此被调度模型识别,通过改进HEFT算法的指标计算,在服务器指标中融入了更加详细的参数以得到更加精准的服务器信息,有效提升了该算法在定时任务调度领域的计算准确性。
S4;经过S3对调度指标进行了计算,本步骤对任务节点序列和服务器节点进行了重新建模,形成了一种二分图,它可以被划分为两个部分,每个部分内的点互不相连,通过一种在多项式时间内求解任务分配问题的组合优化算法获取二分图的最大匹配数,以此可以快速得到同层级的任务节点的任务调度方式,提升了任务节点的分配效率。
S5:考虑到调度器对任务的定时方式若采用有序列表定时器来实现对时间的精准控制,则会导致需要将任务实例按照触发时间进行有序插入,因此任务入队列的时候,时间复杂度会达到O(n),因此本发明采用多层级时间轮调度算法,时间轮是一个存储定时任务的环形队列,底层采用数组实现,数组是时间刻度的抽象,每一个数组元素都代表着一个时间单位。用此种多层次时间轮调度算法进行一天任务的调度,一共需要使用144个数组元素,相比较于其他定时算法,在插入任务实例的时间复杂度相同的情况下,极大节约了内存空间。
附图说明
图1是本发明提供优选实施例DAG工作流建模图;
图2为定时任务节点分级图;
图3为多层级时间轮模型图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、详细地描述。所描述的实施例仅仅是本发明的一部分实施例。
本发明解决上述技术问题的技术方案是:
本发明主要是对任务调度模型的设计与实现进行研究,旨在开发一个简单易用的高性能定时任务调度系统。首先,通过一种分布式计算系统下网络作业调度的分类方法对本发明的调度问题进行建模,分析调度模型所必须的工作负荷、资源需求和调度要求三个组成部分,着重对工作负荷和调度要求部分进行优化,对工作流引擎进行分析研究,并结合任务触发算法和分级调度策略,设计与实现定时任务的流式触发机制。本发明主要研究内容如下:
1.流式任务调度机制的研究。分析研究工作流引擎,通过流程编排实现工作流类型的任务调度,并通过任务节点分级调度策略提高了工作流类定时任务的调度效率;
2.定时任务触发方案的研究。分析研究现有定时任务触发算法的弊端,结合时间轮算法的设计思路,对现有定时任务触发算法进行优化,设计一种高效可靠的定时任务触发方案。
一种节点分级的工作流类定时任务调度方法,其包括如下步骤:
S1:通过工作流技术对定时任务进行建模,具体如下:
工作流存在多种建模方式,结合本系统的特点,将通过有向无环图(DAG)对工作流进行建模,其中一个工作流作为一个有向无环图,记为一个二元组G=<T,E>。其中T={t1,t2,...,tn}是当前工作流中所有定时任务的集合,集合中每一个元素都对应着工作流中的一个任务节点。E是工作流的边集,E中每一个元素都代表着两个定时任务之间存在依赖关系,例如,则表示在工作流中存在一条由点ti指向点tj的有向边,定时任务ti是定时任务tj的前置依赖,必须执行定时任务ti完成后才能执行定时任务tj。在本章节称ti为父级定时任务,tj为子级定时任务。
用户首先创建多个定时任务,并根据工作流技术对定时任务进行流程编排,形成一张图。图通常有两种表示方法,邻接矩阵法和邻接表法。邻接表适合表示稀疏图,邻接矩阵适合表示稠密图,结合本系统实际考虑,图的表示将采用邻接矩阵法进行表示。如果用户自定义的图不为一个标准的DAG工作流,那么在进行后续的定时任务调度的时候则会出现无法调度或重复调度的问题,因此需要对用户自定义的图进行解析。具体思路分为以下步骤:
步骤1:遍历邻接矩阵,获取当前图中入度为0的任务节点,该节点作为操作顶点,并对此节点做出标记;
步骤2:遍历操作顶点的所有邻接顶点,邻接顶点作为下一组操作顶点,并对此组邻接顶点进行标记,如果存在邻接顶点则转向步骤2,若不存在邻接顶点则转向步骤3;
步骤3:如果还有任务节点未被访问到,则证明该图不是一个有效的DAG工作流。
以上三个步骤完毕,将得到图1所示的DAG工作流。便于后续开展任务分级等策略,图解析的具体过程如算法1所示:
其中temporaryList作为中间集合变量,存储计算过程中的任务节点,通过算法1寻找工作流中的邻接节点,会得到一个按照路径长度进行排序的任务序列,即Gm。若Gm中存在两个相同的元素,则证明该图不为一个标准的DAG工作流。
S2:通过S1进行了工作流建模,将定时任务形成了一条标准的工作流后,为了将图形化的工作流转为可被调度程序识别并调度的数据,需要将工作流中的所有定时任务节点排列成一个线性序列以供调度服务进行操控,具体如下:
线性序列S={t1,t2,...,tn},其中定时任务t1出现在定时任务t2之前,则定时任务t1为定时任务t2的父级定时任务。节点分级策略具体步骤如下:
步骤1:遍历邻接矩阵,找出所有入度为0的定时任务节点,将此组节点作为父级节点;
步骤2:将此组父级节点从有向无环图中删除,并重新更新图;
步骤3:重复执行步骤1和步骤2,直至当前有向无环图中不存在节点为止。
执行完毕节点分级策略后,会形成如图2的线性序列,在策略流程中第n组定时任务节点为线性序列S中第n级节点,线性序列S可以直接被调度模型识别并从前往后进行调度
S3:通过S2进行了任务节点分级后,定时任务组成具备逻辑关系的线性序列,需要对该工作流中每一级定时任务节点的调度指标的计算,调度指标可以用于描述当工作流中存在多个同级任务时,即多个没有父级定时任务的任务节点,调度器对于该批次任务调度的优先级,计算方式如下:
工作流的定时任务指标可由三元组M=<TIME,DATA,LENGTH>,其中TIME={time1,time2,...,timen}是工作流中定时任务计划时间的集合,集合中的每一个元素都对应一个定时任务的计划时间。DATA是一个n×n的数据矩阵:
式中,dataij——任务ti传输到任务tj的全部数据量。
LENGTH={length1,length2,...,lengthn}是工作流中定时任务计划的指令长度集合,集合中的每一个元素都对应一个定时任务的指令长度。
假设集群中存在P={p1,p2,...,pm},P代表集群中存在m个处理器,每一个处理器都可以为任意定时任务提供调度服务。定时任务的调度指标将用定时任务开始时间与定时任务执行时间共同组成,首先需要计算每个定时任务的完成时间,定时任务的任务执行时间跟两个因素有关,分别是数据传输时间与机器指令执行时间,计算过程如下:
定时任务ti到定时任务tj的数据传输时间为:
其中:
式中,IOPSk——处理器k的每秒的读写次数
——集群通信的平均延迟
Bk——处理器k的网络传输速度
——处理器k的上行带宽
——处理器k的下行带宽;
定时任务ti在处理器pk的任务计算时间为:
其中:
式中,UCPUk——处理器n的CPU使用率
NCPUk——处理器n的CPU数量
——CPU平均每毫秒处理指令数
Di——CPU执行定时任务ti等待时长指标
Ci——CPU执行定时任务ti计算时长指标
定时任务的ti的任务执行时间为TETi:
随后需要计算定时任务的最早开始时间,在本系统中,定时任务的最早开始时间与两个因素相关,定时任务的计划时间和父级定时任务的执行完成时间。定时任务最早开始时间ESTi表达式如下:
式中,timeentry——入口任务的开始时间
TETparent——定时任务ti父级节点的任务执行时间
ESTparent——定时任务ti父级节点的最早开始时间
通过定时任务的最早开始时间和执行完成时间可以客观的评价任务调度指标。任务调度指标与定时任务的最早开始时间成反比,定时任务最早开始时间越早,则表示该任务可以更早地分发给处理器,处理器无须等待,该任务的调度指标越好;任务调度指标与定时任务的执行时间成正比,任务执行时间越长,则表示该任务需更早地分发给处理器进行长时间处理,该任务的调度指标越好。
S4:以S2提出的任务节点线性序列和S3提出的节点调度指标为基础,将对当前不同阶段的任务计算任务调度的优先级,并形成任务调度优先级列表,根据任务调度优先级列表将任务分配到执行处理器上进行定时任务的执行。最终使整体工作流完成时间达到最优。节点调度策略包含以下九个步骤:
步骤1:通过对工作流中定时任务的任务节点集合T分级,得到线性序列S={t1,t2,...,tn};
步骤2:通过公式5.7和5.8计算任务节点的任务执行时间和最早开始时间,计算定时任务ti在处理器pk上的调度成本。调度成本与调度指标成反比,调度指标越好,则代表着调度成本越低,调度成本为:
步骤3:对于第l级调度,建立矩阵Ml(n×m)表示第l级的调度矩阵,其中矩阵存在n行代表着任务节点集合T的n个任务,m列代表集群处理器集合P中存在m个处理器;
步骤4:对矩阵Ml(n×m)中每一行元素,减去所在行中的最小值,这会使得每一行至少出现一个0值;
步骤5:对矩阵Ml(n×m)中每一列元素,减去所在列中的最小值,这会使得每一列至少出现一个0值;
步骤6:遍历矩阵Ml(n×m),用尽可能少的垂直线和水平线覆盖矩阵Ml(n×m)全部的0值;
步骤7:垂直线和水平线数量之和小于min(n,m),则转向步骤8;否则,转向步骤9;
步骤8:寻找矩阵Ml(n×m)中所有没有被垂直线和水平线覆盖的最小元素,记为k,并将所有没有被垂直线和水平线覆盖的元素都减去k,并对垂直线和水平线交叉的元素加上k,最后转向步骤6;
步骤9:此时矩阵Ml(n×m)中存在第i行或第j列中有唯一的0值,将此0值所对应的定时任务推入处理器,并删除此0值对应的行与列。重复步骤9,若出现定时任务过剩而处理器均被分配任务的情况,则将后续未被调度的定时任务通过由大至小排序并分发至后续空闲的处理器进行调度,直至该级定时任务均被调度。
S5:任务推入多层级时间轮中进行任务调度;
本发明使用图3的多层级时间轮模型进行一天任务的调度,一共需要使用144个数组元素,相比较于初始时间轮调度算法,在插入任务实例的时间复杂度相同的情况下,极大节约了内存空间。多层级时间轮的具体过程如算法2所示:
算法具体步骤如下:
步骤1:初始化不同层级的时间轮并指定其唯一的父级时间轮,每个时间轮由槽位数量、时间单位、时间轮开始启动的时间以及定时任务队列几个变量组成;
步骤2:将任务实例(TimerTask)添加至时间轮,时间轮的时间容积Vw表示第w级时间轮能容纳的时间范围,表达式为:
Vw=numw×unitw
式中,numw——时间轮w的槽位数量
unitw——时间轮w的时间单位
若任务实例的过期时间timeexpire小于系统时间,则立即执行任务实例;若任务实例的timeexpire小于等于时间容积,则此任务实例的时间轮下标indexw为:
然后通过挂链的方法将任务实例添加至时间轮下标为indexw的TimerTaskList中,最后将TimerTaskListw加入DelayQueue中;若任务实例的timeexpire大于Vw,则进行时间轮升级并重复步骤2;
步骤3:时间推动时间轮,首先启动一个时间线程,通过对DelayQueue.poll方法取出放在最前面的槽的TimerTaskListw。DelayQueue是一个以timeexpire从小到大排列的有序延迟队列,如果队列中没有TimerTaskListw的timeexpire到达,操作会阻塞,直到timeexpire到达;
步骤4:时间轮消费任务,通过DelayQueue.poll方法获取TimerTaskListw,说明该槽位的任务实例已经过期,则遍历TimerTaskListw中的任务实例,将任务实例放入线程池中执行;
步骤5:任务降级,在时间轮推动的同时,若时间轮槽位内的任务实例的过期时间timeexpire小于时间轮的时间单位unitw,则将任务下发至其子级时间轮,若下发失败则立即执行任务实例。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上这些实施例应理解为仅用于说明本发明而不用于限制本发明的保护范围。在阅读了本发明的记载的内容之后,技术人员可以对本发明作各种改动或修改,这些等效变化和修饰同样落入本发明权利要求所限定的范围。
Claims (4)
1.一种节点分级的工作流类定时任务调度方法,其特征在于,包括以下步骤:
S1:通过工作流技术对定时任务进行建模,将定时任务形成一条标准的工作流;
S2:将图形化的工作流转为可被调度程序识别并调度的数据,将工作流中的所有定时任务节点排列成一个任务节点线性序列以供调度服务进行操控,完成任务节点分级;
S3:通过S2进行了任务节点分级后,定时任务组成具备逻辑关系的线性序列,对该工作流中每一级定时任务节点的调度指标进行计算,调度指标用于描述当工作流中存在多个同级任务即多个没有父级定时任务的任务节点时,调度器对于该批次任务调度的优先级;
S4:以S2提出的任务节点线性序列和S3提出的节点调度指标为基础,将对当前不同阶段的任务计算任务调度的优先级,并形成任务调度优先级列表,根据任务调度优先级列表将任务分配到执行处理器上进行定时任务的执行;最终使整体工作流完成时间达到最优;
S5:任务推入多层级时间轮中进行任务调度;
所述S1:通过工作流技术对定时任务进行建模,具体如下:
工作流存在多种建模方式,结合本系统的特点,将通过有向无环图DAG对工作流进行建模,其中一个工作流作为一个有向无环图,记为一个二元组G=<T,E>,其中T={t1,t2,...,tn}是当前工作流中所有定时任务的集合,集合中每一个元素都对应着工作流中的一个任务节点;E是工作流的边集,E中每一个元素都代表着两个定时任务之间存在依赖关系,则表示在工作流中存在一条由点ti指向点tj的有向边,定时任务ti是定时任务tj的前置依赖,必须执行定时任务ti完成后才能执行定时任务tj,称ti为父级定时任务,tj为子级定时任务;
用户首先创建多个定时任务,并根据工作流技术对定时任务进行流程编排,形成一张图,图的表示将采用邻接矩阵法进行表示;如果用户自定义的图不为一个标准的DAG工作流,那么在进行后续的定时任务调度的时候则会出现无法调度或重复调度的问题,因此需要对用户自定义的图进行解析;
所述对用户自定义的图进行解析分为以下步骤:
步骤A1:遍历邻接矩阵,获取当前图中入度为0的任务节点,该节点作为操作顶点,并对此节点做出标记;
步骤A2:遍历操作顶点的所有邻接顶点,邻接顶点作为下一组操作顶点,并对此组邻接顶点进行标记,如果存在邻接顶点则转向步骤A2,若不存在邻接顶点则转向步骤A3;
步骤A3:如果还有任务节点未被访问到,则证明该图不是一个有效的DAG工作流,以上三个步骤完毕,将得到DAG工作流;
所述S2将图形化的工作流转为可被调度程序识别并调度的数据,将工作流中的所有定时任务节点排列成一个任务节点线性序列以供调度服务进行操控,完成任务节点分级,具体如下:
线性序列S={t1,t2,...,tn},其中定时任务t1出现在定时任务t2之前,则定时任务t1为定时任务t2的父级定时任务,节点分级策略具体步骤如下:
步骤B1:遍历邻接矩阵,找出所有入度为0的定时任务节点,将此组节点作为父级节点;
步骤B2:将此组父级节点从有向无环图中删除,并重新更新图;
步骤B3:重复执行步骤B1和步骤B2,直至当前有向无环图中不存在节点为止;
执行完毕节点分级策略后,会形成线性序列,在策略流程中第n组定时任务节点为线性序列S中第n级节点,线性序列S直接被调度模型识别并从前往后进行调度;
所述S3:通过S2进行了任务节点分级后,定时任务组成具备逻辑关系的线性序列,对该工作流中每一级定时任务节点的调度指标进行计算,计算方式如下:
工作流的定时任务指标可由三元组M=<TIME,DATA,LENGTH>,其中TIME={time1,time2,...,timen}是工作流中定时任务计划时间的集合,集合中的每一个元素都对应一个定时任务的计划时间;DATA是一个n×n的数据矩阵:
式中,dataij——任务ti传输到任务tj的全部数据量;
LENGTH={length1,length2,...,lengthn}是工作流中定时任务计划的指令长度集合,集合中的每一个元素都对应一个定时任务的指令长度;
假设集群中存在P={p1,p2,...,pm},P代表集群中存在m个处理器,每一个处理器都为任意定时任务提供调度服务;定时任务的调度指标将用定时任务开始时间与定时任务执行时间共同组成,首先需要计算每个定时任务的完成时间,定时任务的任务执行时间跟两个因素有关,分别是数据传输时间与机器指令执行时间;
所述步骤S4的节点调度策略包含以下九个步骤:
步骤C1:通过对工作流中定时任务的任务节点集合T分级,得到线性序列S={t1,t2,...,tn};
步骤C2:通过计算任务节点的任务执行时间和最早开始时间,计算定时任务ti在处理器pk上的调度成本;调度成本与调度指标成反比,调度指标越好,则代表着调度成本越低,调度成本为:
步骤C3:对于第l级调度,建立矩阵Ml(n×m)表示第l级的调度矩阵,其中矩阵存在n行代表着任务节点集合T的n个任务,m列代表集群处理器集合P中存在m个处理器;
步骤C4:对矩阵Ml(n×m)中每一行元素,减去所在行中的最小值,这会使得每一行至少出现一个0值;
步骤C5:对矩阵Ml(n×m)中每一列元素,减去所在列中的最小值,这会使得每一列至少出现一个0值;
步骤C6:遍历矩阵Ml(n×m),用尽可能少的垂直线和水平线覆盖矩阵Ml(n×m)全部的0值;
步骤C7:垂直线和水平线数量之和小于min(n,m),则转向步骤C8;否则,转向步骤C9;
步骤C8:寻找矩阵Ml(n×m)中所有没有被垂直线和水平线覆盖的最小元素,记为k,并将所有没有被垂直线和水平线覆盖的元素都减去k,并对垂直线和水平线交叉的元素加上k,最后转向步骤6;
步骤C9:此时矩阵Ml(n×m)中存在第i行或第j列中有唯一的0值,将此0值所对应的定时任务推入处理器,并删除此0值对应的行与列;重复步骤C9,若出现定时任务过剩而处理器均被分配任务的情况,则将后续未被调度的定时任务通过由大至小排序并分发至后续空闲的处理器进行调度,直至该级定时任务均被调度;
所述步骤S5具体包括以下步骤:
步骤D1:初始化不同层级的时间轮并指定其唯一的父级时间轮,每个时间轮由槽位数量、时间单位、时间轮开始启动的时间以及定时任务队列几个变量组成;
步骤D2:将任务实例TimerTask添加至时间轮;
步骤D3:时间推动时间轮,首先启动一个时间线程,通过对DelayQueue.poll方法取出放在最前面的槽的TimerTaskListw,DelayQueue是一个以timeexpire从小到大排列的有序延迟队列,如果队列中没有TimerTaskListw的timeexpire到达,操作会阻塞,直到timeexpire到达;
步骤D4:时间轮消费任务,通过DelayQueue.poll方法获取TimerTaskListw,说明该槽位的任务实例已经过期,则遍历TimerTaskListw中的任务实例,将任务实例放入线程池中执行;
步骤D5:任务降级,在时间轮推动的同时,若时间轮槽位内的任务实例的过期时间timeexpire小于时间轮的时间单位unitw,则将任务下发至其子级时间轮,若下发失败则立即执行任务实例。
2.根据权利要求1所述的一种节点分级的工作流类定时任务调度方法,其特征在于,所述计算每个定时任务的完成时间,定时任务的任务执行时间跟两个因素有关,分别是数据传输时间与机器指令执行时间,计算过程如下:
定时任务ti到定时任务tj的数据传输时间为:
其中:
式中,IOPSk表示处理器k的每秒的读写次数;L表示集群通信的平均延迟;Bk表示处理器k的网络传输速度;表示处理器k的上行带宽;代表处理器k的下行带宽;
定时任务ti在处理器pk的任务计算时间为:
其中:
式中,UCPUk表示处理器n的CPU使用率;NCPUk表示处理器n的CPU数量;V表示CPU平均每毫秒处理指令数;Di表示CPU执行定时任务ti等待时长指标;Ci表示CPU执行定时任务ti计算时长指标;
定时任务的ti的任务执行时间为TETi:
3.根据权利要求2所述的一种节点分级的工作流类定时任务调度方法,其特征在于,还需要计算定时任务的最早开始时间,在本系统中,定时任务的最早开始时间与两个因素相关,定时任务的计划时间和父级定时任务的执行完成时间;定时任务最早开始时间ESTi表达式如下:
式中,timeentry表示入口任务的开始时间,TETparent表示定时任务ti父级节点的任务执行时间ESTparent表示定时任务ti父级节点的最早开始时间;任务调度指标与定时任务的最早开始时间成反比,定时任务最早开始时间越早,则表示该任务更早地分发给处理器,处理器无须等待,该任务的调度指标越好;任务调度指标与定时任务的执行时间成正比,任务执行时间越长,则表示该任务需更早地分发给处理器进行长时间处理,该任务的调度指标越好。
4.根据权利要求1所述的一种节点分级的工作流类定时任务调度方法,其特征在于,所述步骤D2:将任务实例TimerTask添加至时间轮,具体包括以下步骤:
时间轮的时间容积Vw表示第w级时间轮能容纳的时间范围,表达式为:
Vw=numw×unitw
式中,numw——时间轮w的槽位数量
unitw——时间轮w的时间单位
若任务实例的过期时间timeexpire小于系统时间,则立即执行任务实例;若任务实例的timeexpire小于等于时间容积,则此任务实例的时间轮下标indexw为:
然后通过挂链的方法将任务实例添加至时间轮下标为indexw的TimerTaskList中,最后将TimerTaskListw加入DelayQueue中;若任务实例的timeexpire大于Vw,则进行时间轮升级并重复步骤D2。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210301754.5A CN114662932B (zh) | 2022-03-24 | 2022-03-24 | 一种节点分级的工作流类定时任务调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210301754.5A CN114662932B (zh) | 2022-03-24 | 2022-03-24 | 一种节点分级的工作流类定时任务调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114662932A CN114662932A (zh) | 2022-06-24 |
CN114662932B true CN114662932B (zh) | 2024-07-19 |
Family
ID=82032176
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210301754.5A Active CN114662932B (zh) | 2022-03-24 | 2022-03-24 | 一种节点分级的工作流类定时任务调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114662932B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115145711B (zh) * | 2022-09-02 | 2022-12-23 | 北京睿企信息科技有限公司 | 一种获取有向无环图任务结果的数据处理系统 |
CN116401055B (zh) * | 2023-04-07 | 2023-10-03 | 天津大学 | 面向资源效率优化的服务器无感知计算工作流编排方法 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100684333B1 (ko) * | 2006-03-31 | 2007-02-22 | 김길웅 | 시간에 기반하여 비즈니스 프로세스의 실행을 관리하는비즈니스용 소프트웨어 통합 운영 시스템 및 그 비즈니스용소프트웨어 통합 운영 방법 |
US10467569B2 (en) * | 2014-10-03 | 2019-11-05 | Datameer, Inc. | Apparatus and method for scheduling distributed workflow tasks |
CN107168770B (zh) * | 2017-04-14 | 2020-03-27 | 中国人民解放军国防科学技术大学 | 一种低能耗的云数据中心工作流调度与资源供给方法 |
US11010193B2 (en) * | 2017-04-17 | 2021-05-18 | Microsoft Technology Licensing, Llc | Efficient queue management for cluster scheduling |
CN107301500B (zh) * | 2017-06-02 | 2020-09-25 | 北京工业大学 | 一种基于关键路径任务前瞻的工作流调度方法 |
CN111427681B (zh) * | 2020-02-19 | 2023-02-17 | 上海交通大学 | 边缘计算中基于资源监控的实时任务匹配调度系统和方法 |
CN111988185A (zh) * | 2020-08-31 | 2020-11-24 | 重庆邮电大学 | 一种基于Barzilai-Borwein步长的多步通信分布式优化方法 |
-
2022
- 2022-03-24 CN CN202210301754.5A patent/CN114662932B/zh active Active
Non-Patent Citations (1)
Title |
---|
面向分布式环境的任务调度研究与应用;罗智;《万方数据》;20230706;1-88 * |
Also Published As
Publication number | Publication date |
---|---|
CN114662932A (zh) | 2022-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111427681B (zh) | 边缘计算中基于资源监控的实时任务匹配调度系统和方法 | |
Alipourfard et al. | {CherryPick}: Adaptively unearthing the best cloud configurations for big data analytics | |
Li et al. | Performance modeling and predictive scheduling for distributed stream data processing | |
Ananthanarayanan et al. | {GRASS}: Trimming stragglers in approximation analytics | |
US10467569B2 (en) | Apparatus and method for scheduling distributed workflow tasks | |
CN104298550B (zh) | 一种面向Hadoop的动态调度方法 | |
CN114662932B (zh) | 一种节点分级的工作流类定时任务调度方法 | |
CN111181773B (zh) | 面向异构边云协同智能系统的多组件应用的延迟预测方法 | |
CN106325984A (zh) | 一种大数据任务调度装置 | |
CN117707759A (zh) | 一种多租户gpu集群弹性配额调度方法和系统 | |
Liu et al. | A survey of scheduling frameworks in big data systems | |
Lin et al. | Modeling and simulation of spark streaming | |
Diallo et al. | Simulation framework for real-time database on WSNs | |
Li et al. | The packing server for real-time scheduling of mapreduce workflows | |
Venkataswamy et al. | Rare: Renewable energy aware resource management in datacenters | |
Bonfietti et al. | Throughput constraint for synchronous data flow graphs | |
Fu et al. | Real-time data retrieval in cyber-physical systems with temporal validity and data availability constraints | |
Tang et al. | A network load perception based task scheduler for parallel distributed data processing systems | |
Riedy et al. | Power and control in networked sensors | |
CN114860417B (zh) | 多核神经网络处理器及用于该处理器多任务分配调度方法 | |
Klusáček et al. | Efficient grid scheduling through the incremental schedule‐based approach | |
Kang et al. | Slo-aware virtual rebalancing for edge stream processing | |
Du et al. | OctopusKing: A TCT-aware task scheduling on spark platform | |
Kalim | Satisfying service level objectives in stream processing systems | |
Pace et al. | Dynamic Resource Shaping for Compute Clusters |
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 |