一种任务告警的方法、装置、介质和设备与流程

文档序号:33464262发布日期:2023-03-15 06:00阅读:86来源:国知局
一种任务告警的方法、装置、介质和设备与流程

1.本技术涉及金融科技技术领域,尤其涉及一种任务告警的方法、装置、介质和设备。


背景技术:

2.跑批系统上对跑批任务进行跑批时,需要监控跑批任务的跑批情况。例如,监控跑批时间,在任务跑批超过跑批时间之后,需要进行告警。
3.跑批系统中的跑批任务是有一个大任务和多个小任务组成的。因此可以设置两个告警时间。一个是以大任务为单位,设置大任务的应跑批时间,在超过这个时间之后,大任务的跑批还没有结束,则进行告警;但是这种方式中,由于大任务的数据量过大,应跑批时间较长,超过应跑批时间之后再进行告警会导致告警产生太慢,无法对故障问题及时解决。另一种方式中,设置小任务的跑批时间,在超过这个时间之后,小任务跑批还没有结束,则进行告警。但是这种方式中,小任务的数量太多,每一个小任务的数据量又不同,设置的应跑批时间并没有那么精准,由此产生的告警太密集,而且很多都是不用进行处理的。
4.基于此,目前亟需一种任务告警的方法、装置、介质和设备,使得在任务跑批时产生的告警更加合理化。


技术实现要素:

