CN109542600B - 分布式任务调度***及方法 - Google Patents
分布式任务调度***及方法 Download PDFInfo
- Publication number
- CN109542600B CN109542600B CN201811360588.6A CN201811360588A CN109542600B CN 109542600 B CN109542600 B CN 109542600B CN 201811360588 A CN201811360588 A CN 201811360588A CN 109542600 B CN109542600 B CN 109542600B
- Authority
- CN
- China
- Prior art keywords
- task
- subtask
- executed
- instances
- maximum
- 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
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种分布式任务调度***及方法。***包括:任务分发模块、多个任务捞取模块及多个任务执行模块;任务分发模块适于将任务集包含的至少一个待执行任务分发给多个任务捞取模块;任务捞取模块适于针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整;任务执行模块适于执行所获取到的子任务实例对应的子任务,通过动态调整任务优先级权重,实现任务低峰期释放资源,任务高峰期加快调度,克服了任务实例积压问题。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种分布式任务调度***及方法。
背景技术
传统的任务调度技术,一般是任务分发层在收到消息时触发捞取子任务,任务捞取层根据任务分发层发送的子任务信息捞取出需要执行的子任务实例,由任务执行层执行相应的子任务。
申请公布号为CN 105808335 A的中国专利申请中,公开了一种动态调度方法,然而,其是根据作业的作业大小和等待时间,动态调整每个作业的调度权重,其中,作业大小越大,等待时间越小,调度权重越小;作业大小越小,等待时间越大,调度权重越大,这种动态调度并未考虑到其它任务。
因此,现有的任务调度技术仍然存在资源隔离问题,流控能力有限,调度无法感知***压力等问题,在高负载大并发情况发生时,不能很好的调度任务执行,容易造成任务实例积压的问题。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的分布式任务调度***及方法。
根据本发明的一个方面,提供了一种分布式任务调度***,包括:任务分发模块、多个任务捞取模块及多个任务执行模块;其中,任务分发模块,适于将任务集包含的至少一个待执行任务分发给多个任务捞取模块;任务捞取模块,适于针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整;任务执行模块,适于执行所获取到的子任务实例对应的子任务。
可选地,任务捞取模块进一步适于:根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对待执行任务对应的任务优先级权重进行动态调整。
可选地,任务捞取模块进一步适于:确定任务初始权重;根据任务初始权重、待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值;根据任务初始权重及权重变化值计算任务优先级权重。
可选地,任务集包含的所有待执行任务对应的任务初始权重总和等于1;任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
可选地,任务捞取模块还适于:判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;若是,则根据任务最大可用配额数量确定待捞取的子任务实例集;若否,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。
可选地,任务捞取模块还适于:根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计待执行任务尚未被捞取的子任务实例的数量。
可选地,任务捞取模块还适于:判断任务最大可用配额数量是否大于0;若是,则进一步判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;若否,则结束捞取待执行任务的子任务实例。
可选地,任务捞取模块还适于:判断任务集可用配额数量是否大于0;若是,则依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量;若否,则结束捞取子任务实例。
根据本发明的另一方面,提供了一种分布式任务调度方法,包括:任务分发模块将任务集包含的至少一个待执行任务分发给多个任务捞取模块;任务捞取模块针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整;任务执行模块执行所获取到的子任务实例对应的子任务。
可选地,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整进一步包括:根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对待执行任务对应的任务优先级权重进行动态调整。
可选地,根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对待执行任务对应的任务优先级权重进行动态调整进一步包括:确定任务初始权重;根据任务初始权重、待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值;根据任务初始权重及权重变化值计算任务优先级权重。
可选地,任务集包含的所有待执行任务对应的任务初始权重总和等于1;
任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
可选地,在确定待捞取的子任务实例集之前,方法还包括:判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;
确定待捞取的子任务实例集进一步包括:若任务最大可用配额数量小于或等于单位时间内子任务实例最大捞取数量,则根据任务最大可用配额数量确定待捞取的子任务实例集;若任务最大可用配额数量大于单位时间内子任务实例最大捞取数量,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。
可选地,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整进一步包括:根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计待执行任务尚未被捞取的子任务实例的数量;根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整。
可选地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之后,方法还包括:判断任务最大可用配额数量是否大于0;若是,则执行判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量的步骤;若否,则结束捞取待执行任务的子任务实例。
可选地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之前,方法还包括:判断任务集可用配额数量是否大于0;若是,则执行依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量的步骤;若否,则结束捞取子任务实例。
根据本发明的又一方面,提供了一种计算设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述分布式任务调度方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述分布式任务调度方法对应的操作。
根据本发明提供的方案,任务分发模块,适于将任务集包含的至少一个待执行任务分发给多个任务捞取模块;任务捞取模块,适于针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整;任务执行模块,适于执行所获取到的子任务实例对应的子任务。基于本发明提供的方案,通过动态调整任务优先级权重,可以动态调整每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题,克服了任务实例积压问题。也解决了在任务调度时,各待执行任务之间的资源隔离问题,实现了待执行任务的捞取彼此独立,但又可相互感知的效果
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的分布式任务调度***的结构示意图;
图2示出了分布式任务调度***的调度过程的示意图;
图3示出了根据本发明一个实施例的分布式任务调度方法的流程示意图;
图4示出了根据本发明另一个实施例的分布式任务调度方法的流程示意图;
图5示出了根据本发明一个实施例的计算设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的分布式任务调度***的结构示意图,图2示出了分布式任务调度***的调度过程的示意图。如图1和图2所示,该分布式任务调度***包括:任务分发模块100、多个任务捞取模块110及多个任务执行模块120。
任务分发模块100,适于将任务集包含的至少一个待执行任务分发给多个任务捞取模块。
任务集是任务的集合,是按照任务维度将任务进行划分,例如,按照业务进行划分,举例说明,可以将相应的门店任务划分为一个任务集,将相应的审理任务划分为一个任务集,将相应的人员管理任务划分为一个任务集。如图2所示,任务集A包含以下任务:批处理任务A、批处理任务B、批处理任务C;任务集B包含以下任务:通用任务A、通用任务B、通用任务C;任务集C包含以下任务:流程任务A、流程任务B、流程任务C,这里仅是举例说明,不具有任何限定作用。
在本实施例中,按照任务维度将任务进行了划分,任务集可能包含多个任务,其中,每个任务都对应有相应的任务执行时间,对于一些任务而言,并未到达该任务执行时间,而对于另一些任务而言,到达该任务执行时间,这里,将到达任务执行时间,需要执行的任务称为待执行任务。
具体地,任务分发模块100查询数据库,从数据库读取所有任务集,确定出各个任务集中所有待执行任务(又可称为激活任务,指到达任务执行时间的任务),例如,对于任务集A确定批处理任务A、批处理任务B为待执行任务;对于任务集B确定通用任务A为待执行任务;对于任务集C确定流程任务A为待执行任务,再次查询数据库确定待执行任务的任务体,随后任务分发模块100便按照任务维度,将任务集包含的至少一个待执行任务分发给多个任务捞取模块,具体地,将至少一个待执行任务的任务体分发给多个任务捞取模块,例如,将批处理任务A、批处理任务B、通用任务A、流程任务A对应的任务体分发给任务捞取模块。其中,任务体是任务的一个定义、模板等。图2仅是示意性说明,通常情况下,任务集里包含多个待执行任务。
在本发明一种可选实施方式中,调度中心可以定时向任务分发模块发送实例捞取消息,例如,调度中心每1秒向任务分发模块发送实例捞取消息,任务分发模块接收到调度中心发送的实例捞取消息后,触发执行待执行任务分发操作。
任务捞取模块110,适于针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整。
在本实施例中,针对每个任务集都设置了任务集可用配额数量,例如,针对任务集A、任务集B、任务集C分别设置了相应的任务集可用配额数量,其中,每个任务集的任务集可用配额数量可能并不相同。
在初始时(捞取子任务实例之前),任务集可用配额数量为任务集最大配额数量,任务集最大配额数量是根据任务集中待执行任务的子任务实例数量而设定的,例如,任务集A对应的任务集最大配额数量为200、任务集B对应的任务集最大配额数量为150、任务集C对应的任务集最大配额数量为100,随着待执行任务的子任务实例的不断捞取,任务集可用配额数量在不断地发生着变化,任务集可用配额数量根据捞取的子任务实例的数量进行调整,例如,将已捞取的子任务实例的数量记为任务集已有配额数量,那么任务集可用配额数量=任务集最大配额数量-任务集已有配额数量。
为了能够很好地调度任务,使得资源能够合理分配,针对任务集里的每个待执行任务,都对应设置有相应的优先级,这里的优先级限定了每个任务在该任务所属的任务集获取配额数量的概率,以任务优先级权重表示。每个待执行任务都包含有至少一个子任务,任务最大可用配额数量指任务集中各待执行任务可以捞取的子任务实例的最大数量。
具体地,任务捞取模块110接收任务分发模块100分发的待执行任务,针对每一个待执行任务,任务捞取模块110可以依据该待执行任务所属的任务集对应的任务集可用配额数量与该待执行任务对应的任务优先级权重计算任务最大可用配额数量,更具体地,可以按照如下公式(1)计算任务最大可用配额数量:
任务最大可用配额数量=任务集可用配额数量*任务优先级权重公式(1)
在计算得到任务最大可用配额数量后,可以确定待捞取的子任务实例集,例如,可以按照时间顺序确定待捞取的子任务实例集,也可以随机确定待捞取的子任务实例集,这里不做具体限定。
在确定了待捞取的子任务实例集之后,可以查询数据库捞取出需要执行的子任务实例,具体地,通过查询数据库,捞取任务体下需要执行的子任务实例,其中,任务实例是业务上的一个操作产生的一个需要执行的东西,产生时一部分信息读取自任务体。
在本实施例中,任务捞取模块110负责捞取子任务实例,但并不执行相应的子任务实例,因此,任务捞取模块在捞取相应的子任务实例后,需要将捞取的子任务实例分发给任务执行模块,例如,任务捞取模块110将捞取的子任务实例:白名单更新、门店后台修改等子任务实例分发给任务执行模块120,由任务执行模块120执行所获取到的子任务实例对应的子任务。
在每次捞取后,待执行任务尚未被捞取的子任务实例的数量会随之发生变化,任务捞取模块110可以根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整,通过动态调整任务优先级权重,动态调整了每一个待执行任务的捞取概率,从而合理分配了任务捞取资源,避免任务积压。其中,捞取的子任务实例的数量影响着待执行任务尚未被捞取的子任务实例的数量。
任务执行模块120,适于执行所获取到的子任务实例对应的子任务。
任务执行模块120在获取到任务捞取模块110分发的子任务实例后,会加载子任务执行所需的执行信息,并唤起真正的任务执行器,完成对相关的子任务的处理操作。
若在执行所获取到的子任务实例对应的子任务过程中产生了异常,任务执行模块120会记录相应的异常信息,以便于根据异常信息进行排查。
在本发明一种可选实施方式中,任务捞取模块进一步适于:根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对待执行任务对应的任务优先级权重进行动态调整。
具体地,针对每个待执行任务,可以设置单位时间内子任务实例最大捞取数量(TPS),其中,单位时间内子任务实例最大捞取数量限定了子任务实例在单位时间内可以被捞取的最大数量,例如,针对批处理任务A,其对应的单位时间内子任务实例最大捞取数量为5;针对批处理任务B,其对应的单位时间内子任务实例最大捞取数量为6;针对通用任务A,其对应的单位时间内子任务实例最大捞取数量为4;针对流程任务A,其对应的单位时间内子任务实例最大捞取数量为10,这里仅是举例说明,不具有任何限定作用,本领域技术人员可以根据实际需要灵活设定TPS对应的数值。
待执行任务尚未被捞取的子任务实例的数量反映了待执行任务的任务积压情况,如任务积压较多或任务积压较少,TPS反映了每个待执行任务的子任务实例被捞取的数量,因此,根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量动态调整后的任务优先级权重更符合任务调度需求,也使得后续资源分配更为合理。
在本发明一种可选实施方式中,任务捞取模块进一步适于:确定任务初始权重;根据任务初始权重、待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值;根据任务初始权重及权重变化值计算任务优先级权重。
任务初始权重是根据任务优先级而设置的,其中,优先级可以体现为任务重要程度,不同的任务,优先级不同,所对应的任务初始权重也不同,需要说明的是,任务集包含的所有待执行任务对应的任务初始权重总和等于1。
举例说明,任务集A包含的待执行任务为批处理任务A、批处理任务B,那么批处理任务A、批处理任务B对应的任务初始权重总和等于1,例如,批处理任务A对应的任务初始权重为0.7,批处理任务B对应的任务初始权重为0.3;若任务集A还包含其他待执行任务,如,批处理任务C、批处理任务D,那么批处理任务A、批处理任务B、批处理任务C、批处理任务D对应的任务初始权重总和等于1,这里仅是举例说明,不具有任何限定作用。
权重变化值可以是增量或者减量或者0,权重变化值反映了权重变化情况,其中,任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
在该可选实施方式中,可以根据如下公式(2)计算权重变化值:
其中,Δi为任务集中第i个待执行任务的优先级对应的权重变化值,βi为任务集中第i个待执行任务的优先级对应的任务初始权重,Ni为第i个待执行任务尚未被捞取的子任务实例的数量,Si为第i个待执行任务对应的TPS的数值,i=1,2,3…n,其中,
在计算得到权重变化值之后,可以根据如下公式(3)计算第i个待执行任务的任务优先级权重:
任务优先级权重=任务初始权重+权重变化值=βi+Δi 公式(3)
由此可见,待执行任务尚未被捞取的子任务实例的数量,会显著改变对应的任务捞取可能性βi+Δi:若待执行任务无未被捞取的子任务实例即Ni=0,则捞取的可能性βi+Δi=0;若待执行任务尚未被捞取的子任务实例的数量等于预设的TPS即Ni=Si,则捞取的可能性为βi+Δi=βi,和任务初始权重一致;若待执行任务尚未被捞取的子任务实例的数量非常大即Ni→+∞,则捞取的可能性为βi+Δi=2βi,相比于任务初始权重进行了翻倍,对于这种情况,很可能出现调整后的任务优先级权重大于或等于1的情况,此时说明,该待执行任务的子任务实例存在积压现象,需要捞取该待执行的子任务实例,对于调整后的任务优先级权重大于1的情况,可以将该待执行任务对应的任务优先级权重置为1;而任务集中其它待执行任务的任务优先级权重置为0,优先捞取该待执行任务。在本次捞取结束后,如果捞取的子任务实例足够多,尚未被捞取的子任务实例变少,再次动态计算任务优先级权重后,调整后的任务优先级权重可能不再大于1,此时,可以继续捞取其它待执行任务的子任务实例。通过引入权重变化值,为任务调度加入了反馈因子,实现了真正的动态调度。
通过将待执行任务尚未被捞取的子任务实例的数量和预设的TPS实时进行比较,动态调整了每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题。其中,图2中优先级调度即为动态调整任务优先级权重的过程。
在本发明一种可选实施方式中,针对每个待执行任务,设置了单位时间内子任务实例最大捞取数量(TPS),设置TPS的一个目的是为了限制捞取子任务实例的数量,避免某一待执行任务占用过多的资源,而导致其它待执行任务可用资源太少,造成任务积压的现象。
因此,任务捞取模块可以在捞取子任务实例前,先判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量,根据判断结果确定捞取的子任务实例的数量,进而确定待捞取的子任务实例集:
若任务最大可用配额数量小于或等于单位时间内子任务实例最大捞取数量,则根据任务最大可用配额数量确定待捞取的子任务实例集;若任务最大可用配额数量大于单位时间内子任务实例最大捞取数量,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。其中,图2中TPS控制即为判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量,根据判断结果确定捞取的子任务实例的数量的过程。
在本发明一种可选实施方式中,任务捞取模块进一步适于:根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计待执行任务尚未被捞取的子任务实例的数量。
具体地,在根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量捞取子任务实例后,待执行任务尚未被捞取的子任务实例的数量会发生相应的变化,本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量=上一次待执行任务尚未被捞取的子任务实例的数量-任务最大可用配额数量或单位时间内子任务实例最大捞取数量,举例说明,上一次待执行任务尚未被捞取的子任务实例的数量为90,本次捞取按照任务最大可用配额数量进行的捞取,其中,任务最大可用配额数量为3,那么本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量为87,本次统计的执行任务尚未被捞取的子任务实例的数量可用于动态调整任务优先级权重;
再举例说明,上一次待执行任务尚未被捞取的子任务实例的数量为90,本次捞取按照单位时间内子任务实例最大捞取数量进行的捞取,其中,单位时间内子任务实例最大捞取数量为5,那么本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量为85,本次统计的执行任务尚未被捞取的子任务实例的数量可用于动态调整任务优先级权重。
通过实时统计待执行任务尚未被捞取的子任务实例的数量,可以精确地调整任务优先级权重,从而根据调整后的任务优先级权重计算任务最大可用配额数量,从而捞取数量合适的子任务实例,使得资源分配更为合理。
在本发明一种可选实施方式中,任务捞取模块进一步适于:判断任务最大可用配额数量是否大于0;若是,则进一步判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;若否,则结束捞取待执行任务的子任务实例。
具体地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之后,还需要进一步判断任务最大可用配额数量是否大于0,以确定待执行任务的子任务实例是否捞取完,若任务最大可用配额数量大于0,表明还有尚未被捞取的子任务实例,需要再次进行捞取;若任务最大可用配额数量等于0,表明待执行任务的子任务实例已全部被捞取完,可以结束捞取待执行任务的子任务实例。
在本发明一种可选实施方式中,任务捞取模块进一步适于:判断任务集可用配额数量是否大于0;若是,则依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量;若否,则结束捞取子任务实例。
具体地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之前,可以先判断任务集可用配额数量是否大于0,以确定任务集内待执行任务的子任务实例是否已经全部捞取完,若任务集可用配额数量,表明还有尚未被捞取的子任务实例,需要再次进行捞取;若任务集可用配额数量等于0,表明任务集内所有待执行任务的子任务实例已全部被捞取完,可以结束捞取子任务实例。其中,图2中资源检查即为判断任务集可用配额数量是否大于0的过程。
下面结合具体实施例对分布式任务调度***进行详细描述:
任务分发模块110将任务集包含的待执行任务:待执行任务A、待执行任务B、待执行任务C分发给任务捞取模块,其中,待执行任务A对应的子任务实例数量为25,待执行任务B对应的子任务实例数量为15,待执行任务C对应的子任务实例数量为10,初始时,任务集可用配额数量为50。待执行任务A对应的任务初始权重为0.4,对应的TPS为8;待执行任务B对应的任务初始权重为0.3,对应的TPS为5;待执行任务C对应的任务初始权重为0.3,对应的TPS为6。
针对每一个待执行任务,在每一次捞取时,需要先判断任务集可用配额数量是否大于0,在判断出任务集可用配额数量大于0的情况下,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,其中,待处理任务A对应的任务最大可用配额数量=50*0.4=20,待处理任务B对应的任务最大可用配额数量=50*0.3=15,待处理任务C对应的任务最大可用配额数量=50*0.3=15。在判断待处理任务A、待处理任务B、待处理任务C对应的任务最大可用配额数量都大于0的情况下,将待处理任务A对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:8捞取待处理任务A的子任务实例;以及将待处理任务B对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:5捞取待处理任务B的子任务实例;将待处理任务C对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:6捞取待处理任务C的子任务实例;将捞取的子任务实例分发给任务执行模块。
统计待处理任务A、待处理任务B、待处理任务C尚未被捞取的子任务实例的数量,分别为17、10、4,任务集可用配额数量=50-19=31。
根据待处理任务A尚未被捞取的子任务实例的数量:17,任务初始权重:0.4,TPS:8,动态调整后的任务优先级权重=0.4+0.144=0.544;根据待处理任务B尚未被捞取的子任务实例的数量:10,任务初始权重:0.3,TPS:5,动态调整后的任务优先级权重=0.3+0.1=0.4;根据待处理任务C尚未被捞取的子任务实例的数量:4,任务初始权重:0.3,TPS:6,动态调整后的任务优先级权重=0.3-0.06=0.24
根据变化后的任务集可用配额数量及调整后的任务优先级权重再次计算任务最大可用配额数量,后续执行过程与上面介绍过程类似,这里不再详细赘述。
根据本发明上述实施例提供的***,通过计算权重变化值,实现了动态调整了每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题。另外,通过引入权重变化值,为任务调度加入了反馈因子,实现了真正的动态调度,还能够实现优先处理高积压的任务,解决了调度不能感受任务负载压力,可能会造成任务积压的问题。同时也解决了在任务调度时,各待执行任务之间的资源隔离问题,实现了待执行任务的捞取彼此独立,但又可相互感知的效果;以及解决了不同***负载下的任务流控问题,实现了低负载均可满速执行,高负载不同优先级均有概率捞取的效果;通过实时比较任务最大可用配额数量与单位时间内子任务实例最大捞取数量,可以合理控制捞取的子任务实例的数量,使得资源分配更为合理。
图3示出了根据本发明一个实施例的分布式任务调度方法的流程示意图。如图3所示,该方法包括以下步骤:
步骤S300,任务分发模块将任务集包含的至少一个待执行任务分发给多个任务捞取模块。
任务集是任务的集合,是按照任务维度将任务进行划分,例如,按照业务进行划分,举例说明,可以将相应的门店任务划分为一个任务集,将相应的审理任务划分为一个任务集,将相应的人员管理任务划分为一个任务集。如图2所示,任务集A包含以下任务:批处理任务A、批处理任务B、批处理任务C;任务集B包含以下任务:通用任务A、通用任务B、通用任务C;任务集C包含以下任务:流程任务A、流程任务B、流程任务C,这里仅是举例说明,不具有任何限定作用。
在本实施例中,按照任务维度将任务进行了划分,任务集可能包含多个任务,其中,每个任务都对应有相应的任务执行时间,对于一些任务而言,并未到达该任务执行时间,而对于另一些任务而言,到达该任务执行时间,这里,将到达任务执行时间,需要执行的任务称为待执行任务。任务分发模块将任务集包含的至少一个待执行任务分发给多个任务捞取模块。
步骤S301,任务捞取模块针对每一个待执行任务,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整。
在本实施例中,针对每个任务集都设置了任务集可用配额数量,例如,针对任务集A、任务集B、任务集C分别设置了相应的任务集可用配额数量,其中,每个任务集的任务集可用配额数量可能并不相同。
在初始时(捞取子任务实例之前),任务集可用配额数量为任务集最大配额数量,任务集最大配额数量是根据任务集中待执行任务的子任务实例数量而设定的,例如,任务集A对应的任务集最大配额数量为200、任务集B对应的任务集最大配额数量为150、任务集C对应的任务集最大配额数量为100,随着待执行任务的子任务实例的不断捞取,任务集可用配额数量在不断地发生着变化,任务集可用配额数量根据捞取的子任务实例的数量进行调整,例如,将已捞取的子任务实例的数量记为任务集已有配额数量,那么任务集可用配额数量=任务集最大配额数量-任务集已有配额数量。
为了能够很好地调度任务,使得资源能够合理分配,针对任务集里的每个待执行任务,都对应设置有相应的优先级,这里的优先级限定了每个任务在该任务所属的任务集获取配额数量的概率,以任务优先级权重表示。
每个待执行任务都包含有至少一个子任务,任务最大可用配额数量指任务集中各待执行任务可以捞取的子任务实例的最大数量。
具体地,任务捞取模块接收任务分发模块分发的待执行任务,针对每一个待执行任务,任务捞取模块可以依据该待执行任务所属的任务集对应的任务集可用配额数量与该待执行任务对应的任务优先级权重计算任务最大可用配额数量,更具体地,可以按照如下公式(4)计算任务最大可用配额数量:
任务最大可用配额数量=任务集可用配额数量*任务优先级权重公式(4)
在计算得到任务最大可用配额数量后,可以确定待捞取的子任务实例集,例如,可以按照时间顺序确定待捞取的子任务实例集,也可以随机确定待捞取的子任务实例集,这里不做具体限定。
在确定了待捞取的子任务实例集之后,可以捞取出需要执行的子任务实例,其中,任务实例是业务上的一个操作产生的一个需要执行的东西,产生时一部分信息读取自任务体。
在本实施例中,任务捞取模块负责捞取子任务实例,但并不执行相应的子任务实例,因此,任务捞取模块在捞取相应的子任务实例后,需要将捞取的子任务实例分发给任务执行模块,例如,任务捞取模块将捞取的子任务实例:白名单更新、门店后台修改等子任务实例分发给任务执行模块,由任务执行模块执行所获取到的子任务实例对应的子任务。
在每次捞取后,待执行任务尚未被捞取的子任务实例的数量会随之发生变化,任务捞取模块可以根据待执行任务尚未被捞取的子任务实例的数量对待执行任务对应的任务优先级权重进行动态调整,通过动态调整任务优先级权重,动态调整了每一个待执行任务的捞取概率,从而合理分配了任务捞取资源,避免任务积压。其中,捞取的子任务实例的数量影响着待执行任务尚未被捞取的子任务实例的数量。
步骤S302,任务执行模块执行所获取到的子任务实例对应的子任务。
任务执行模块在获取到任务捞取模块分发的子任务实例后,会加载子任务执行所需的执行信息,并唤起真正的任务执行器,完成对相关的子任务的处理操作。
若在执行所获取到的子任务实例对应的子任务过程中产生了异常,任务执行模块会记录相应的异常信息,以便于根据异常信息进行排查。
根据本发明上述实施例提供的方法,通过动态调整任务优先级权重,可以动态调整每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题,克服了任务实例积压问题。
图4示出了根据本发明另一个实施例的分布式任务调度方法的流程示意图。如图4所示,该方法包括以下步骤:
步骤S400,任务分发模块将任务集包含的至少一个待执行任务分发给多个任务捞取模块。
具体地,任务分发模块查询数据库,从数据库读取所有任务集,确定出各个任务集中所有待执行任务(又可称为激活任务,指到达任务执行时间的任务)例如,对于任务集A确定批处理任务A、批处理任务B为待执行任务;对于任务集B确定通用任务A为待执行任务;对于任务集C确定流程任务A为待执行任务,再次查询数据库确定待执行任务的任务体,随后任务分发模块便按照任务维度,将任务集包含的至少一个待执行任务分发给多个任务捞取模块,具体地,将至少一个待执行任务的任务体分发给多个任务捞取模块,例如,将批处理任务A、批处理任务B、通用任务A、流程任务A对应的任务体分发给任务捞取模块。其中,任务体是任务的一个定义、模板等。图2仅是示意性说明,通常情况下,任务集里包含多个待执行任务。
步骤S401,任务捞取模块针对每一个待执行任务,判断任务集可用配额数量是否大于0,若是,则执行步骤S402;若否,则执行步骤S412。
具体地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之前,可以先判断任务集可用配额数量是否大于0,以确定任务集内待执行任务的子任务实例是否已经全部捞取完,若任务集可用配额数量,表明还有尚未被捞取的子任务实例,需要再次进行捞取;若任务集可用配额数量等于0,表明任务集内所有待执行任务的子任务实例已全部被捞取完,可以结束捞取子任务实例。
步骤S402,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量。
该步骤与图3所示实施例中的步骤S301中相应步骤类似,这里不再赘述。
步骤S403,判断任务最大可用配额数量是否大于0,若是,则执行步骤S404;若否,则执行步骤S413。
具体地,在依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量之后,还需要进一步判断任务最大可用配额数量是否大于0,以确定待执行任务的子任务实例是否捞取完,若任务最大可用配额数量大于0,表明还有尚未被捞取的子任务实例,需要再次进行捞取;若任务最大可用配额数量等于0,表明待执行任务的子任务实例已全部被捞取完,可以结束捞取待执行任务的子任务实例。
步骤S404,判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量,若是,则执行步骤S405;若否,则执行步骤S406。
针对每个待执行任务,设置了单位时间内子任务实例最大捞取数量(TPS),设置TPS的一个目的是为了限制捞取子任务实例的数量,避免某一待执行任务占用过多的资源,而导致其它待执行任务可用资源太少,造成任务积压的现象。
任务捞取模块在捞取子任务实例前,需要先判断任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量,根据判断结果确定捞取的子任务实例的数量,进而确定待捞取的子任务实例集,其中,判断结果影响着捞取子任务实例的数量。
步骤S405,根据任务最大可用配额数量确定待捞取的子任务实例集。
若任务最大可用配额数量小于或等于单位时间内子任务实例最大捞取数量,则根据任务最大可用配额数量确定待捞取的子任务实例集,例如,任务最大可用配额数量为4,单位时间内子任务实例最大捞取数量为5,任务最大可用配额数量小于单位时间内子任务实例最大捞取数量,则子任务实例捞取数量为4,并确定待捞取的子任务实例集。
步骤S406,根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。
若任务最大可用配额数量大于单位时间内子任务实例最大捞取数量,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集,例如,任务最大可用配额数量为10,单位时间内子任务实例最大捞取数量为5,任务最大可用配额数量大于单位时间内子任务实例最大捞取数量,则子任务实例捞取数量为5,并确定待捞取的子任务实例集。
在确定了待捞取的子任务实例集之后,可以查询数据库捞取出需要执行的子任务实例,具体地,通过查询数据库,捞取任务体下需要执行的子任务实例,其中,任务实例是业务上的一个操作产生的一个需要执行的东西,产生时一部分信息读取自任务体。
步骤S407,将捞取的子任务实例分发给任务执行模块。
在本发明一种可选实施方式中,可以根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对待执行任务对应的任务优先级权重进行动态调整。
在本实施例中,将根据步骤S408-S411动态调整任务优先级权重:
步骤S408,根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计待执行任务尚未被捞取的子任务实例的数量。
具体地,在根据任务最大可用配额数量或单位时间内子任务实例最大捞取数量捞取子任务实例后,待执行任务尚未被捞取的子任务实例的数量会发生相应的变化,本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量=上一次待执行任务尚未被捞取的子任务实例的数量-任务最大可用配额数量或单位时间内子任务实例最大捞取数量,举例说明,上一次待执行任务尚未被捞取的子任务实例的数量为90,本次捞取按照任务最大可用配额数量进行的捞取,其中,任务最大可用配额数量为3,那么本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量为87,本次统计的执行任务尚未被捞取的子任务实例的数量可用于动态调整任务优先级权重;
再举例说明,上一次待执行任务尚未被捞取的子任务实例的数量为90,本次捞取按照单位时间内子任务实例最大捞取数量进行的捞取,其中,单位时间内子任务实例最大捞取数量为5,那么本次捞取结束后,待执行任务尚未被捞取的子任务实例的数量为85,本次统计的执行任务尚未被捞取的子任务实例的数量可用于动态调整任务优先级权重。
步骤S409,确定任务初始权重。
任务初始权重是根据任务优先级而设置的,其中,优先级可以体现为任务重要程度,不同的任务,优先级不同,所对应的任务初始权重也不同,需要说明的是,任务集包含的所有待执行任务对应的任务初始权重总和等于1。
举例说明,任务集A包含的待执行任务为批处理任务A、批处理任务B,那么批处理任务A、批处理任务B对应的任务初始权重总和等于1,例如,批处理任务A对应的任务初始权重为0.7,批处理任务B对应的任务初始权重为0.3;若任务集A还包含其他待执行任务,如,批处理任务C、批处理任务D,那么批处理任务A、批处理任务B、批处理任务C、批处理任务D对应的任务初始权重总和等于1,这里仅是举例说明,不具有任何限定作用。
步骤S410,根据任务初始权重、待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值。
权重变化值可以是增量或者减量或者0,权重变化值反映了权重变化情况,其中,任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
在该可选实施方式中,可以根据如下公式(5)计算权重变化值:
其中,Δi为任务集中第i个待执行任务的优先级对应的权重变化值,βi为任务集中第i个待执行任务的优先级对应的任务初始权重,Ni为第i个待执行任务尚未被捞取的子任务实例的数量,Si为第i个待执行任务对应的TPS的数值,i=1,2,3…n,其中,
步骤S411,根据任务初始权重及权重变化值计算任务优先级权重。
在计算得到权重变化值之后,可以根据如下公式(6)计算第i个待执行任务的任务优先级权重:
任务优先级权重=任务初始权重+权重变化值=βi+Δi 公式(6)
由此可见,待执行任务尚未被捞取的子任务实例的数量,会显著改变对应的任务捞取可能性βi+Δi:若待执行任务无未被捞取的子任务实例即Ni=0,则捞取的可能性βi+Δi=0;若待执行任务尚未被捞取的子任务实例的数量等于预设的TPS即Ni=Si,则捞取的可能性为βi+Δi=βi,和任务初始权重一致;若待执行任务尚未被捞取的子任务实例的数量非常大即Ni→+∞,则捞取的可能性为βi+Δi=2βi,相比于任务初始权重进行了翻倍,对于这种情况,很可能出现调整后的任务优先级权重大于1或等于的情况,此时说明,该待执行任务的子任务实例存在积压现象,需要捞取该待执行的子任务实例,对于调整后的任务优先级权重大于1的情况,可以将该待执行任务对应的任务优先级权重置,而任务集中其它待执行任务的任务优先级权重置0,优先捞取该待执行任务。在本次捞取结束后,如果捞取的子任务实例足够多,尚未被捞取的子任务实例变少,再次动态计算任务优先级权重后,调整后的任务优先级权重可能不再大于1,此时,可以继续捞取其它待执行任务的子任务实例。通过引入权重变化值,为任务调度加入了反馈因子,实现了真正的动态调度。
通过将待执行任务尚未被捞取的子任务实例的数量和预设的TPS实时进行比较,动态调整了每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题。
在本实施例中,并不限定步骤S408-步骤S411与步骤S407的执行顺序,例如,可以同时执行步骤S408-步骤S411与步骤S407,也可以先执行步骤S408-步骤S411,再执行步骤S407,也可以先执行步骤S407,再执行步骤S408-步骤S411。
步骤S412,结束捞取子任务实例。
若任务集可用配额数量等于0,表明任务集内所有待执行任务的子任务实例已全部被捞取完,可以结束捞取子任务实例。
步骤S413,结束捞取待执行任务的子任务实例。
若任务最大可用配额数量等于0,表明待执行任务的子任务实例已全部被捞取完,可以结束捞取待执行任务的子任务实例。
步骤S414,任务执行模块执行所获取到的子任务实例对应的子任务。
任务执行模块在获取到任务捞取模块分发的子任务实例后,会加载子任务执行所需的执行信息,并唤起真正的任务执行器,完成对相关的子任务的处理操作。
若在执行所获取到的子任务实例对应的子任务过程中产生了异常,任务执行模块会记录相应的异常信息,以便于根据异常信息进行排查。
在本实施例中,并不限定步骤S408-步骤S411与步骤S414的执行顺序,例如,可以同时执行步骤S408-步骤S411与步骤S414,也可以先执行步骤S408-步骤S411,再执行步骤S414,也可以先执行步骤S414,再执行步骤S408-步骤S411。
下面结合具体实施例对分布式任务调度***进行详细描述:
任务分发模块将任务集包含的待执行任务:待执行任务A、待执行任务B、待执行任务C分发给任务捞取模块,其中,待执行任务A对应的子任务实例数量为25,待执行任务B对应的子任务实例数量为15,待执行任务C对应的子任务实例数量为10,初始时,任务集可用配额数量为50。待执行任务A对应的任务初始权重为0.4,对应的TPS为8;待执行任务B对应的任务初始权重为0.3,对应的TPS为5;待执行任务C对应的任务初始权重为0.3,对应的TPS为6。
针对每一个待执行任务,在每一次捞取时,需要先判断任务集可用配额数量是否大于0,在判断出任务集可用配额数量大于0的情况下,依据任务集可用配额数量与待执行任务对应的任务优先级权重计算任务最大可用配额数量,其中,待处理任务A对应的任务最大可用配额数量=50*0.4=20,待处理任务B对应的任务最大可用配额数量=50*0.3=15,待处理任务C对应的任务最大可用配额数量=50*0.3=15。在判断待处理任务A、待处理任务B、待处理任务C对应的任务最大可用配额数量都大于0的情况下,将待处理任务A对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:8捞取待处理任务A的子任务实例;以及将待处理任务B对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:5捞取待处理任务B的子任务实例;将待处理任务C对应的任务最大可用配额数量与其对应的TPS进行比较,比较结果为任务最大可用配额数量大于TPS,将按照TPS对应的数值:6捞取待处理任务C的子任务实例;将捞取的子任务实例分发给任务执行模块。
统计待处理任务A、待处理任务B、待处理任务C尚未被捞取的子任务实例的数量,分别为17、10、4,任务集可用配额数量=50-19=31。
根据待处理任务A尚未被捞取的子任务实例的数量:17,任务初始权重:0.4,TPS:8,计算权重动态调整后的任务优先级权重=0.4+0.144=0.544;根据待处理任务B尚未被捞取的子任务实例的数量:10,任务初始权重:0.3,TPS:5,计算权重动态调整后的任务优先级权重=0.3+0.1=0.4;根据待处理任务C尚未被捞取的子任务实例的数量:4,任务初始权重:0.3,TPS:6,计算权重动态调整后的任务优先级权重=0.3-0.06=0.24。
根据变化后的任务集可用配额数量及调整后的任务优先级权重再次计算任务最大可用配额数量,后续执行过程与上面介绍过程类似,这里不再详细赘述。
根据本发明上述实施例提供的方法,通过计算权重变化值,实现了动态调整了每一个待执行任务的捞取概率,从而实现任务低峰期释放资源,任务高峰期加快调度,在保证***整体稳定性的前提下,解决了多任务间的资源分配问题。另外,通过引入权重变化值,为任务调度加入了反馈因子,实现了真正的动态调度,还能够实现优先处理高积压的任务,解决了调度不能感受任务负载压力,可能会造成任务积压的问题。同时也解决了在任务调度时,各待执行任务之间的资源隔离问题,实现了待执行任务的捞取彼此独立,但又可相互感知的效果;以及解决了不同***负载下的任务流控问题,实现了低负载均可满速执行,高负载不同优先级均有概率捞取的效果;通过实时比较任务最大可用配额数量与单位时间内子任务实例最大捞取数量,可以合理控制捞取的子任务实例的数量,使得资源分配更为合理。
本申请实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的分布式任务调度方法。
图5示出了根据本发明一个实施例的计算设备的结构示意图,本发明具体实施例并不对计算设备的具体实现做限定。
如图5所示,该计算设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:
处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
通信接口504,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器502,用于执行程序510,具体可以执行上述分布式任务调度方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。计算设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行上述任意方法实施例中的分布式任务调度方法。程序510中各步骤的具体实现可以参见上述分布式任务调度实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
在此提供的算法和显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的分布式任务调度设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
Claims (18)
1.一种分布式任务调度***,包括:任务分发模块、多个任务捞取模块及多个任务执行模块;
所述任务分发模块,适于将任务集包含的至少一个待执行任务分发给所述多个任务捞取模块;
任务捞取模块,适于针对每一个待执行任务,依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据所述待执行任务尚未被捞取的子任务实例的数量对所述待执行任务对应的任务优先级权重进行动态调整,任务集可用配额数量根据捞取的子任务实例的数量进行调整;
任务执行模块,适于执行所获取到的子任务实例对应的子任务。
2.根据权利要求1所述的***,其中,所述任务捞取模块进一步适于:
根据所述待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对所述待执行任务对应的任务优先级权重进行动态调整。
3.根据权利要求2所述的***,其中,所述任务捞取模块进一步适于:
确定任务初始权重;
根据所述任务初始权重、所述待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值;
根据所述任务初始权重及所述权重变化值计算任务优先级权重。
4.根据权利要求3所述的***,其中,任务集包含的所有待执行任务对应的任务初始权重总和等于1;
任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
5.根据权利要求2-4中任一项所述的***,其中,所述任务捞取模块还适于:
判断所述任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;
若是,则根据所述任务最大可用配额数量确定待捞取的子任务实例集;
若否,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。
6.根据权利要求5所述的***,其中,所述任务捞取模块还适于:
根据所述任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计所述待执行任务尚未被捞取的子任务实例的数量。
7.根据权利要求5所述的***,其中,所述任务捞取模块还适于:判断所述任务最大可用配额数量是否大于0;
若是,则进一步判断所述任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;
若否,则结束捞取待执行任务的子任务实例。
8.根据权利要求1-4中任一项所述的***,其中,所述任务捞取模块还适于:判断任务集可用配额数量是否大于0;
若是,则依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量;
若否,则结束捞取子任务实例。
9.一种分布式任务调度方法,包括:
任务分发模块将任务集包含的至少一个待执行任务分发给多个任务捞取模块;
任务捞取模块针对每一个待执行任务,依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量,进而确定待捞取的子任务实例集;将捞取的子任务实例分发给任务执行模块;以及,根据所述待执行任务尚未被捞取的子任务实例的数量对所述待执行任务对应的任务优先级权重进行动态调整,任务集可用配额数量根据捞取的子任务实例的数量进行调整;
任务执行模块执行所获取到的子任务实例对应的子任务。
10.根据权利要求9所述的方法,其中,所述根据待执行任务尚未被捞取的子任务实例的数量对所述待执行任务对应的任务优先级权重进行动态调整进一步包括:
根据所述待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对所述待执行任务对应的任务优先级权重进行动态调整。
11.根据权利要求10所述的方法,其中,所述根据待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量对所述待执行任务对应的任务优先级权重进行动态调整进一步包括:
确定任务初始权重;
根据所述任务初始权重、所述待执行任务尚未被捞取的子任务实例的数量及单位时间内子任务实例最大捞取数量计算权重变化值;
根据所述任务初始权重及所述权重变化值计算任务优先级权重。
12.根据权利要求11所述的方法,其中,任务集包含的所有待执行任务对应的任务初始权重总和等于1;
任务集包含的所有待执行任务对应的权重变化值总和小于或等于1,且大于或等于-1。
13.根据权利要求10-12中任一项所述的方法,其中,在确定待捞取的子任务实例集之前,所述方法还包括:
判断所述任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量;
所述确定待捞取的子任务实例集进一步包括:
若所述任务最大可用配额数量小于或等于单位时间内子任务实例最大捞取数量,则根据所述任务最大可用配额数量确定待捞取的子任务实例集;
若所述任务最大可用配额数量大于单位时间内子任务实例最大捞取数量,则根据单位时间内子任务实例最大捞取数量确定待捞取的子任务实例集。
14.根据权利要求13所述的方法,其中,所述根据待执行任务尚未被捞取的子任务实例的数量对所述待执行任务对应的任务优先级权重进行动态调整进一步包括:
根据所述任务最大可用配额数量或单位时间内子任务实例最大捞取数量统计所述待执行任务尚未被捞取的子任务实例的数量;
根据所述待执行任务尚未被捞取的子任务实例的数量对所述待执行任务对应的任务优先级权重进行动态调整。
15.根据权利要求13所述的方法,其中,在依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量之后,所述方法还包括:判断所述任务最大可用配额数量是否大于0;
若是,则执行判断所述任务最大可用配额数量是否小于或等于单位时间内子任务实例最大捞取数量的步骤;
若否,则结束捞取待执行任务的子任务实例。
16.根据权利要求9-12中任一项所述的方法,其中,在依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量之前,所述方法还包括:判断任务集可用配额数量是否大于0;
若是,则执行依据任务集可用配额数量与所述待执行任务对应的任务优先级权重计算任务最大可用配额数量的步骤;
若否,则结束捞取子任务实例。
17.一种计算设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求9-16中任一项所述的分布式任务调度方法对应的操作。
18.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求9-16中任一项所述的分布式任务调度方法对应的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811360588.6A CN109542600B (zh) | 2018-11-15 | 2018-11-15 | 分布式任务调度***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811360588.6A CN109542600B (zh) | 2018-11-15 | 2018-11-15 | 分布式任务调度***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109542600A CN109542600A (zh) | 2019-03-29 |
CN109542600B true CN109542600B (zh) | 2020-12-25 |
Family
ID=65847662
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811360588.6A Active CN109542600B (zh) | 2018-11-15 | 2018-11-15 | 分布式任务调度***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109542600B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110263241B (zh) * | 2019-05-06 | 2023-02-28 | 创新先进技术有限公司 | 一种数据批次处理方法及装置 |
CN110795218B (zh) * | 2019-10-11 | 2022-03-01 | 口碑(上海)信息技术有限公司 | 基于单元化的任务调度***及方法 |
CN111176797B (zh) * | 2019-12-18 | 2023-10-27 | 北京百度网讯科技有限公司 | 数据并发的处理方法、装置、电子设备及可读存储介质 |
CN112685158B (zh) * | 2020-12-29 | 2023-08-04 | 杭州海康威视数字技术股份有限公司 | 一种任务调度方法、装置、电子设备及存储介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929718A (zh) * | 2012-09-17 | 2013-02-13 | 江苏九章计算机科技有限公司 | 一种基于任务调度的分布式gpu计算机*** |
CN102945185A (zh) * | 2012-10-24 | 2013-02-27 | 深信服网络科技(深圳)有限公司 | 任务调度方法及装置 |
CN103399626A (zh) * | 2013-07-18 | 2013-11-20 | 国家电网公司 | 面向混合计算环境的功耗感知的并行应用调度***及方法 |
CN104035818A (zh) * | 2013-03-04 | 2014-09-10 | 腾讯科技(深圳)有限公司 | 多任务调度的方法及装置 |
US9256467B1 (en) * | 2014-11-11 | 2016-02-09 | Amazon Technologies, Inc. | System for managing and scheduling containers |
CN106095545A (zh) * | 2016-06-01 | 2016-11-09 | 东软集团股份有限公司 | 任务调度方法及装置 |
CN106293971A (zh) * | 2016-08-15 | 2017-01-04 | 张家林 | 一种分布式任务调度的方法和装置 |
CN106557363A (zh) * | 2016-12-05 | 2017-04-05 | 广发证券股份有限公司 | 一种大数据任务调度的***以及方法 |
CN107273200A (zh) * | 2017-06-22 | 2017-10-20 | 中国科学院计算技术研究所 | 一种针对异构存储的任务调度方法 |
CN107665144A (zh) * | 2016-07-29 | 2018-02-06 | 北京京东尚科信息技术有限公司 | 分布式任务的均衡调度中心、方法、***和装置 |
CN108446180A (zh) * | 2018-03-23 | 2018-08-24 | 南京航空航天大学 | 一种基于数据迁移的数据中心动态任务调度方法 |
CN108762896A (zh) * | 2018-03-26 | 2018-11-06 | 福建星瑞格软件有限公司 | 一种基于Hadoop集群任务调度方法及计算机设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20140098602A (ko) * | 2013-01-31 | 2014-08-08 | 한국전자통신연구원 | 분산 시뮬레이션 수행 시스템 및 방법 |
US9354937B2 (en) * | 2014-07-18 | 2016-05-31 | Thomson Reuters Global Resources | System and method for electronic work prediction and dynamically adjusting server resources |
-
2018
- 2018-11-15 CN CN201811360588.6A patent/CN109542600B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929718A (zh) * | 2012-09-17 | 2013-02-13 | 江苏九章计算机科技有限公司 | 一种基于任务调度的分布式gpu计算机*** |
CN102945185A (zh) * | 2012-10-24 | 2013-02-27 | 深信服网络科技(深圳)有限公司 | 任务调度方法及装置 |
CN104035818A (zh) * | 2013-03-04 | 2014-09-10 | 腾讯科技(深圳)有限公司 | 多任务调度的方法及装置 |
CN103399626A (zh) * | 2013-07-18 | 2013-11-20 | 国家电网公司 | 面向混合计算环境的功耗感知的并行应用调度***及方法 |
US9256467B1 (en) * | 2014-11-11 | 2016-02-09 | Amazon Technologies, Inc. | System for managing and scheduling containers |
CN106095545A (zh) * | 2016-06-01 | 2016-11-09 | 东软集团股份有限公司 | 任务调度方法及装置 |
CN107665144A (zh) * | 2016-07-29 | 2018-02-06 | 北京京东尚科信息技术有限公司 | 分布式任务的均衡调度中心、方法、***和装置 |
CN106293971A (zh) * | 2016-08-15 | 2017-01-04 | 张家林 | 一种分布式任务调度的方法和装置 |
CN106557363A (zh) * | 2016-12-05 | 2017-04-05 | 广发证券股份有限公司 | 一种大数据任务调度的***以及方法 |
CN107273200A (zh) * | 2017-06-22 | 2017-10-20 | 中国科学院计算技术研究所 | 一种针对异构存储的任务调度方法 |
CN108446180A (zh) * | 2018-03-23 | 2018-08-24 | 南京航空航天大学 | 一种基于数据迁移的数据中心动态任务调度方法 |
CN108762896A (zh) * | 2018-03-26 | 2018-11-06 | 福建星瑞格软件有限公司 | 一种基于Hadoop集群任务调度方法及计算机设备 |
Non-Patent Citations (2)
Title |
---|
ARM GPU 的多任务调度设计与实现;丑文龙等;《西安交通大学学报》;20141231;第48卷(第12期);第87-92页 * |
一个三层分布式计算网格任务调度***;张伟哲等;《中国科技论文在线》;20071031;第2卷(第10期);第748-754页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109542600A (zh) | 2019-03-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109542600B (zh) | 分布式任务调度***及方法 | |
CN109582455B (zh) | 多线程任务处理方法、装置及存储介质 | |
US20170255496A1 (en) | Method for scheduling data flow task and apparatus | |
CN106371894B (zh) | 一种配置方法、装置和数据处理服务器 | |
US8510741B2 (en) | Computing the processor desires of jobs in an adaptively parallel scheduling environment | |
US9940162B2 (en) | Realtime optimization of compute infrastructure in a virtualized environment | |
CN110597858A (zh) | 任务数据处理方法、装置、计算机设备和存储介质 | |
US11876731B2 (en) | System and methods for sharing memory subsystem resources among datacenter applications | |
JP2018533122A (ja) | マルチバージョンタスクの効率的なスケジューリング | |
CN109564528B (zh) | 分布式计算中计算资源分配的***和方法 | |
CN113467933B (zh) | 分布式文件***线程池优化方法、***、终端及存储介质 | |
US10606650B2 (en) | Methods and nodes for scheduling data processing | |
US11068317B2 (en) | Information processing system and resource allocation method | |
EP3208709B1 (en) | Batch processing method and device for system invocation commands | |
CN110064198A (zh) | 资源的处理方法及装置、存储介质和电子装置 | |
CN109189581B (zh) | 一种作业调度方法和装置 | |
CN116881003A (zh) | 资源分配方法、装置、服务设备及存储介质 | |
CN112783651B (zh) | 一种云平台vGPU负载均衡调度方法、介质及装置 | |
CN110297693B (zh) | 一种分布式软件任务分配的方法及其*** | |
CN114661415A (zh) | 调度方法及计算机*** | |
KR20180082560A (ko) | 태스크의 시간-기반 스케줄링을 위한 방법 및 장치 | |
CN110750330A (zh) | 一种虚拟机创建方法、***、电子设备及存储介质 | |
CN118034942B (zh) | 集群算力管理方法、装置、设备及存储介质 | |
CN112087472B (zh) | 基于实时水位的批量任务调度方法、装置及平台 | |
CN112416539B (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 |