本发明涉及故障定位技术领域,具体涉及一种基于情境的运维故障根因定位方法、装置、计算机设备及存储介质。
背景技术:
业务运行过程中会出现各种各样的故障,往往需要有经验的运维人员去阅读大量的系统告警信息,借助领域知识,对故障根因进行分析推断,这一解决方案需要对运维人员有较高的要求,对人力物力消耗较大,同时由于运维人员专业领域知识的限制往往会导致故障根因的定位结果会有一定的偏差。
为此,相关技术人员提出了一种通过序列分析异常的方式来查找故障根因,这种方法主要利用序列分析的方式进行数据异常分析,即利用历史数据训练序列预测模型,如滑动平均模型、lstm序列预测模型等,利用模型预测的值与机器真实的数据指标的差异进行异常检测,当差异超出阈值时,即可认为机器出现故障。该方法主要针对一个特定的机器指标进行异常检测,当有多台机器时,需要训练不同的模型去同时检测,诸多模型会消耗大量的计算力;与此同时,诸多模型也会产生大量的误报,给运维带来大量的人力消耗。此外,序列分析异常技术并未考虑故障的连锁效应,对多机器间的关联关系建模并不充分,不能够检测到异常之间存在的关联,因此无法从全局角度对根因定位做全局分析。
技术实现要素:
为了解决上述技术问题或者至少部分地解决上述技术问题,本发明提供了一种基于情境的运维故障根因定位方法、装置、计算机设备及存储介质。
第一方面,本发明提供一种基于情境的运维故障根因定位方法,包括:
获取本次告警对应的告警信息,所述告警信息包括在业务运行过程中所产生的告警源、告警时间和异常描述信息;
将所述告警信息输入至预先训练的机器学习模型中以获取对应的故障根因;其中,所述机器学习模型根据所述告警信息确定所述故障根因的过程包括:根据所述告警信息,计算本次告警分别与多个历史情境之间的相似度;其中,每一个历史情境中包括在对应历史时间段内历史告警所对应的告警信息;根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境;计算所述情境中每一个告警源的重要度,并根据所述情境中各个告警源的重要度确定本次告警的故障根因。
第二方面,本发明提供一种基于情境的运维故障根因定位装置,包括:
信息获取模块,用于获取本次告警对应的告警信息,所述告警信息包括在业务运行过程中所产生的告警源、告警时间和异常描述信息;
根因确定模块,用于将所述告警信息输入至预先训练的机器学习模型中以获取对应的故障根因;其中,所述机器学习模型根据所述告警信息确定所述故障根因的过程包括:根据所述告警信息,计算本次告警分别与多个历史情境之间的相似度;其中,每一个历史情境中包括在对应历史时间段内历史告警所对应的告警信息;根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境;计算所述情境中每一个告警源的重要度,并根据所述情境中各个告警源的重要度确定本次告警的故障根因。
第三方面,本发明提供一种计算机设备,包括处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
第四方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
本发明提供了一种基于情境的运维故障根因定位方法、装置、计算机设备及存储介质,首先获取本次告警的告警信息,然后将告警信息输入至机器学习模型中,机器学习模型根据告警信息确定本次告警的故障根因。在整个过程中,不需要运维人员过多参与,因此不需要对运维人员有很高的要求,而且不仅省时省力。进一步的,机器学习模型在确定本次告警的故障根因过程中,首先计算本次告警分别与多个历史情境之间的相似度,然后根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境,最后在这个情境中确定故障根因。引发本次告警的故障根因有可能不是本次告警中的告警源,有可能是其他的告警中的告警源,因为一个故障的出现会有连锁反应,会导致一系列的异常,因此可能会引起多次的告警,因此在寻找本次告警的故障根因时并不仅仅在本次告警中寻找,还要在其他告警中寻找,所以这里根据相似度确定一个用于寻找故障根因的情境,在该情境中的告警之间是具有一定关联的,这样最后确定的故障根因的准确度会比较高。可见,本申请考虑了故障的连锁效应,即考虑了多个告警源之间的关联,从全局角度对根因定位做全局分析,提高根因定位的准确性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例中基于情境的运维故障根因定位方法的流程示意图;
图2是本申请实施例中机器学习模型根据所述告警信息确定所述故障根因的流程示意图;
图3是本申请实施例中基于情境的运维故障根因定位装置的结构框图;
图4是本申请实施例中计算机设备的结构框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
第一方面,本申请实施例提供一种基于情境的运维故障根因定位方法,如图1所示,该方法包括:
s100、获取本次告警对应的告警信息,所述告警信息包括在业务运行过程中所产生的告警源、告警时间和异常描述信息;
可理解的是,告警信息是指业务程序在运行过程中产生的异常日志信息,通常包括告警源、告警时间、异常描述信息,当然还可以包括告警级别、监控程序类型等信息。
其中,告警源是指出现异常的机器,例如,某购物网站的后台服务器集群中的服务器。在一次告警的告警信息中可能存在多个告警源,即存在多台机器出现异常的情况。
其中,异常描述信息是指对异常情况的描述信息,例如,机器中某些模块(处理器)的异常数据信息等。
s200、将所述告警信息输入至预先训练的机器学习模型中以获取对应的故障根因;
可理解的是,将本次告警的告警信息输入至预先训练的机器学习模型中,机器学习模型便会输出本次告警的故障根因。
其中,所述机器学习模型根据所述告警信息确定所述故障根因的过程包括:
s210、根据所述告警信息,计算本次告警分别与多个历史情境之间的相似度;其中,每一个历史情境中包括在对应历史时间段内历史告警所对应的告警信息;
可理解的是,通常一个故障的出现会有连锁反应,导致多个任务或机器出现异常从而发出一系列告警,由故障带来连锁反应的情形称为情境,因此情境是由故障所产生的一系列告警的一种描述方式。也就是说,一个情景中可包含多次告警的告警信息。
举例来说,在分析某日上午9:00发生的告警的故障根因时,可以选择该日的前七天内的所有情境作为历史情境,也就是说,在分析本次告警时,考虑了前七天内的所有告警,即考虑了前七天内所有的故障。
在实际应用中,步骤s210可以具体包括如下步骤:
s211、根据所述告警信息,计算本次告警与每一个历史情境中每一次历史告警之间的共现图距离、局部敏感哈希距离和告警时间差;
由于在一个历史情境中可能存在多次告警,因此在计算本次告警与该历史情境的相似度时,首先计算本次告警与该历史情境内每一次告警之间的相似度;然后根据本次告警与该历史情境内各次告警之间的相似度,计算本次告警与该历史情境的相似度。例如,将本次告警与该历史情境内各次告警之间的相似度的平均值作为本次告警与该历史情境的相似度。
在计算本次告警与一个历史情境中一个告警之间的相似度时,可以考虑多种指标,例如,本次告警与该历史情境中该告警之间的共现图距离、告警时间差、局部敏感哈希距离(例如,simhash距离)等。
其中,共现图距离是依据本次告警的告警源和告警共现图确定,而告警共现图的基本假设是经常同时出现的告警往往具有一定的因果关系,因此统计一段时间内告警的共现关系能够有效地帮助情境聚类。告警共现图是由节点以及连接节点的边组成,节点可以是告警源、告警类型、异常描述信息中所描述的故障等或者是前者的组合,边的权值为节点共现次数的倒数,两个节点之间边的距离越小代表两个节点所代表的告警之间的关联越强。告警共现图的构建方法是:设置一个时间窗口用来缓存这段时间内的告警,例如,将时间窗口设置为一个月,则只考虑这一个月的告警,告警共现图为这一个月内所有的告警构建。当接收到一个新的告警后,则在共现告警图中为新的告警与当前窗口内所有告警添加一条边,并更新所有边的权值。所以本次告警与该历史情境中该告警之间的共现图距离为本次告警所添加的边与该历史情境中该告警的边之间的距离,为连接两告警的节点之间的边的长度。
其中,局部敏感哈希距离是依据告警信息中的异常描述信息确定。首先,对异常描述信息进行实体提取,得到本次告警中的实体;然后采用局部敏感哈希算法计算本次告警中的实体与历史情境中告警的实体之间的局部敏感哈希距离。其中,所谓的实体是指异常描述信息中出现的主体信息。异常描述信息经常是中英文混合,而传统的分词工具往往只能提取中文或者英文的一种,在中英混合的时候,英文往往是动词和名词,而名词往往是重要的实体,因此提取英文单词包括英文、数字和/或特殊符号的组合,将名词进行保留作为实体。其中,局部敏感哈希距离是本次告警中异常描述信息中的实体与历史情境中告警的描述实体之间的差异,局部敏感哈希距离由局部敏感哈希算法计算,局部敏感哈希算法通常用来发现小的文本修改,而故障引起的告警通常仅有微小的差异,因此局部敏感hash能够有效地发现这类告警。
可见,这里通过局部敏感哈希算法计算文本实体之间的相似度,而告警共现图充分利用告警的共现关系,弥补了局部敏感哈希算法只利用文本信息的不足,有助于从多个角度进行情境聚类。
s212、根据本次告警分别与每一个历史情境中的各次历史告警之间的共现图距离、局部敏感哈希距离和告警时间差,计算本次告警与该历史情境之间的相似度。
具体的相似度计算过程可以有多种,其中一种为:为每一项指标设置一个阈值和权重值:共现图距离阈值a1和共现图距离权重值a2、simhash距离阈值b1和simhash距离权重b2、告警时间差阈值c1和告警时间权重值c2;然后将本次告警与该历史情境中该告警之间的共现图距离与共现图距离阈值a1做差再与共现图距离权重值a2相乘,将本次告警与该历史情境中该告警之间的simhash距离与simhash距离阈值b1做差再与simhash距离权重b2相乘,将本次告警与该历史情境中该告警之间的告警时间与告警时间阈值c1做差再与告警时间权重值c2相乘,最后将三个相乘结果求和,作为本次告警与该历史情境中该告警的相似度。这只是计算告警之间相似度的一种方式,当然还存在其他的方式,这里不再一一列举。
s220、根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境;
可理解的是,所谓的故障根因是指引发故障的根本原因,引发本次告警的故障根因有可能不是本次告警中的告警源,有可能是其他的告警中的告警源,因为一个故障的出现会有连锁反应,会导致一系列的异常,因此可能会引起多次的告警,因此在寻找本次告警的故障根因时并不仅仅在本次告警中寻找,还要在其他告警中寻找。这里首先确定一个情境,然后在这个情境中寻找故障根因,其实是在一些具有关联的告警中寻找故障根因。
在实际应用中,如图2所示,步骤s220可以包括如下步骤:
s221、判断是否存在与本次告警的相似度大于第一阈值的历史情境:若不存在,则新建一个情境,将本次告警对应的告警信息添加至新建情景中,并将新建情境作为寻找本次告警的故障根因的情境。
可理解的是,如果一个历史情境与本次告警之间的相似度很大,说明这个历史情境与本次告警非常相似,可以进一步考虑是不是要在这个历史情境中寻找故障根因。
其中,第一阈值是在机器学习模型的训练过程中确定的,当根据本申请提供的方法最后所确定的故障根因是否是真实的故障根因的反馈,可以对第一阈值进行调整。
可理解的是,新建一个情境,将本次告警对应的告警信息添加至新建情景中,也就是说,新建的情境中目前只有本次告警。
可理解的是,有可能存在与本次告警的相似度大于第一阈值的历史情境,也有可能不存在与本次告警的相似度大于第一阈值的历史情境。当不存在时,说明这些历史情境与本次告警相差较远,因此只在本次告警的告警源中寻找故障根因。
在实际应用中,当存在与本次告警的相似度大于第一阈值的历史情境时,这样的历史情境有可能只有一个,也有可能有多个,当只有一个时,可以在本次告警和这一个历史情境中寻找故障根因,也就是说,如图2所示,上述步骤s220还可以包括如下步骤:
s222、若存在与本次告警的相似度大于第一阈值的历史情境,则判断与本次告警的相似度大于第一阈值的历史情境的数量是否为1:若是,则本次告警的告警信息添加至与本次告警的相似度大于第一阈值的历史情境中,并将添加本次告警的告警信息的历史情境作为寻找本次告警的故障根因的情境。
可理解的是,当只有一个历史情境与本次告警之间的相似度大于第一阈值时,对这个历史情境进行更新,即将本次告警的告警信息加入到这个历史情境中,并将更新后的历史情境作为后面寻找本次告警的故障根因的情境。这里对历史情境的更新,实际上也是一种告警或情境的聚类。
但是如果有多个历史情境与本次告警之间的相似度都大于第一阈值,则可以选择出其中相似度较高的历史情境进行融合,在融合后的情境中寻找故障根因。也就是说,如图2所示,上述步骤s220还可以包括如下步骤:
s223、若与本次告警的相似度大于第一阈值的历史情境的数量大于1,则将本次告警的告警信息添加至与本次告警相似度最高的历史情境中,并判断添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度是否大于第二阈值:若是,则将添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境进行融合,并将融合得到的情境作为寻找本次告警的故障根因的情境。
可理解的是,在将本次告警的告警信息添加至与本次告警相似度最高的历史情境中之后,还要计算添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度,进而判断两个情境之间的相似度是否大于第二阈值。
其中,添加本次告警的告警信息的历史情境在添加本次告警的告警信息之前是与本次告警相似度最高的历史情境。次高仅低于最高,也就是说,这里仅考虑了两个历史情境,一个是与本次告警相似度最高的历史情境,一个是与本次告警相似度次高的历史情境。
可理解的是,情境融合的主要作用是将相似的情境合并成一个情境。有的情境刚开始产生的告警差异较大,会被聚类成多个情境,随着时间的推移,情境内容可能趋于相似,情境融合主要融合这类情境,从而减少运维人员排除错误的工作量。
如果添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度很高,说明这两个情境是很相似度,因此这里将这两个情境进行融合,将融合之后的情境作为寻找本次告警的故障根因的情境。但是,如果两个情境是很相似度很低,说明两个情境不适合融合,只在添加本次告警的告警信息的历史情境中寻找故障根因比较合适。也就是说,如图2所示,上述步骤s220还可以包括如下步骤:
s224、若添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度小于或等于第二阈值,则将添加本次告警的告警信息的历史情境作为寻找本次告警的故障根因的情境。
其中,两个情境之间的相似度越大,说明两个情境之间的距离越近,具体可以根据两个情境里的告警之间的相似度计算两个情境之间的相似度,而由于情境中可能有多个告警,因此可以将一个情境中的告警与另一个情境之间的告警之间的最低相似度作为这两个情境之间的相似度。
s230、计算所述情境中每一个告警源的重要度,并根据所述情境中各个告警源的重要度确定本次告警的故障根因。
可理解的是,一个情境中的告警源越重要,其作为故障根因的可能性就越大。
在实际应用中,在计算告警源的重要度时可以考虑多个因素,例如,告警源在系统调用图上的pagerank值(也可以称为告警源在系统调用图中的被依赖度的排名值)、告警时间、告警源产生告警的频率等。也就是说,上述步骤s230可以具体包括:
根据所述情境中每一个告警源的产生告警的频率、告警发生时间和在系统调用图中的被依赖度排名值,计算该告警源的重要度。
其中,系统调用图是业务设置到的实际机器中真实的调用关系图,系统调用图中重要性大的节点产生的告警往往也更重要,因此利用系统调用图能够更有效的表示告警的重要性。在现有的应用中很少有算法能够充分利用系统调用图进行根因推荐。告警源在系统调用图中的的排名越靠前,该值越大,表示告警源越重要,即pagerank值越高的节点对应的告警源越有可能是故障根因。
其中,考虑告警时间的原因是:产生时间越早的告警越有可能是根因。考虑告警源产生告警的频率的原因是:告警频率越低的节点对应的告警源越有可能是故障根因。
由于在计算告警源的重要度时,考虑了三种因素,所以这每种因素都具有一个权重值,权重值可以在机器学习模型训练时确定,在机器学习模型使用过程中进行调整。三个因素的权重值之和原则是应该为1,但是当有新的经验加入时,即输入一条新的告警信息时,权重值总和可能会发生变化,此时就需要进行归一化,使得权重值总和仍为1。
在实际应用场景中,不用的业务程序,不同的运维人员对于故障划分的粒度会有很大的差异,同一套参数不可能适用于所有的情形。与此同时,在程序运行的过程中,本发明可以通过结果的反馈,对参数进行动态的调整,从而达到更好的效果。其中,结果的反馈是指,机器学习模型所输出的告警源是不是真正的故障根因,机器学习模型所输出的告警源与真正的故障根因之间的相似度或差距等。其中,涉及到的参数有多个,例如,第一阈值、第二阈值、共现图的时间窗口、共现图距离阈值、simhash阈值、告警时间差阈值、根因推荐时不同经验的归一化参数或权重值等。这些参数可以通过网格搜索的方式得到初始参数。在运行的过程中,可以针对根因的反馈及时调整参数,从而使模型达到更好的效果。
本申请提供的运维故障根因定位方法,首先获取本次告警的告警信息,然后将告警信息输入至机器学习模型中,机器学习模型根据告警信息确定本次告警的故障根因。在整个过程中,不需要运维人员过多参与,因此不需要对运维人员有很高的要求,而且不仅省时省力。进一步的,机器学习模型在确定本次告警的故障根因过程中,首先计算本次告警分别与多个历史情境之间的相似度,然后根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境,最后在这个情境中确定故障根因。引发本次告警的故障根因有可能不是本次告警中的告警源,有可能是其他的告警中的告警源,因为一个故障的出现会有连锁反应,会导致一系列的异常,因此可能会引起多次的告警,因此在寻找本次告警的故障根因时并不仅仅在本次告警中寻找,还要在其他告警中寻找,所以这里根据相似度确定一个用于寻找故障根因的情境,在该情境中的告警之间是具有一定关联的,这样最后确定的故障根因的准确度会比较高。可见,本申请考虑了故障的连锁效应,即考虑了多个告警源之间的关联,从全局角度对根因定位做全局分析,提高根因定位的准确性。也就是说,本申请将将多台机器进行同时考虑,不再局限于单台机器,该方法能够大幅减少错误的根因推荐或预警,减少人工排查错误的成本,而且本申请适用于多个应用场景下的故障根因定位。
第二方面,本申请实施例提供一种基于情境的运维故障根因定位装置,如图3所示,该装置300包括:
信息获取模块310,用于获取本次告警对应的告警信息,所述告警信息包括在业务运行过程中所产生的告警源、告警时间和异常描述信息;
根因确定模块320,用于将所述告警信息输入至预先训练的机器学习模型中以获取对应的故障根因;其中,所述机器学习模型根据所述告警信息确定所述故障根因的过程包括:根据所述告警信息,计算本次告警分别与多个历史情境之间的相似度;其中,每一个历史情境中包括在对应历史时间段内历史告警所对应的告警信息;根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境;计算所述情境中每一个告警源的重要度,并根据所述情境中各个告警源的重要度确定本次告警的故障根因。
也就是说,所述机器学习模型包括如下单元:
相似度计算单元,用于根据所述告警信息,计算本次告警分别与多个历史情境之间的相似度;其中,每一个历史情境中包括在对应历史时间段内历史告警所对应的告警信息;
情境确定单元,用于根据本次告警分别与多个历史情境之间的相似度,确定寻找本次告警的故障根因的情境;
根因确定单元,用于计算所述情境中每一个告警源的重要度,并根据所述情境中各个告警源的重要度确定本次告警的故障根因。
在一些实施例中,相似度计算单元具体用于:根据所述告警信息,计算本次告警与每一个历史情境中每一次历史告警之间的共现图距离、局部敏感哈希距离和告警时间差;根据本次告警分别与每一个历史情境中的各次历史告警之间的共现图距离、局部敏感哈希距离和告警时间差,计算本次告警与该历史情境之间的相似度。
在一些实施例中,情境确定单元具体用于:判断是否存在与本次告警的相似度大于第一阈值的历史情境:若不存在,则新建一个情境,将本次告警对应的告警信息添加至新建情景中,并将新建情境作为寻找本次告警的故障根因的情境。
在一些实施例中,情境确定单元具体还用于:若存在与本次告警的相似度大于第一阈值的历史情境,则判断与本次告警的相似度大于第一阈值的历史情境的数量是否为1:若是,则本次告警的告警信息添加至与本次告警的相似度大于第一阈值的历史情境中,并将添加本次告警的告警信息的历史情境作为寻找本次告警的故障根因的情境。
在一些实施例中,情境确定单元具体还用于:若与本次告警的相似度大于第一阈值的历史情境的数量大于1,则将本次告警的告警信息添加至与本次告警相似度最高的历史情境中,并判断添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度是否大于第二阈值:若是,则将添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境进行融合,并将融合得到的情境作为寻找本次告警的故障根因的情境。
在一些实施例中,情境确定单元具体还用于:若添加本次告警的告警信息的历史情境和与本次告警相似度次高的历史情境之间的相似度小于或等于第二阈值,则将添加本次告警的告警信息的历史情境作为寻找本次告警的故障根因的情境。
在一些实施例中,根因确定单元具体用于:根据所述情境中每一个告警源的产生告警的频率、告警发生时间和在系统调用图中的被依赖度排名值,计算该告警源的重要度。
第三方面,本申请实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现第一方面提供的方法的步骤。
图4示出了一个实施例中计算机设备的内部结构图。如图4所示,该计算机设备包括该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、输入装置和显示屏等。其中,存储器包括非易失性存储介质和内存储器。该计算机设备的非易失性存储介质存储有操作系统,还可以存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现基于情境的运维故障根因定位方法。该内存储器中也可以储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行基于情境的运维故障根因定位方法。计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图4中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在一个实施例中,本申请提供的基于情境的运维故障根因定位装置可以实现为一种计算机程序的形式,计算机程序可在如图4所示的计算机设备上运行。计算机设备的存储器中可存储组成该定位装置的各个程序模块,各个程序模块构成的计算机程序使得处理器执行本说明书中描述的本申请各个实施例的运维故障根因定位中的步骤。
第四方面,本申请实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面提供的方法的步骤。
可理解的是,第二方面提供的装置、第三方面提供的计算机设备以及第四方面提供的存储介质均与第一方面提供的方法相对应,其有关内容的解释、举例、有益效果等内容可以参考第一方面中的相应部分,此处不再赘述。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。