5.本技术实施例提供一种方法、装置、产品、介质和设备,使得在任务跑批时产生的告警更加合理化。
6.第一方面,本技术实施例提供一种任务告警的方法,适用于由具有依赖关系的m个子任务组成的总任务,所述m个子任务按照依赖关系划分为n个并行任务组,每个并行任务组中的各子任务可并行执行;所述方法包括:
7.在任一并行任务组中的任一子任务执行过程中,预测所述子任务的预测执行耗时;
8.若所述并行任务组的剩余分配时长不满足各子任务的预测执行耗时,则生成第一告警信息;所述剩余分配时长是根据所述并行任务组的预分配时长与已消耗时长确定的;任一并行任务组的预分配时长是根据所述总任务在历史周期的执行情况确定的;
9.若所述第一告警信息满足告警要求,则触发所述第一告警信息。
10.通过上述方式,从总任务中划分出并行任务组,这是一个大于子任务小于总任务的中间结构,通过判断并行任务组的预测执行耗时,和预先分配时长之间的关系,确定剩余的时长是否可以使得剩余的并行任务组中的任务执行完毕,从而在并行任务组执行完毕之前就可以进行告警,使得告警的产生更加及时,此外,由于并行任务组是一个中间的结构,根据并行任务组的执行情况进行的告警不会像根据子任务执行情况进行的告警那样如此频繁,也不会像根据总任务执行情况进行的告警那样迟延,有效地提高了任务跑批告警的合理性。
11.一种可能的实现方式中,所述m个子任务按照依赖关系划分为n个并行任务组,包括:
12.根据所述m个子任务之间的依赖关系,构建所述总任务的dga有向无环图;所述dga图中的每个节点表征子任务,节点之间的边表征依赖关系;
13.根据所述dga图中各节点的入度和出度,确定各节点的并行度;
14.将并行度相同的节点确定为同一并行任务组。
15.一种可能的实现方式中,任一并行任务组的预分配时长是根据所述总任务在历史周期的执行情况确定的,包括:
16.针对任一并行任务组,确定历史周期中所述并行任务组在每一统计日的运行时长;根据各统计日的运行时长及各统计日的权重,确定所述并行任务组的初始分配时长;其中,统计日的历史性越久,统计日的权重越低;
17.确定所述总任务的时间窗口长度与各并行任务组的初始分配时长之和的差值,得到窗口缓冲时长;
18.按照各并行任务组在最新统计日的运行时长,分配所述窗口缓冲时长,从而得到各并行任务组的预分配时长。
19.一种可能的实现方式中,预测所述子任务的预测执行耗时,包括:
20.确定所述子任务在静态参数下的第一参数值和在动态参数下的第二参数值;所述静态参数是经降维处理后得到的;所述动态参数用于表征子任务在执行时的硬件资源的使用波动情况;
21.将所述第一参数值和所述第二参数值通过预测模型,得到所述子任务的预测执行耗时;所述预测模型是通过调整学习率来进行迭代训练得到的。
22.一种可能的实现方式中,通过如下方式调整学习率,包括:
23.根据历次迭代的变化趋势,确定学习率的变化项;
24.设置随迭代次数的增加而衰减的衰减项以及在满足预设迭代次数后的爆炸因子;
25.根据所述变化项、所述衰减项及所述爆炸因子,调整学习率。
26.一种可能的实现方式中,若所述第一告警信息满足告警要求,则触发所述第一告警信息,包括:
27.确定所述第一告警信息的权重因子;
28.根据所述并行任务组在历史告警中的事件反馈,确定所述第一告警信息的事件因子;
29.根据所述权重因子、事件因子和所述第一告警信息的告警等级,确定所述第一告警信息的告警分值;
30.若所述第一告警信息的告警分值在上一告警期内且高于上一告警的告警分值,则触发所述第一告警信息。
31.一种可能的实现方式中,所述方法还包括:针对所述总任务的任一子结构,确定所述子结构的实际运行时长;若实际运行时长大于所述子结构的预分配时长,则生成第二告警信息;任一子结构为自起始节点开始的分支,其中,起始节点的并行度大于1且起始节点的并行度作为子结构的等级;同一等级的不同子结构中的各节点均不相同;
32.若所述第二告警信息满足所述告警要求,则触发所述第二告警信息。
33.一种可能的实现方式中,所述方法还包括:针对任一子结构,确定所述子结构中任一并行任务组是否发生第三告警信息;
34.若所述第三告警信息满足所述告警要求,则触发所述第三告警信息。
35.一种可能的实现方式中,所述方法还包括:在所述总任务执行完后,确定每个节点在各竖直分支上的执行耗时;根据各竖直分支上的执行耗时,确定每个节点的失衡状况;
36.根据每个节点的失衡状况,得到所述总任务的失衡状况;
37.根据所述总任务的失衡状况,生成第四告警信息;
38.若所述第四告警信息满足所述告警要求,则触发所述第四告警信息。
39.一种可能的实现方式中,根据各竖直分支上的执行耗时,确定每个节点的失衡状况,包括:根据如下公式确定所述每个节点的失衡状况p:
[0040][0041]
其中,abs为求绝对值,pi为该节点的第i个分支所花的时间,单位为分钟。pu是这个节点多个分支的耗时时间的平均值,n为一个总任务中总有n个分支,根据每个节点的失衡状况,得到所述总任务的失衡状况,包括:根据如下公式确定所述述总任务的失衡状况s:
[0042][0043]
其中,pn为第n个竖直度的分数,a=(最大并行度+1-当前节点的并行度),an为第n个a。
[0044]
第二方面,本技术实施例提供一种装置,该装置包括:预测模块,用于在任一并行任务组中的任一子任务执行过程中,预测所述子任务的预测执行耗时;
[0045]
生成模块,用于若所述并行任务组的剩余分配时长不满足各子任务的预测执行耗时,则生成第一告警信息;所述剩余分配时长是根据所述并行任务组的预分配时长与已消耗时长确定的;任一并行任务组的预分配时长是根据所述总任务在历史周期的执行情况确定的;触发模块,用于若所述第一告警信息满足告警要求,则触发所述第一告警信息。
[0046]
第三方面,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,当计算机程序被运行时,执行上述第一方面中任一项方法。
[0047]
第四方面,本技术实施例提供一种计算设备,包括:存储器,用于存储程序指令;处理器,用于调用存储器中存储的程序指令,按照获得的程序执行上述第一方面中任一项设计中的方法。
[0048]
第五方面,本技术实施例提供一种计算机程序产品,当计算机程序产品在处理器上运行时,实现如上述第一方面中任一项设计中的方法。
[0049]
上述第二方面至第五方面的有益效果,具体可参照上述第一方面任一项设计可达到的有益效果,此处不再一一赘述。
附图说明
[0050]
图1示例性示出本技术实施例提供的一种应用场景示意图;
[0051]
图2示例性示出本技术实施例提供的一种任务告警方法的流程示意图;
[0052]
图3示例性示出本技术实施例提供的一种并行任务组划分方法的流程示意图;
[0053]
图4示例性示出本技术实施例提供的一种总任务内部的结构示意图;
[0054]
图5示例性示出本技术实施例提供的一种dga的结构示意图;
[0055]
图6示例性示出本技术实施例提供的一种邻接表的结构示意图;
[0056]
图7示例性示出本技术实施例提供的一种预分配时长的方法流程示意图;
[0057]
图8示例性示出本技术实施例提供的一种触发第一告警信息的方法流程示意图;
[0058]
图9示例性示出本技术实施例提供的一种子结构示意图;
[0059]
图10示例性示出本技术实施例提供的一种触发第四告警信息的方法流程示意图;
[0060]
图11示例性地示出本技术实施例提供的一种任务告警装置示意图。
具体实施方式
[0061]
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
[0062]
图1示例性示出本技术实施例提供的一种应用场景示意图,如图1所示,在跑批系统中定时跑批的有多个总任务,每个总任务中又可以分成多个子任务。以总任务a为例,包括子任务1、子任务2
……
子任务m。例如,在一种银行系统中,统计行各业务条件的短信发送情况为一个总任务,统计其中一个任务线的短信发送情况为一个子任务,多个任务线的短信发送情况为多个子任务。
[0063]
基于图1中的应用场景,为了确保跑批任务不会影响正常的业务线,需要对跑批任务的时间进行严格限制。比如,对于一个凌晨1点开始跑批的总任务a,早上9点上班之前必须跑完,期间共有8个小时的时间。但是为了预留出跑批出现问题时的处理时间,一般将时间的跑批时间设置为总时间的35%,在上述的例子中即为2.8小时,即在2.8小时之后,总任务a还没有跑完,就会产生告警。
[0064]
在这2.8个小时之中,为总任务a中的每一个子任务设置告警阈值时间,比如,为子任务1设置告警阈值时间10分钟,为子任务2设置告警阈值时间15分钟
……
为子任务m设置告警阈值时间8分钟。当子任务1开始运行时,记录其运行时间,如果运行时间超过了10分钟,则开始告警;当子任务2开始运行时,记录其运行时间,如果运行时间超过了15分钟,则开始告警;
……
当子任务m开始运行时,记录其运行时间,如果运行时间超过了8分钟,则开始告警。
[0065]
另一种可能的实现方式中,还可以使用上一周期的运行时间和这一周期的运行时间进行比较,设置告警阈值百分比。比如,当总任务a今天跑批用时超过昨天跑批用时的20%时,进行第一等级的告警,当总任务a今天跑批用时超过昨天跑批用时的30%时,进行第二等级的告警。子任务的告警机制可以参照上述总任务的告警机制,每个子任务运行时间超过上一周期运行时间的百分比可以自由设定。
[0066]
在上述实现方式中,针对总任务设置告警机制,告警产生的时间太慢,这对子任务设置告警机制,告警产生得又太密集。没有办法做到告警的协调与合理。而且,上述两种方
式设置的告警阈值都是固定的,无论是告警阈值时间还是告警阈值百分比,一旦设定好,就没有办法改变。而每个周期跑批的总任务和子任务中的数据量都是不同的,当时的硬件资源也是不同的,告警阈值需要及时变化。
[0067]
基于此,本技术提供了一种任务告警方法,用于解决上述问题。
[0068]
图2示例性示出本技术实施例提供的一种任务告警方法的流程示意图,如图2所示,方法包括:
[0069]
步骤201,在任一并行任务组中的任一子任务执行过程中,预测子任务的预测执行耗时;
[0070]
步骤202,若并行任务组的剩余分配时长不满足各子任务的预测执行耗时,则生成第一告警信息;剩余分配时长是根据并行任务组的预分配时长与已消耗时长确定的;任一并行任务组的预分配时长是根据总任务在历史周期的执行情况确定的;
[0071]
步骤203,若第一告警信息满足告警要求,则触发第一告警信息。
[0072]
通过上述方式,从总任务中划分出并行任务组,这是一个大于子任务小于总任务的中间结构,通过判断并行任务组的预测执行耗时,和预先分配时长之间的关系,确定剩余的时长是否可以使得剩余的并行任务组中的任务执行完毕,从而在并行任务组执行完毕之前就可以进行告警,使得告警的产生更加及时,此外,由于并行任务组是一个中间的结构,根据并行任务组的执行情况进行的告警不会像根据子任务执行情况进行的告警那样如此频繁,也不会像根据总任务执行情况进行的告警那样迟延,有效地提高了任务跑批告警的合理性。
[0073]
上述方法适用于由具有依赖关系的m个子任务组成的总任务,m个子任务按照依赖关系划分为n个并行任务组,每个并行任务组中的各子任务可并行执行。下面详细介绍n个并行任务组是如何划分的。
[0074]
图3示例性示出本技术实施例提供的一种并行任务组划分方法的流程示意图。如图3所示:该方法包括:
[0075]
步骤301,根据m个子任务之间的依赖关系,构建总任务的有向无环图(directed acyclic graph,dga);dga图中的每个节点表征子任务,节点之间的边表征依赖关系。
[0076]
图4示例性示出本技术实施例提供的一种总任务内部的结构示意图,如图4所示,在一个总任务中各个子任务之间拥有依赖关系,需要处理完子任务1才能继续处理子任务2和子任务3,子任务4依赖于子任务2,子任务5依赖于子任务3,子任务6依赖于子任务5,子任务7依赖于子任务4或者子任务6或者子任务1。各个子任务之间的依赖关系可以构成一个dga图,用于存储进数据库中,图5示例性示出本技术实施例提供的一种dga的结构示意图。由于目前最大的总任务中的子任务数量不超过1000个,因此,可以采用邻接表的方式进行存储,邻接表最终可以转换为字节数据。图6示例性示出本技术实施例提供的一种邻接表的结构示意图,用序号1表示子任务1,用序号2来表示子任务2,以此类推。如图6所示,子任务1指向子任务2、子任务3和子任务7;子任务2指向子任务4;子任务3指向子任务5;子任务4指向子任务7;子任务5指向子任务6;子任务6指向子任务7。
[0077]
以上指向关系是通过设置指针的方式设置的。为了方便,邻接表的节点之间,采用双向连接的方式,也就是说,设置前置指针和后置指针,使其节点在迭代的过程中可以前后移动。在设置dga的数据格式时,包括前置指针,节点的名称。当前节点指向其他节点的单向
链表指针和后置指针。
[0078]
步骤302,根据dga图中各节点的入度和出度,确定各节点的并行度。
[0079]
出度是指以本点为起始点以其他点为终点的线条的数量;入度是指以本点为终点,其他点为起始点的线条的数量。入度为0的节点即为起始点,此时所有的子任务都可以并发执行,设为并行度1。出度为0的节点为本分支的终点,到终点之后,此分支不继续迭代。如图5中,迭代到了节点7,其出度为0,则迭代终止。下面具体介绍并行度计算的步骤:
[0080]
步骤一:初始化一个map。将所有的节点作为key,所有的value设置为0,于是得到map1{1:0,2:0,3:0,4:0,5:0,6:0,7:0}。
[0081]
步骤二:入度统计。根据图5中的dga和图6的邻接表,开始遍历每个节点的单向链表指针:
[0082]
节点1的单项链表指针指向节点2、节点3和节点7,节点2、节点3和节点7的入度均加1,此时,map1{1:0,2:1,3:1,4:0,5:0,6:0,7:1};
[0083]
节点2的单项链表指针指向节点4,节点4的入度加1,此时,map1{1:0,2:1,3:1,4:1,5:0,6:0,7:1};
[0084]
节点3的单项链表指针指向节点5;节点5的入度加1,此时,map1{1:0,2:1,3:1,4:1,5:1,6:0,7:1};
[0085]
节点4的单项链表指针指向节点7;节点7的入度加1,此时,map1{1:0,2:1,3:1,4:1,5:1,6:0,7:2};
[0086]
节点5的单项链表指针指向节点6;节点6的入度加1,此时,map1{1:0,2:1,3:1,4:1,5:1,6:1,7:2};
[0087]
节点6的单项链表指针指向节点7;节点7的入度加1,此时,map1{1:0,2:1,3:1,4:1,5:1,6:1,7:3};
[0088]
节点7没有指向下一个节点的单项链表指针。
[0089]
最终得到的入度统计结构为map{1:0,2:1,3:1,4:1,5:1,6:1,7:3},由此可以得到入度为0的节点为节点1。那么节点1即为起始节点。
[0090]
步骤三:构建一个数组a将起始节点存储起来。在其他的示例中,起始节点会出现多个的情况,本示例为了便于说明,dga的结构较为简单,因此数组a中仅有一个节点a作为起始节点。
[0091]
步骤四:并行度统计。构建一个map2,用于存储并行度。起始节点的并行度为1,于是得到map2{1:1,2:0,3:0,4:0,5:0,6:0,7:0};
[0092]
遍历数组a中的起始节点的指针,也就是节点1的指针,此时点1指向节点2、节点3和节点7,则节点2的并行度等于在节点1的并行度基础上加1,节点3的并行度等于节点1的并行度基础上加1,节点7的并行度等于节点1的并行度基础上加1,之后节点1结束迭代,从数组a中去掉,将节点2和节点3放到数组中。此时map2{1:1,2:1,3:1,4:0,5:0,6:0,7:1}。
[0093]
继续遍历数组a,此时遍历节点2和节点3的指针,节点2的指针指向节点4,那么节点4的并行度等于在节点2的并行度基础上加1;节点3的指针指向节点5,那么节点5的并行度等于在节点3的并行度基础上加1,之后节点2和节点3结束迭代,从数组a中去掉,将节点4和节点5放到数组中。此时map2{1:1,2:1,3:1,4:2,5:2,6:0,7:1}。
[0094]
以此类推,当一个节点中有多个点指向时,选择最大的并行度,最终得到的map2
{1:1,2:2,3:2,4:3,5:3,6:4,7:5}
[0095]
步骤303,将并行度相同的节点确定为同一并行任务组。得到:
[0096]
并行度1:节点1(并行任务组1);
[0097]
并行度2:节点2,节点3(并行任务组2);
[0098]
并行度3:节点4,节点5(并行任务组3);
[0099]
并行度4:节点6(并行任务组4);
[0100]
并行度5:节点7(并行任务组5)。
[0101]
至此,并行度的划分完成。为了使后续的步骤论述更加清楚,引入子结构的概念。子结构为自起始节点开始的分支,其中,起始节点的并行度大于1且起始节点的并行度作为子结构的等级;同一等级的不同子结构中的各节点均不相同。
[0102]
如图9所示,子任务1的并行度为1,不能作为子结构的起始节点,从子任务2和子任务7开始,并行度不为1,可以作为子结构的起始节点。按照上述规则,可以获得两个如图2所示的子结构,左侧的子结构中包括子任务2、子任务3、子任务4、子任务5、子任务6,记为子结构2-1(2表示起始节点的并行度,1表示相同等级下子结构的序号为1);右侧的子结构中,包括子任务7、子任务8、子任务9、子任务10,记为子结构2-2。
[0103]
子结构的耗时时间为:本子结构起始节点的子任务开始执行的时间到本子结构最后一个子任务执行完的时间。以子结构2-1为例,子任务2 3点10分开始执行,最后一个子任务6在3点50分结束,则子结构2-1的运行耗时时间为40分种。
[0104]
此外,子结构也拥有并行度,其并行度计算方式和子任务的并行度计算一样,称为子结构的并行度,在此不再赘述。
[0105]
在上述步骤201中,通过如下步骤预测子任务的预测执行耗时:
[0106]
步骤一:确定子任务在静态参数下的第一参数值和在动态参数下的第二参数值;静态参数是经降维处理后得到的;动态参数用于表征子任务在执行时的硬件资源的使用波动情况。
[0107]
步骤二:将第一参数值和第二参数值通过预测模型,得到子任务的预测执行耗时;预测模型是通过调整学习率来进行迭代训练得到的。
[0108]
下面将详细介绍静态参数下第一参数的获取过程:第一参数主要包括三个值:(1)主机指标的资源,如cpu总核数量,cpu平均负载,平均io_util使用率。(2)子任务处理的数据量,以g为单位,为当前任务处理的数据总量。(3)上游信号的到达时间,代表着数据的到达时间(时间戳,单位为秒),没有上游信号时,此值为0,比如用当前的时间戳减去跑批开始的时间,比如凌晨2点10分启动了批次,2点10分30秒上游信号到量,则此时的值为30。
[0109]
对于(1)主机指标的资源,由于此时的主机指标涉及多个参数,但实际上并不是相互独立的,可能会互相影响,而数据量也会造成主机指标的值的波动,所以为了使得各个参数有更高的独立性,需要对指标进行降维。
[0110]
以总任务a为例子,准备90份数据,那么这90份数据就是过去90天里面,每天的机器状态和总任务a处理的数据量及最后总任务a运行消耗的时间。
[0111]
其中cpu核数1为第1天,整个集群cpu的核数的和,比如有10台机器,每台机器是4核的,那么此时的cpu核数为40。
[0112]
而cpu平均负载1则是这40个核的平均负载的。
[0113]
数据量1则是第一天,总任务a处理的数据量,单位是g。
[0114]
x=(
[0115]
(cpu核数1,cpu核数2...cpu核数n),
[0116]
(cpu平均负载1,cpu平均负载2...cpu负载n),
[0117]
(io_util 1,io_util 2,..io_util n),
[0118]
(数据量1,数据量2...,数据量n),
[0119]
(到达时间1,到达时间2...到达时间n)
[0120]
)
[0121]
y=(运行时间1,运行时间2

运行时间n)
[0122]
这样的数据,类似于一个m*n矩阵,存储的数据结构为二维数组,其中n为数据的条数,m为数据的维度,此时的m为5。
[0123]
第一步,需要对二维数组去中心化,具体做法是:利用如下公式求每一维数据的均值:
[0124][0125]
将每一维度的每一个数据减去均值,即为xj-uj,这样做的目的是为了去中心化,最后得到一个二维数组b。用python的numpy.mat函数,将二维数组b转化成矩阵a,转化为矩阵是为了方便使用矩阵运算。
[0126]
第二步,利用如下公式求矩阵a的协方差矩阵:
[0127][0128]
其中a
t
为a矩阵的转置,即行列颠倒。根据行乘列法则,m*n矩阵乘以n*m矩阵,最后的结果为m*m的矩阵,即c在本文中,是一个5*5的矩阵。
[0129]
第三步,求协方差矩阵c的特征值和对应的特征向量,此时求特征值和特征向量有两种方法,为svg和eig,两者对于较低量级的计算效率,并无太大的差别,而eig只能对行列相等的矩阵计算,本文采用eig的方法进行计算,最后将特征值核特征向量对应,组成一个字典。
[0130]
第四步,排序字典,按照由大到小的顺序排序、选取前3行组成矩阵d,
[0131]
第五步,将e=d*b,此时的矩阵e,即降维后的矩阵,此时为n*3,n行3列的矩阵。
[0132]
最终的结果,是存储矩阵d,其是一个3行5列的矩阵,用此矩阵乘以5*n列的矩阵,最后的结果都为3*n矩阵,至此,就将5维的参数变成3维的参数。
[0133]
降维之后,就结果代入二维模型算法后,可以预估出一个每一个子任务的完成时间,当子任务组成的并行度的执行时间超过窗口时间时,则进行告警,提醒此时的总任务a可能会出现延迟现象。
[0134]
下面将详细介绍动态参数下的第二参数值的获取过程:动态参数包括两个:(1)描述cpu使用率的波动情况,cpu使用率的sigma值,称为x4,设权重为e;(2)描述io_util的波动情况,io_util的sigma值,称为x5,设权重为f。
[0135]
设置采样周期为每分钟采样一次,比如某天的总任务a总共运行了2个小时,每分
钟采样总任务a所在集群的平均cpu使用率,结果是120个点,然后对这120个数据进行求sigma值。使用如下预测模型:
[0136]
y预测=(a*x1+b*x2+c*x3)*d+(e*x4+f*x5)*g+h
[0137]
其中,参数d为静态参数的权重,g为动态参数的权重,a,b,c为矩阵降维后的三个维度的权重,e是cpu使用率的标准差sigma的权重,f是io_util的sigma值的权重,h为偏置项。y预测为代入(x1,x2,x3,x4,x5)后,预测出来的运行时间。所以,只需要确认好7个权重和偏置项h,就可以确认预测模型。
[0138]
第一步,对模型进行简化,对于偏置项h,用x0*h,此时x0的值是一个常量,为1,这样后续就可以用矩阵进行计算。同时,对于权重的d,g,我们采用迭代的方式进行赋值,赋值范围为:(d=0.05,g=0.95),(d=0.1,g=0.9)

