具体实施方式
为使本说明书的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本说明书的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
以下结合附图,详细说明本说明书中各实施例提供的技术方案。
实施例1
如前文所述,可以将离线任务分为需要在指定时刻之前完成、和不需要在指定时刻之前完成。比如,在实际应用中,服务提供商与客户之间可以有一种承诺,即服务级别协议(service-level agreement,SLA)也称服务等级协议、服务水平协议,该协议可以达成对于服务的质量、可用性、时限等内容,而较为重要的则是时限,也即限定在指定时刻之前完成。在金融领域中,通常有需要每日执行的离线任务,比如结算任务、核查任务、计息任务等,可以将这类任务称为SLA任务,而这些SLA任务往往被要求在指定时刻之前完成,比如每日1点前,每日9点前等。除了SLA任务外,还可以存在不需要在指定时刻之前完成的离线任务,比如统计当月的活跃用户数量的月活跃用户统计任务,可以将这类任务称为普通任务。
在实际应用中,SLA任务和普通任务均需要占用处理资源,但处理资源往往是固定的、有限的,若出于优先保证SLA任务执行完成的目的过多为其分配处理资源,则可能导致普通任务出现长期等待甚至积压,若为SLA任务较为保守的分配处理资源,又可能导致无法保证SLA任务的指定时刻要求。所以就需要提出一种方案,能够较为合理的为离线任务分配处理资源,从而提高离线任务的处理效率。
则本说明书实施例提供一种针对离线任务的处理资源分配方法,可以较为合理的为离线任务分配处理资源,从而提高离线任务的处理效率。该方法的具体流程示意图如图1所示,包括:
步骤102:获取待执行的第一任务集合。
这里,第一任务可以是需要在指定时刻之前完成的离线任务,比如就可以是如前文介绍的SLA任务,当然也可以是其他需要在指定时刻之前完成的离线任务。则第一任务集合中的第一任务就可以是均需要在指定时刻之前完成的离线任务集合,比如,在SLA任务集合中的各SLA任务,可以都是需要在9点之前完成的离线任务。
在实际应用中,第一任务内通常具有一个或多个影响复杂度的任务单元,比如针对结算任务,其中可以包括获取任务单元、聚合任务单元、统计任务单元等。这些任务单元可以通过某些方式执行,而不同的执行方式就可以具有不同的复杂度,例如不同的读取方式、不同的查询方式、不同的存储方式、不同的算法方式等,均可以对应不同的复杂度。
离线任务中的这些任务单元也均可以作为任务节点,在实际中,可以通过对离线任务中叶子节点或非叶子节点进行标注的方式,表明不同离线任务具有的不同属性。比如,通过对叶子节点标注SLA任务标识,则可以表明该离线任务为SLA任务,而通过对叶子节点标注指定时刻的标识,则可以表明该离线任务的指定时刻要求。在实际中,也可以为离线任务预设配置信息,用于表明离线任务的属性,具体就可以在该配置信息中写入SLA任务标识、指定时刻、以及任务状态(未执行、已执行、执行错误)、还可以写入计划的数据量(全网用户、不同地理区域用户)等。如图2所示,为SLA任务的示意图,一个SLA任务可以包括一个或多个任务单元、计划任务数据量D、以及指定时刻。
则在本步骤中,就可以根据离线任务的属性信息,获取到待执行的第一任务集合,比如,可以是均需要在9点之前执行完成的多个SLA任务,从而组成SLA任务集合。
在本步骤中,还可以在获取待执行的第一任务后,通过预存的任务血缘关系模块,根据任务中任务单元之间的依赖关系,生成有向无环图DAG(Directed Acyclic Graph),作为后续如何执行任务的依据。
步骤104:根据第一任务内影响复杂度的任务单元,确定第一任务的复杂度。
在前文已经介绍,第一任务内通常具有一个或多个影响复杂度的任务单元,而为了实现对不同第一任务需要占用的处理资源进行预估,本步骤就可以根据第一任务内影响复杂度的任务单元,确定第一任务的复杂度。实际中可以通过下述两种方式,实现复杂度的确定:
第一种方式:将第一任务与已完成的历史第一任务进行任务单元匹配;若匹配结果满足相似任务条件,则将该历史第一任务的复杂度确定为该第一任务的复杂度。
具体地,在业务种类相对稳定,业务数据量相对稳固的应用场景中,已经执行完成的历史任务的参数通常具有一定甚至很强的参考性和指导意义。例如,若两个离线任务中,影响复杂度的任务单元非常相似,则复杂度也可以近似相同。所以在这种方式中,可以将第一任务与已完成的历史第一任务之间,进行任务单元匹配,而匹配方式则可以是将任务单元的实现代码进行匹配,若代码相同,或相似程度较高,则可以认为近似相同。
所以这里的相似任务条件,就可以包括代码相似度大于90%,还可以包括任务单元的顺序全部相同,等。若匹配结果满足该相似任务条件,则可以将该历史第一任务的复杂度确定为该第一任务的复杂度。而在实际应用中,为了使确定出的复杂度更加准确,可以调高代码相似度,比如代码相似度大于95%。而对于历史第一任务的匹配对象选择,可以是上一周期的同类第一任务,比如今日的计息任务,可以参考昨日的计息任务来确定复杂度。
当然,也可以综合多个同类任务,比如针对计息任务,可以找到最近一周内的7个计息任务,分别进行匹配,将与待执行计息任务最为相似的一个历史计息任务的复杂度,作为该待执行计息任务的复杂度。若出现多个相似度大于95%的历史计息任务,则可以通过取平均值的方式,为待执行计息任务确定复杂度。
第二种方式:基于为不同任务单元预设的不同单元复杂度,获取第一任务内的任务单元对应的单元复杂度;根据任务单元的单元复杂度,确定该第一任务的复杂度。
由于任务单元可以影响任务的复杂度,所以不同的任务单元,也可以对应有不同的复杂度。在实际应用中,若无已完成的历史第一任务作为复杂度的参考依据,则工作人员可以根据以往经验,预先为第一任务内的不同任务单元设置对应的单元复杂度。比如,可以根据已有的服务端的硬件配置(中央处理器性能、内存容量)为不同任务单元预设对应的单元复杂度;又如,可以为不同任务单元创建以数据量为函数变量的单元复杂度确定公式,则根据待执行的第一任务的数据量便可以确定出任务单元的单元复杂度,而数据量可以根据前文介绍的配置信息中的计划数据量,也可以由工作人员在不同时期预设一个相对固定的数据量,等。
在实际应用中,对于已完成的第一任务的复杂度,可以根据每次执行完成后,实际产生的消耗时长以及实际占用的处理资源,并通过预设的方式进行确定。类似地,对于不同的任务单元,也可以将历史任务作为参考依据,将历史任务中的不同任务单元在执行时的实际消耗时长和实际处理资源,通过预设的方式确定单元复杂度。而通过执行多次第一任务后,则可以使第一任务以及不同任务单元对应的复杂度越来越准确。
如图3所示,为确定SLA任务复杂度的示意图,这里第一任务可以以SLA任务为例,可以存在一个SLA任务集合,其中包含多个SLA任务。可以预设一个历史SLA任务与复杂度O的对应关系、以及一个任务单元与复杂度O的对应关系。在这两个对应关系中,不同的历史SLA任务对应不同的O、不同的任务单元也可以对应不同的O。则SLA任务集合中的SLA任务,便可以通过上述两种方式中的至少一种,确定出各自的复杂度O。如图3所示,SLA任务1可以对应O1,SLA任务2则可以对应O2。而在实际应用中,也可以结合上述两种方式,分别确定出SLA任务对应的备选O,并通过平均值的方式,确定最终的O。
步骤104:根据第一任务的复杂度和计划数据量、以及指定时刻,为该第一任务集合创建任务执行序列。
在前文已经介绍,历史第一任务在执行过后,可以产生实际占用的处理资源,实际的消耗时长,还可以通过预设的方式确定出复杂度,并且在执行过程中,还可以有实际的数据量,则本实施例就可以创建并训练出以复杂度和计划数据量作为输入,预计消耗时长和预计处理资源作为输出的预测模型,而模型训练的数据基础,就可以是已完成的历史离线任务的上述各参数。
则在获取到待执行的第一任务集合,并确定出其中的第一任务的复杂度O后,就可以根据第一任务的复杂度O和计划数据量D,通过上述模型确定出第一任务的预计处理资源C和预计消耗时长T。从而就可以为第一任务集合创建任务执行序列,在该任务执行序列中可以包括第一任务的执行顺序、预计处理资源以及预计消耗时长。该序列可以通过(SLA,C,T)表示,具体可以表示为(SLA1,C1,T1),(SLA2,C2,T2)……(SLAn,Cn,Tn)。
由于第一任务集合中的第一任务,需要在指定时刻之前完成,则在为第一任务集合创建任务执行序列时,还需要考虑是否能在指定时刻之前完成。此时就可以以当前时刻为基础,判断执行第一任务集合所需的预计时长Sum(Tn)是否超过指定时刻与当前时刻的间隔,若超过,则表明这个任务执行序列在指定时刻之前完成的几率较低,若不超过,则可以表明任务执行序列在指定时刻之前完成的几率较高。如果超过,则可以通过调低第一任务的预计消耗时长的方式,重新为第一任务确定预计T和预计C,并相应地调整任务执行序列,以使执行第一任务集合所需的预计消耗时长不超过当前时刻与指定时刻的间隔。
在实际应用中,还可以根据历史第一任务在执行过后,实际占用的处理资源,实际的消耗时长,对应的复杂度以及实际的数据量,创建基于复杂度、数据量、处理资源和消耗时长之间的对应关系。也即可以根据多个已完成的历史离线任务各自对应的复杂度、实际任务数据量、实际处理资源、以及实际消耗时长,为离线任务创建复杂度、数据量、处理资源和消耗时长之间的对应关系。而该对应关系可以是线性的,也可以是非线性的。在实际应用中,还可以通过模拟出的测试数据,对该对应关系进行拟合。
则基于上述对应关系,针对第一任务,由于复杂度O和计划的数据量D已知,则可以通过先预估C再利用对应关系得到预计T,或者通过先确定预计T再利用对应关系得到预计C,并根据Sum(Tn)不超过当前时刻与指导时刻的差这一条件,便可以创建出针对第一任务集合的任务执行序列。据此介绍下述创建任务执行序列的方式:
第一种方式:根据第一任务的复杂度和计划数据量,为第一任务确定预计处理资源;基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度、计划数据量、以及确定的预计处理资源,为第一任务确定预计消耗时长;若执行该第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与指定时刻的间隔;为第一任务集合创建任务执行序列。
具体地,以第一任务为SLA任务为例,由于复杂度O和计划数据量D已知,则可以先根据各SLA任务的O和D,为各SLA任务确定预计C。实际中可以参照同类的历史SLA任务实际占用的处理资源,为SLA任务先确定一个预计C。由于预先为离线任务创建了O、D、C、T的对应关系,则在O、D已知,且确定出预计C的情况下,便可以根据该对应关系,确定出预计T。由于还需要尽量确保指定时刻之前完成SLA任务集合,则还需要判断Sum(Tn)是否大于指定时刻Tsla与当前时刻Tnow的差值,若大于,则可以通过调高为SLA任务确定的预计C,从而根据对应关系,调低预计T,直至Sum(Tn)不大于Tsla与Tnow的差值。此后,则可以为SLA集合创建包括SLA任务的执行顺序、预计C和预计T的任务执行序列。
在实际应用中,调高为SLA任务确定的预计C,可以是针对SLA任务集合中的全部,也可以是部分,最终满足指定时刻的要求即可。而在为SLA任务确定预计C和预计T时,为了在执行时不过多占用处理资源,还可以对Sum(Tn)进行额外的要求,比如可以设定Sum(Tn)要占据Tsla与Tnow的差值的90%,从而可以使SLA任务集合既可以在指定时刻之前完成,又不会过多占用处理资源。
第二种方式:根据第一任务的复杂度和计划数据量,为第一任务确定预计消耗时长;若执行第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与所述指定时刻的间隔;基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度、计划数据量、以及确定的预计消耗时长,为第一任务确定预计处理资源;为第一任务集合创建任务执行序列。
具体地,依旧以第一任务为SLA任务为例,由于O和D已知,则可以先根据各SLA任务的O和D,为各SLA任务确定预计T。实际中也可参照同类的历史SLA任务实际占用的处理资源,为SLA任务先确定一个预计T,。由于还需要尽量确保指定时刻之前完成SLA任务集合,则需要判断Sum(Tn)是否大于Tsla与Tnow的差值,若大于,则可以通过调低预计T的方式,直至Sum(Tn)不大于Tsla与Tnow的差值。由于预先为离线任务创建了O、D、C、T的对应关系,据此在O、D已知,且确定出预计T的情况下,便可以根据该对应关系,确定出预计C。此后,则可以为SLA集合创建包括SLA任务的执行顺序、预计C和预计T的任务执行序列。
类似地,在实际应用中,调低为SLA任务确定的预计T,可以是针对SLA任务集合中的全部,也可以是部分,最终满足指定时刻的要求即可。类似地,为了在执行时不占用过多的处理资源,也可以设定Sum(Tn)要占据Tsla与Tnow的差值的90%。
如图4所示,为创建任务执行序列的示意图,SLA任务集合中可以包括SLA任务1、SLA任务2、SLA任务n等,在已知O和D的情况下,根据O、D、C、T之间的对应关系,以及Sum(Tn)≤Tsla-Tnow的前提条件,为SLA任务先确定预计T(或预计C),再根据上述对应关系确定出预计C(或预计T),从而确定出SLA任务的O、D、C、T,进而为SLA任务集合创建出任务执行序列(SLA1,C1,T1),(SLA2,C2,T2)……(SLAn,Cn,Tn),在该任务执行序列中,就可以包括SLA任务的执行顺序、对应的预计C和预计T。
在实际应用中,可能存在多个任务之间可以在同一时间段内并发处理的情况,从而能够节省消耗时长。比如两个任务中的任务单元互不相关、互不干扰等,具体比如针对数据库的写入操作,可能在同一时间段,只能由一个任务执行写入操作,在这种情况下,同一时间段内,只要不存在两个任务均包含数据库写入操作即可。所以为了节省消耗时长,并且能够更加合理的分配处理资源,本步骤还可以有另外一种创建任务执行序列的方式。
第三种方式:基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度和计划数据量、为第一任务确定预计消耗时长和预计处理资源;根据第一任务中的任务单元,确定出可并发的第一任务;将预计消耗时长相同的可并发第一任务进行消耗时长合并,得到第一任务组,该第一任务组内的第一任务具有相同的执行顺序;若执行第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与指定时刻的间隔;为第一任务集合中的第一任务和\或并发第一任务组创建任务执行序列。
具体地,依旧以第一任务为SLA任务为例,由于O和D已知,则可以先根据SLA任务的O和D,利用上述第一种或第二种方式确定SLA任务的预计C和预计T。此后,可以根据SLA任务中的任务单元,确定出可并发的SLA任务,这里就可以利用预设的相关性确定方式,根据SLA任务之间的任务单元,确定SLA任务是否具有相关性,从而可以将非相关的SLA任务确定为可并发执行。
据此,就可以将预计T相同的可并发SLA任务进行消耗时长合并,得到SLA任务组。比如,有多个SLA任务,可以并发执行,且确定出的预计T均为1分钟,此时则可以将这些SLA任务进行合并,生成一个SLA任务组,该SLA任务组内的SLA任务就可以具有相同的执行顺序,而该SLA任务组的预计C就可以是组内SLA任务的预计C的总和,而预计T就可以是1分钟。在对消耗时长进行合并后,便可以与上文类似,判断Sum(Tn)是否大于指定时刻Tsla与当前时刻Tnow的差值,若大于,则可以调低SLA任务的消耗时长,直至Sum(Tn)不大于Tsla与Tnow的差值。
进一步地,这里也可以有两种方式调低SLA任务的消耗时长,第一种可以直接调低SLA任务和\或SLA任务组的预计T,在不改变SLA任务组的情况下,直至Sum(Tn)不大于Tsla与Tnow的差值;第二种则可以调高SLA任务的预计C,再重新确定出各SLA任务的预计T,然后再将可并发、且预计T相同的SLA任务重新组合,组成新的SLA任务组,直至Sum(Tn)不大于Tsla与Tnow的差值。
如图5所示,为另一个创建任务执行序列的示意图。图中SLA任务集合,可以先通过预存的O、D、C、T的对应关系,确定出各SLA任务的O、D、预计C、预计T,此后,可以对可并发执行、且预计T相同的任务进行合并,并结合Sum(Tn)不大于Tsla与Tnow的差值这一前提条件,创建出任务执行序列,在该序列中,单个SLA任务或SLA任务组均可以对应各自的执行顺序,而SLA任务组内的SLA任务就可以同步并发执行。如图5所示,可以包括((SLA11,SLA12……SLA1m),C1,T1),(SLA2,C2,T2),((SLA31,SLA32……SLA3m),C3,T3)……((SLAi1,SLAi2……SLAim),Ci,Ti)……(SLAn,Cn,Tn)等。可见,在SLA任务集合中,部分SLA任务可以具有相同执行顺序而并发执行,但另一部分SLA任务无法并发执行。
步骤108:根据所述任务执行序列为所述第一任务集合分配处理资源,并将剩余的处理资源分配给第二任务集合。
前述步骤已经为第一任务集合创建了任务执行序列,其中包括第一任务的执行顺序、预计处理资源和预计消耗时长,则为了保证第一任务能够在指定时刻之前完成,本步骤就可以在按照创建的任务执行序列依次执行第一任务集合时,根据执行顺序分别对应的预计处理资源,为第一任务分配足够的处理资源。
具体地,根据前述举例,SLA任务集合的任务执行序列可以是图4中的按序依次执行单一SLA任务,也可以是图5中,按序依次执行单一SLA任务或SLA任务组。则本步骤中,就可以将任务执行序列作为资源分配的依据,为执行操作分配处理资源。比如,当开始对任务执行序列中的第一个(组)任务执行时,则可以为这个(组)任务任务分配C1处理资源,当开始对任务执行序列中的第二个(组)任务执行时,则为这个(组)任务分配C2处理资源。
在给第一任务集合优先分配处理资源后,就可以将剩余的处理资源分配给第二任务集合,用于执行第二任务集合中的第二任务,这里,第二任务集合中的第二任务可以不需要在该指定时刻之前完成。在本实施例开始时介绍可以将不需要在指定时刻之前完成称为普通任务。则依据该举例本步骤中就可以将剩余的处理资源分配给普通任务。
如图6所示,为分配处理资源的示意图,图中的虚线可以表示分配的过程,在处理第一组SLA任务时,可以为其分配C1处理资源,用于处理SLA任务组内的SLA任务;当处理到第二个SLA任务时,可以为其分配C2处理资源,用于处理这个SLA任务,等。而剩余的处理资源,就可以分配给普通任务,可见这种分配方式可以看作是动态分配的过程。
在实际应用中,有可能出现分配的预计C无法满足在预计T内将第一任务处理完成的情况,也即出现超时完成。所以为了达到对处理资源分配过程进行监控,尽量保证第一任务能够在指定时刻之前完成的目的。本方法还可以在单个第一任务执行完成后,对剩余时间内能否完成剩余的第一任务进行评估,若评估的结果表明存在无法完成的可能,则可以通过为剩余的第一任务分配更多的处理资源的方式,使剩余的第一任务尽量能够在指定时刻之前完成。
所以在一种实施方式中,本方法还可以包括:当按照创建的任务执行序列依次执行完成单个第一任务后,判断该任务执行序列的剩余部分所需的预计消耗时长是否超过当前时刻与指定时刻的间隔。
具体地,如图4所示,当对任务执行序列开始进行任务处理时,可以先对任务执行序列中第一个SLA任务进行处理,比如可以先为SLA1任务,分配C1处理资源,在处理完成后,实际的消耗时长,很可能与预计T1不同,此时就需要判断指定时刻之前的剩余时间内,是否足够对任务执行序列中剩余的部分进行处理。判断方法就可以是判断任务执行序列的剩余部分所需的预计消耗时长是否超过当前时刻与指定时刻的间隔。若不超过,则表明还有较为充足的时间来处理剩余的SLA任务,若超过,则表明剩余的时间,对于处理剩余的SLA任务较为紧张。
在判断出超过后,也可以再对任务执行序列中的一个或两个进行处理后再次进行判断,比如当执行完SLA1任务后,若判断出任务序列剩余部分所需的预计消耗时长超过了当前时刻与指定时刻的间隔,则可以等到SLA2任务和SLA3任务处理完成后,再判断任务序列剩余部分所需的预计消耗时长是否超过当前时刻与指定时刻的间隔。当然,在实际应用中,也可以当按照创建的任务执行序列依次执行完成两个SLA任务后,再判断任务序列剩余部分所需的预计消耗时长是否超过当前时刻与指定时刻的间隔。
在实际应用中,这里的单个第一任务,也可以指单组第一任务,比如图6中,(SLA11……SLA1m)就可以是单组SLA任务,由于是并发处理且属于任务执行序列中的相同顺序,就可以在按照创建的任务执行序列依次执行完成单组第一任务后,确定任务执行序列剩余部分所需预计消耗时长,并判断是否超过当前时刻与指定时刻的间隔。
而在实际应用中,为了尽量保证SLA任务可以在指定时刻之前完成,可以在判断出任务执行序列剩余部分所需预计消耗时长超过当前时刻与指定时刻的间隔后,便为剩余的SLA任务分配更多的资源,从而更加有力地保证顺序执行完成SLA任务。
所以在一种实施方式中,本方法还可以包括:若超过,则通过调高预计处理资源、或调短预计消耗时长的方式,为该第一任务集合中剩余的第一任务重新创建任务执行序列。
如图7所示,为另一个分配处理资源的示意图,当完成SLA任务组1后,可以判断Sum(Tn)是否小于Tsla-Tnow-Tbuf,n=2,3,4,5……,这里Tbuf可以是指缓冲时长,可以预设为1小时或20分钟,等。在实际应用中,也可以忽略缓冲时长,直接判断Sum(Tn)是否小于Tsla-Tnow。
比如,SLA任务的指定时刻为9点,执行完成SLA任务组1后的当前时刻为8点10分,缓冲时长为20分钟,从预计T2开始的Sum(Tn)为30分钟,则Tsla-Tnow-Tbuf的结果是30分钟,Sum(Tn)未超过该结果。若Sum(Tn)为35分钟,则超过了该结果。此时,就可以通过调高SLA任务的预计C、或调低预计T,从而为SLA任务重新创建包括SLA任务执行顺序、预计C和预计T的任务执行序列,并依旧使执行重新创建的任务执行序列所需的预计消耗时长不超过当前时刻与指定时刻的间隔。比如,使Sum(Tn)低于35分钟,并小于指定时刻(9点)与当前时刻(可以是8点11)的差值。
此后,在对SLA任务进行处理时,就可以按照新的任务执行序列分配处理资源,比如图7所示,可以在不改变任务执行序列中的SLA任务执行顺序的前提下,调低SLA任务的预计T、并调高预计C。在重新创建任务执行序列后,可以从执行SLA2开始,均依次为SLA任务多分配一些处理资源,从而尽量保证SLA任务能够在指定时刻之前完成。
介绍了在时间不充足的情况下,为SLA任务增加处理资源,那么为了能够更加合理的分配处理资源,也可以在判断出Sum(Tn)远小于Tsla-Tnow-Tbuf后,调高SLA任务的预计T、并调低预计C,从而可以从SLA任务中释放出更多的处理资源,用于处理其他任务。比如,Sum(Tn)占Tsla-Tnow-Tbuf的70%以下,可以认为Sum(Tn)远小于Tsla-Tnow-Tbuf,有足够充足的时间去执行完成,此时就可以通过调高SLA任务的预计T、并调低预计C的操作,释放出部分处理资源。
在实际应用中,有可能由于集群出现故障,比如部分节点不工作等情况,导致某个或某组SLA任务的实际消耗时长异常增多,而为了保证SLA任务顺序完成,根据上述处理资源调整的方式,可能会使集群中的大部分处理资源均分配给SLA任务,比如80%的处理资源均需要分配给SLA任务。那么为了尽量保证SLA任务的顺利完成。若出现这种情况,则可以将全部的处理资源均分配给SLA任务,而将普通任务暂停,从而尽最大可能保证SLA任务能够在指定时刻之前完成。
在实际应用中,还可以对多个第一任务集合同时执行该处理资源的分配方法,比如有多个SLA任务集合需要处理,且不同的SLA任务集合可能需要在不同的指定时刻之前完成。此时,就可以对不同SLA任务集合中的SLA任务确定复杂度O,并根据计划的数据量D,为不同SLA任务集合,创建包括SLA任务执行顺序、预计T和预计C的任务执行序列,并使分别执行不同SLA任务集合所需的预计消耗时长不超过当前时刻与各自指定时刻的间隔。当分别按照不同SLA任务集合的任务执行序列依次执行SLA任务时,就可以先为不同SLA任务分配处理资源,并将剩余的处理资源分配给普通任务。另外,还可以根据上述方式,在不同SLA任务集合执行过程中,为不同的SLA任务集合调整分配的处理资源。
在实际应用中,也可以为第二任务集合中的第二任务确定复杂度。比如,可以并根据普通任务计划数据量,为普通任务确定出预计T,这里可以直接根据O和D确定预计T,也可以先根据O和D确定预计C,再基于预存的O、D、C、T的对应关系,确定出预计T。据此,则可以确定出执行普通任务集合所需的预计T,虽然普通任务不需要在指定时刻之前完成,但在实际中,也需要尽快完成,所以就可以判断执行普通任务集合所需的预计T是否过长,比如可以是以24小时为是否过长的判断标准,若所需的预计T超过24小时,则可以通知工作人员,以便可以进行资源分配的优化,或采取其他手段,使普通任务也能尽早完成。
由以上实施例提供的技术方案可见,针对需要在指定时刻之前完成的第一任务集合,可以先确定第一任务的复杂度,再根据第一任务的复杂度、计划数据量、以及该指定时刻,为第一任务集合创建包括执行顺序、预计处理资源和预计消耗时长的任务执行序列,并使执行该任务执行序列所需的预计消耗时长不超过当前时刻与指定时刻的间隔。据此,则可以在按照任务执行序列依次执行第一任务集合时,为第一任务集合分配足够的处理资源,并将剩余的处理资源分配给不需要在指定时刻之前完成的第二任务集合。
由于可以根据任务的复杂度和计划数据量,同时结合指定时刻之前完成这个前提条件,为第一任务预测并为其优先分配需要的处理资源,再将剩余的处理资源分配给不需在指定时刻之前完成的第二任务。从而就可以实现在尽量保证第一任务具有足够处理资源的情况,第二任务也可以有尽量多的处理资源,避免了第一任务过度占用处理资源或处理资源短缺的问题,同时也在一定程度上避免了第二任务处理资源短缺的问题,使处理资源的分配更加合理,进而可以提高这两个任务集合的处理效率。
另外,还可以在执行完成单个第一任务后,根据距离指定时刻的剩余时长,对第一任务的处理资源进行调配,从而使得资源分配更加合理,进一步提高任务的处理效率。
实施例2
基于相同的构思,本说明书实施例2提供了一种针对离线任务的处理资源分配系统,可以较为合理的为离线任务分配处理资源,从而提高离线任务的处理效率,其结构示意图如图8所示,包括:获取单元202、确定单元204、创建单元206、以及分配单元208,其中,
获取单元202,可以获取待执行的第一任务集合,第一任务集合中的第一任务均需要在指定时刻之前完成,第一任务内具有影响复杂度的任务单元以及计划数据量;
确定单元204,可以根据第一任务内影响复杂度的任务单元,确定第一任务的复杂度;
创建单元206,可以根据第一任务的复杂度和计划数据量、以及指定时刻,为第一任务集合创建任务执行序列,任务执行序列包括第一任务集合中第一任务的执行顺序、预计处理资源和预计消耗时长,执行任务执行序列所需的消耗时长不超过当前时刻与指定时刻的间隔;
分配单元208,可以根据任务执行序列为第一任务集合分配处理资源,并将剩余的处理资源分配给第二任务集合,第二任务集合中的第二任务不需要在指定时刻之前完成。
在一种实施方式中,确定单元204,可以
将第一任务,与已完成的历史第一任务进行任务单元匹配;
若匹配结果满足相似任务条件,则将历史第一任务的复杂度确定为第一任务的复杂度。
在一种实施方式中,确定单元204,可以
基于为不同任务单元预设的不同单元复杂度,获取第一任务内的任务单元对应的单元复杂度;
根据任务单元的单元复杂度,确定第一任务的复杂度。
在一种实施方式中,创建单元206,可以
根据第一任务的复杂度和计划数据量,为第一任务确定预计处理资源;
基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度、计划数据量、以及确定的预计处理资源,为第一任务确定预计消耗时长;
若执行第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与指定时刻的间隔;
为第一任务集合创建任务执行序列。
在一种实施方式中,创建单元206,可以
根据第一任务的复杂度和计划数据量,为第一任务确定预计消耗时长;
若执行第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与指定时刻的间隔;
基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度、计划数据量、以及确定的预计消耗时长,为第一任务确定预计处理资源;
为第一任务集合创建任务执行序列。
在一种实施方式中,创建单元206,可以
基于复杂度、数据量、处理资源和消耗时长之间的对应关系,根据第一任务的复杂度和计划数据量、为第一任务确定预计消耗时长和预计处理资源;
根据第一任务中的任务单元,确定出可并发的第一任务;
将预计消耗时长相同的可并发第一任务进行消耗时长合并,得到第一任务组,第一任务组内的第一任务具有相同的执行顺序;
若执行第一任务集合所需的预计消耗时长超过当前时刻与指定时刻的间隔,则调低第一任务的预计消耗时长,直至所需的预计消耗时长不超过当前时刻与指定时刻的间隔;
为第一任务集合中的第一任务和\或第一任务组创建任务执行序列。
在一种实施方式中,创建单元206,还可以
当按照任务执行序列依次执行完成单个第一任务后,判断任务执行序列的剩余部分所需的预计消耗时长,是否超过当前时刻与指定时刻的间隔。
在一种实施方式中,创建单元206,还可以
若超过,则通过调高预计处理资源、或调短预计消耗时长的方式,为第一任务集合中剩余的第一任务重新创建任务执行序列,执行重新创建的任务执行序列所需的预计消耗时长不超过当前时刻与指定时刻的间隔。
由以上实施例提供的系统可见,针对需要在指定时刻之前完成的第一任务集合,可以先确定第一任务的复杂度,再根据第一任务的复杂度、计划数据量、以及该指定时刻,为第一任务集合创建包括执行顺序、预计处理资源和预计消耗时长的任务执行序列,并使执行该任务执行序列所需的预计消耗时长不超过当前时刻与指定时刻的间隔。据此,则可以在按照任务执行序列依次执行第一任务集合时,为第一任务集合分配足够的处理资源,并将剩余的处理资源分配给不需要在指定时刻之前完成的第二任务集合。
由于可以根据任务的复杂度和计划数据量,同时结合指定时刻之前完成这个前提条件,为第一任务预测并为其优先分配需要的处理资源,再将剩余的处理资源分配给不需在指定时刻之前完成的第二任务。从而就可以实现在尽量保证第一任务具有足够处理资源的情况,第二任务也可以有尽量多的处理资源,避免了第一任务过度占用处理资源或处理资源短缺的问题,同时也在一定程度上避免了第二任务处理资源短缺的问题,使处理资源的分配更加合理,进而可以提高这两个任务集合的处理效率。
图9是本说明书的一个电子设备的结构示意图。在硬件层面,电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatilememory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图9仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括内存和非易失性存储器,并向处理器提供指令和数据。
处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成针对离线任务的处理资源分配系统。处理器,执行存储器所存放的程序,并具体用于执行以下操作:
获取待执行的第一任务集合,所述第一任务集合中的第一任务均需要在指定时刻之前完成,所述第一任务内具有影响复杂度的任务单元以及计划数据量;
根据所述第一任务内影响复杂度的任务单元,确定第一任务的复杂度;
根据所述第一任务的复杂度和计划数据量、以及所述指定时刻,为所述第一任务集合创建任务执行序列,所述任务执行序列包括所述第一任务集合中第一任务的执行顺序、预计处理资源和预计消耗时长,执行所述任务执行序列所需的预计消耗时长不超过当前时刻与所述指定时刻的间隔;
根据所述任务执行序列为所述第一任务集合分配处理资源,并将剩余的处理资源分配给第二任务集合,所述第二任务集合中的第二任务不需要在所述指定时刻之前完成。
上述如本说明书图8所示实施例提供的针对离线任务的处理资源分配系统执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(CentralProcessing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific IntegratedCircuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
结合本说明书实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
该电子设备还可执行图8示实施例提供的针对离线任务的处理资源分配系统在图9示实施例的功能,本说明书实施例在此不再赘述。
本说明书实施例还提出了一种计算机可读存储介质,该计算机可读存储介质存储一个或多个程序,该一个或多个程序包括指令,该指令当被包括多个应用程序的电子设备执行时,能够使该电子设备执行图8所示实施例中针对离线任务的处理资源分配系统执行的方法,并具体用于执行:
获取待执行的第一任务集合,所述第一任务集合中的第一任务均需要在指定时刻之前完成,所述第一任务内具有影响复杂度的任务单元以及计划数据量;
根据所述第一任务内影响复杂度的任务单元,确定第一任务的复杂度;
根据所述第一任务的复杂度和计划数据量、以及所述指定时刻,为所述第一任务集合创建任务执行序列,所述任务执行序列包括所述第一任务集合中第一任务的执行顺序、预计处理资源和预计消耗时长,执行所述任务执行序列所需的预计消耗时长不超过当前时刻与所述指定时刻的间隔;
根据所述任务执行序列为所述第一任务集合分配处理资源,并将剩余的处理资源分配给第二任务集合,所述第二任务集合中的第二任务不需要在所述指定时刻之前完成。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本说明书时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本说明书的实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书可以有各种更改和变化。凡在本说明书的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本文件的权利要求范围之内。