也就是d从0.05开始,每次迭代的步长是0.05,g从0.95开始,每次迭代的步长为负0.05,然后代入公式5.3,就从二阶函数变成一阶函数,简化了计算。如将(d=0.05,g=0.95)代入,则得到简化后的预测模型为:
[0139]
y(预测)=0.05*a*x1+0.05*b*x2+0.05*c*x3+0.95*e*x4+0.95*f*x5+x0*h
[0140]
第二步,确认误差函数和目标函数,以总任务a过去90天的数据为例子。参数确认原则:预测值和实际值的差距最小。预测值和实际值的差值函数(误差函数)e参照如下公式:
[0141][0142]
然后,就需要去确认这6个权重的值。设w=(a,b,c,e,f,h),一个长度为6的向量,设x=(x1,x2,x3,x4,x5,1),降维后的三个参数,cpu使用率sigma值,io_util的sigma值,数值1。对误差函数e求导w,求出来的梯度函数是:
[0143][0144]
为了使得预测值和实际值的值最小,随机生成6个参数的值,如(0.3,0.4,0.6,0.3,0.4,3)这样的值,然后需要沿着梯度(梯度是指函数的增长方向)的负方向前进,所以目标函数为:
[0145]
wnew=wold-学习率*e导
[0146]
导入e导为:
[0147][0148]
其中wnew就是新的(a,b,c,e,f,h)的值,wold就是老的值(上一步的迭代结果),假设刚开始迭代,那么随机胜场的值(0.3,0.4,0.6,0.3,0.4,3)就是wold的值,有了目标函数后,就可以开始迭代。
[0149]
其中,学习率的取值至关重要,如果学习率过大,可能就找不到目标函数的最优解,如果学习率过小,则容易陷入局部最小值。通过如下方式调整学习率:
[0150]
根据历次迭代的变化趋势,确定学习率的变化项;学习率随着迭代次数不断的降低,称为衰减项,但学习率的降低只占据其中的0.3权重。基于变化趋势动态调整学习率,这
个称为变化项,可以加快的迭代效率,让结果更快接近误差函数的局部最小值。设置随迭代次数的增加而衰减的衰减项以及在满足预设迭代次数后的爆炸因子;示例性地,当迭代次数到达250次时,爆炸性的增加学习率,跳出局部最小值,尝试寻找新的局部点。根据所述变化项、所述衰减项及所述爆炸因子,调整学习率。下面介绍如何推导出学习率的公式:
[0151]
设置初始学习率为w为0.1,将w分为两个w1,w2,其中w1=0.7w,w2=0.3w,w1称为变化学习系数,w2称为趋势系数。w2和递减函数相乘,递减函数是先迅速下降,后缓慢下降的函数。示例性地衰减函数可以为:
[0152][0153]
当迭代次数为1000的时候,这个衰减函数接近0。符合早期下降的比较快,越后下降的越慢的原则。此时得到衰减项为w2*衰减函数。
[0154]
对误差函数求导数,误差函数的一次导数记为一次导数,误差函数一次导数的导数记为二次导数。一次导数如果为正的话,就说明变化趋势是递增的,而目标函数是为了让它更小,此时说明迭代在局部最小值附近徘徊,所以此时的学习率应该降低,使之找到局部最小点。而当变化趋势为负时,说明目标函数走在正确的路上,变化学习率应该保持增加,快速到达局部最小点。
[0155]
设d为开关函数,当连续三次及以上一次导数是正时,d为-1,当连续三次及以上迭代目标函数的变化率是负数时,d为+1,其他情况下为0。也就是说,如果一次导数连续5次迭代为负数,第6次为正数,那么1-2次时d为0,3-5次时,d是1,第6次是,d为0。
[0156]
同时记录一次导数的连续迭代次数,设为x1,连续的次数的意思是,如果此时,连续五次迭代,目标函数的导数都是负的,记x1为5,但如果在第六次迭代,目标函数的导数是正的,则设这个值为1。设x1最大为60,也就是到达60后,就不再增加了。
[0157]
此时的一阶变化项为:d*0.01*x1
[0158]
而对于二阶函数,如果其变化趋势是正的,说明此时的一阶导数的变化趋势是增加的,此时需要分四种情况讨论。
[0159]
情况一:二阶导数为正的,一阶导数是正的,说明此时越迭代离局部最小值远得越快,需要减少学习率
[0160]
情况二:二阶导数为正的,一阶导数是负的,说明此时越迭代离局部最小值越来越接近,但是速度变慢,此时需要增加学习率,同时比情况四的要多。
[0161]
情况三:二阶导数为负的,一阶导师是正的,说明此时虽然离开局部最小值,也需要减少学习率,但是此时对比情况一,减少的幅度要小。
[0162]
情况四:二阶导数是负的,一阶导数是负的,说明此时正在靠近局部最小值,但是越靠近,前进的越快,此时需要小幅度增加学习率。
[0163]
设此时的二阶导数的值是p,首先需要对p进行归一化,将其大概映射到[-0.5,0.5]的范围上,做法,设学习率恒为0.5,然后开始迭代,每一步都计算其二阶导数,最后取二阶导数的最大值,最小值,然后用p除以(最大值-最小值),再将结果减去0.5,就大概可以将二阶导数映射为[-0.5,0.5],设这个值为x2。所以根据二阶导数,修改后的变化项为:d*0.01*(x1*(1+x2))
[0164]
爆炸因子,是为了突然增加学习率,使之跳出局部最小值,寻找全局最优解。爆炸
因子的选取,则采用随机爆炸的方式,在100-500中间,选取一个随机数,每当迭代到250次,则爆炸因子启动,跳出局部最小值。
[0165]
最终得到学习率公式为:w1*(1+变化项)+w2*衰减函数+爆炸因子。
[0166]
下面介绍在上述步骤202中,如何根据总任务在历史周期的执行情况确定任一并行任务组的预分配时长。
[0167]
图7示例性示出本技术实施例提供的一种预分配时长的方法示意图,如图7所示,该方法包括:
[0168]
步骤701,针对任一并行任务组,确定历史周期中并行任务组在每一统计日的运行时长。
[0169]
以上述并行任务组1为例,设置历史周期为60天,对于每一个并行任务组,获取在这60天中每一天的运行时长。
[0170]
步骤702,根据各统计日的运行时长及各统计日的权重,确定并行任务组的初始分配时长;其中,统计日的历史性越久,统计日的权重越低。
[0171]
继续以步骤701中的示例为例,将这60天的数据,每4天进行分割,分割成15个时间区域,每一个时间区域按照上采样(取最大值),下采样(取最小值的)的方式采样,这样做的目的是为了排除一些噪音点。如1-4天为上采样,5-8天为下采样,9-13天为上采样等,轮流交替。此时会产生d1,d2,d3,d4,d5

d15这样的15个点,并为这15个点设置统计权重。示例性地,将前7个点的权重可以设置为0.2,将之后的7个点的权重设置为0.3,最后一个点的权重设置为0.5。由此可以得到并行任务组1的初始分配时长为:
[0172]
t1=0.2*(d1+d2+d3+d4+d5+d6+d7)/7+0.3*(d8+d9
[0173]
+d10+d11+d12+d13+d14)/7+0.5*d15
[0174]
步骤703,确定总任务的时间窗口长度与各并行任务组的初始分配时长之和的差值,得到窗口缓冲时长。
[0175]
根据前述的跑批任务的业务要求,每个总任务都有一个最大的运行时间,但是,不能所有的跑批任务都按照最大的运行时间运行,因此,可以根据历史运行时间确定一个总任务的运行时间,作为这个总任务的时间窗口长度。示例性地,可以参照如下公式确定运行时间:
[0176][0177]
其中,x为运行时间,u为一周中这个总任务的平均运行时间;sigma参照如下公式确定:
[0178][0179]
其中,xi为每一天这个总任务的运行时间,x1即为第一天中该总任务的运行时间。
[0180]
在上述步骤701中计算得出每一个并行任务组的初始分配时长,就可以求得所有并行任务组的初始分配时长之和,它如果小于时间窗口长度,则说明在所有的子任务执行完之后,还有时间剩余,为了使是否超时判断得更加准确,需要将这部分剩余的时间再分配
给各个并行任务组。剩余时间即为窗口缓冲时长。
[0181]
步骤704,按照各并行任务组在最新统计日的运行时长,分配窗口缓冲时长,从而得到各并行任务组的预分配时长,具体可以参照如下公式进行:
[0182][0183]
其中,pi是预分配时长,ti是初始分配时长,di 15为最近四天的上采样点,n为这个总任务中并行任务组的个数。
[0184]
在上述步骤203中,若所述第一告警信息满足告警要求,则触发所述第一告警信息,具体包括如图8所示的步骤:
[0185]
步骤801,确定第一告警信息的权重因子;权重因子可以表征第一告警信息在所有告警信息中的权重,第一告警信息的权重因子越大,说明第一告警信息的重要程度越高。
[0186]
步骤802,根据并行任务组在历史告警中的事件反馈,确定第一告警信息的事件因子。比如,告警后,对跑批系统进行了扩容处理,事件因子就增大;告警后没有任何操作,事件因子就减小。
[0187]
可以设置一个事件因子的初始值为w2,并为其设置一个衰减函数:
[0188][0189]
那么事件值为即为
[0190]
其中的w2i,代表有n个事件因子中的i个,每一次事件的触动,都会产生一个事件因子,而且,每一次的触动,都会随着时间而衰减。其中的x,即为w2的创建时间(以天为单位)除以10,比如3月1号,有一个事件因子影响,那么等到了3月20号,也就是过了20天,此时的x为20除以10等于2。
[0191]
一般取根据第三等级的告警排序的事件因子,也就是只取最新的1000个,也就是n最大为1000。最多有1000个事件因子影响着的决策。
[0192]
步骤803,根据权重因子、事件因子和第一告警信息的告警等级,确定第一告警信息的告警分值;
[0193]
不同的告警等级对应着不同的告警分数,比如第一级告警为2分,第二集告警为5分,第三级告警为10分。用alarm表示告警等级的分数,用w1表示权重因子,那么第一告警信息的告警分值power即为:
[0194][0195]
步骤804,若第一告警信息的告警分值在上一告警期内且高于上一告警的告警分值,则触发第一告警信息。
[0196]
这是由于高分数的告警会抑制告警期内的其他告警。比如,10点01分告警分值为3分,在10点01分-10点11分内,告警分值低于3分的就不能被通知,除非这个时候,计算出来的第一告警信息的告警分值大于3分,才会告警。
[0197]
除了上述根据并行度产生第一告警信息之外,还可以为总任务设置其他的告警机
制。
[0198]
一种可能的实现方式中,针对总任务的任一子结构,确定子结构的实际运行时长;若实际运行时长大于子结构的预分配时长,则生成第二告警信息;若第二告警信息满足告警要求,则触发第二告警信息。
[0199]
另一种可能的实现方式中,针对任一子结构,确定子结构中任一并行任务组是否发生第三告警信息;若第三告警信息满足告警要求,则触发第三告警信息。
[0200]
第二告警信息和第三告警信息的触发机制可以参照第一告警信息,在此不再赘述。当第一告警信息,第二告警信息和第三告警信息同时产生或者在一个告警期内产生时,可以设置一个优先级。示例性地,可以设置优先级的顺序为第一告警信息》第二告警信息》第三告警信息。
[0201]
另一种可能的实现方式中,可以参照上述步骤804中第一告警信息的触发机制。为第一告警信息,第二告警信息和第三告警信息分别设置一个告警队列,每个告警信息产生后就往各自的队列中写入。此时,在计算power的公式中,每个告警队列的w1值的和应该为1,示例性地,根据告警的优先级,可以将第一告警信息对应的w1设置为0.5,将第二告警信息对应的w1设置为0.3,将第三告警信息对应的w1设置为0.2。
[0202]
根据最终三个告警信息的告警分值,确定告警分值最高的告警信息触发。
[0203]
并行度是时间上的几何概念,但总任务本身的结构,也可能有问题。因此,引入竖直度这个空间上的概念。
[0204]
从某个并行度级别的起始接点分支开始,每个出度为一个分支,称为此节点的竖直度(出度大于2)。假设分支拥有相同的节点,并且这个节点的出度为0,则去掉这个节点,如图4,子任务1有三个分支,但是这三个分支拥有共同的节点子任务7,所以将子任务7去掉,子任务1就剩下两个分支。起始点的并行度,作为竖直度的级别。
[0205]
对于子任务1来说,竖直意义上,他有两个分支,分支1:子任务2+子任务2,假设花费1个小时;分支2:子任务3+子任务4+子任务6,假设花费2个小时,此时,两个分支相差的时间很大,分支1完成后,还需要等待分支2的完成,可以说明,分支2影响了总体的运行效果,使得整个总任务运行的比较慢,需要产生告警,这种现象定义为dag结构的失衡。
[0206]
因此,在总任务执行完后,根据如图10所示的步骤触发第四告警信息:
[0207]
步骤1001,确定每个节点在各竖直分支上的执行耗时;根据各竖直分支上的执行耗时,确定每个节点的失衡状况。每个节点失衡状况用失衡分数p来表示,并通过如下公式计算失衡分数p:
[0208][0209]
其中,abs为求绝对值,pi为该节点的第i个分支所花的时间,单位为分钟。pu是这个节点多个分支的耗时时间的平均值,n为一个总任务中总共有多少个分支,其中min为取最小值。
[0210]
步骤1002,根据每个节点的失衡状况,得到总任务的失衡状况;总任务的失衡状况用失衡分数s来表示:
[0211][0212]
其中,pn为第n个竖直度的分数,a=(最大并行度+1-当前节点的并行度),an为第n个a。
[0213]
步骤1003,根据总任务的失衡状况,生成第四告警信息;以图4为例子,仅有一个节点子任务1具有分支且为两个,假设分支1运行了10分钟,分支2运行了30分钟,根据公式,p=1,总的失衡值也为1。设定告警阈值,当失衡值大于2时,生成第一等级的第四告警信息,大于4时,进行第二等级的第四告警信息。
[0214]
步骤1004,若第四告警信息满足告警要求,则触发第四告警信息。
[0215]
当总任务运行结束之后,第四告警信息的等级如果满足要求则触发第四告警信息,对总任务中的结构进行评估。
[0216]
基于相同的技术构思,本技术实施例还提供了一种任务告警装置。图11示例性地示出本技术实施例提供的一种任务告警装置示意图,该装置可以执行前述的任务告警方法,如图11所示,该装置包括:
[0217]
预测模块,用于在任一并行任务组中的任一子任务执行过程中,预测所述子任务的预测执行耗时;
[0218]
生成模块,用于若所述并行任务组的剩余分配时长不满足各子任务的预测执行耗时,则生成第一告警信息;所述剩余分配时长是根据所述并行任务组的预分配时长与已消耗时长确定的;任一并行任务组的预分配时长是根据所述总任务在历史周期的执行情况确定的;
[0219]
触发模块,用于若所述第一告警信息满足告警要求,则触发所述第一告警信息。
[0220]
基于相同的技术构思,本发明实施例还提供了一种计算机程序产品,当所述计算机程序产品在处理器上运行时,实现上述任一实施例中的方法。
[0221]
基于相同的技术构思,本发明实施例还提供了一种计算设备,包括:存储器,用于存储程序指令;
[0222]
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行上述任一实施例中的方法。
[0223]
基于相同的技术构思,本发明实施例还提供了一种计算机可读存储介质,当所述计算机程序产品在处理器上运行时,实现上述任一实施例中的方法。
[0224]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
[0225]
本技术是参照根据本技术的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个
机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0226]
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0227]
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0228]
显然,本领域的技术人员可以对本技术进行各种改动和变型而不脱离本技术的精神和范围。这样,倘若本技术的这些修改和变型属于本技术权利要求及其等同技术的范围之内,则本技术也意图包含这些改动和变型在内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1