掌桥专利:专业的专利平台
掌桥专利
首页

在生产环境中进行故障防护测试的方法及装置

文献发布时间:2024-04-18 19:58:21


在生产环境中进行故障防护测试的方法及装置

技术领域

本说明书一个或多个实施例涉及计算机技术领域,尤其涉及一种在生产环境中进行故障防护测试的方法及装置、一种计算机可读存储介质,以及一种计算设备。

背景技术

混沌工程(Chaos Engineering)是通过主动注入故障的方式,提前将系统的问题暴露出来,发现系统可能存在一些风险点,然后把这些问题提前解决掉。简单来说,混沌工程就是通过主动注入故障的方式提前发现问题,然后解决问题、规避风险。

目前,通过混沌工程来检测告警监控系统等防线是否有效,已称为当下的研究热点。然而,在混沌工程中,降低对业务的不良影响与提高防线检测结果的有效性之间存在天然的矛盾,比如说,为避免对生产环境中的真实业务造成不良影响,如避免造成不必要的客户投诉,故障注入通常是在非生产环境去做的,如预发布环境等,而非生产环境和生产环境存在差异,这将导致防线检测结果的可用性偏低。

因此,迫切需要一种防线检测方案,可以在消除对业务不良影响的同时,充分提升防线检测结果的可用性。

发明内容

本说明书实施例描述一种在生产环境中进行故障防护测试的方法及装置,可以在消除对业务不良影响的同时,充分提升防线检测结果的可用性。

根据第一方面,提供一种在生产环境中进行故障防护测试的方法,所述生产环境中部署业务系统、针对该业务系统的自动防护系统,以及故障引擎,所述业务系统包括业务应用和模拟所述业务应用的目标功能而建立的靶子应用,所述方法包括:生成并调度虚拟访问流量至所述靶子应用;在所述靶子应用处理所述虚拟访问流量的过程中,执行所述故障引擎中的目标脚本,针对所述靶子应用生成目标故障场景下的若干故障;读取所述自动防护系统的防护数据,以确定其针对所述目标故障场景的防护结果。

在一个实施例中,在生成并调度虚拟访问流量至所述靶子应用之前,所述方法还包括:在所述业务系统中部署所述故障引擎和靶子应用。

在一个实施例中,所述自动防护系统支持多项防护功能,所述故障引擎包括其中各项防护功能对应的若干脚本,用于生成检测对应该项防护功能的若干故障场景;其中,执行所述故障引擎中的目标脚本,包括:根据对所述多项防护功能下的目标防护功能,以及对所述目标防护功能下所述目标故障场景的选取指令,调用并执行所述目标脚本。

在一个具体的实施例中,所述若干脚本基于故障数据集而得到,所述故障数据集包括:基于所述业务应用采集的真实故障场景的数据;以及,利用预定算法处理所述真实故障场景的数据得到的若干泛化故障场景的数据。

在一个实施例中,执行所述故障引擎中的目标脚本,针对所述靶子应用生成目标故障场景下的若干故障,包括:按照预定时间间隔,周期性调用所述故障引擎中的若干脚本并执行,生成对应的若干故障场景中的故障;所述若干脚本包括所述目标脚本,所述若干故障场景包括所述目标故障场景;所述预定时间间隔大于单个故障场景的持续时长。

在一个实施例中,所述靶子应用包括第一应用和第二应用,第一应用在处理所述虚拟访问流量的过程中调用所述第二应用,所述目标故障场景包括注入所述第二应用的故障。

在一个实施例中,所述目标故障场景用于测试所述自动防护系统中针对变更事件的目标防护功能;其中,在执行所述故障引擎中的目标脚本之前,所述方法还包括:向所述业务系统中的变更管理平台发送针对所述靶子应用的变更请求,以启动所述目标防护功能。

在一个具体的实施例中,读取所述自动防护系统的防护数据,包括:读取基于所述目标防护功能产生的所述防护数据,所述防护数据的产生包括:获取所述变更请求所指示变更时刻之前所述业务系统针对所述靶子应用的第一监控日志和之后的第二监控日志;通过比对所述第一监控日志和第二监控日志,生成所述防护数据。

在一个更具体的实施例中,在向所述业务系统中的变更管理平台发送针对所述靶子应用的变更请求之前,所述方法还包括:根据预设模拟目标,执行所述故障引擎中的若干脚本,针对所述靶子应用生成若干前置故障场景下的故障,作为变更前故障状态;其中,所述第一监控日志中包括与所述若干前置故障场景相关的监控数据。

进一步,在一个例子中,所述预设模拟目标包括第一故障场景;执行所述故障引擎中的若干脚本,针对所述靶子应用生成若干前置故障场景下的故障,包括:执行所述故障引擎中与第一故障场景对应的第一脚本,针对所述靶子应用生成第一故障场景下的故障。

在另一个例子中,所述预设模拟目标包括随机故障;执行所述故障引擎中的若干脚本,针对所述靶子应用生成若干前置故障场景下的故障,包括:随机执行所述故障引擎中的至少一个脚本,针对所述靶子应用生成至少一个故障场景下的故障。

在一个实施例中,所述目标故障场景中发生故障的对象包括以下中的至少一类:存储、计算资源、网络、节点、容器、进程、消息服务。

在一个实施例中,所述目标故障场景中的故障类型包括以下中的至少一项:服务延时、CPU占用率的增速大于第一阈值、对SQL语句的处理时间大于第二阈值、完全的垃圾回收Full GC溢出,服务失败、业务成功率下降。

在一个实施例中,所述目标故障场景中故障类型的时序模式为缓慢、毛刺或突变。

在一个实施例中,所述靶子应用包括web型应用,为所述业务系统提供外部访问服务,和/或,所述靶子应用包括core型应用,为所述业务系统的其他靶子应用提供内部调用服务。

在一个实施例中,所述业务系统为分布式系统,所述靶子应用部署在所述分布式系统中的单个集群或不同集群上。

根据第二方面,提供一种在生产环境中进行故障防护测试的装置,所述生产环境中部署业务系统、针对该业务系统的自动防护系统,以及故障引擎,所述业务系统包括业务应用和模拟所述业务应用的目标功能而建立的靶子应用,所述装置包括:流量生成调度模块,配置为生成并调度虚拟访问流量至所述靶子应用;脚本执行模块,配置为在所述靶子应用处理所述虚拟访问流量的过程中,执行所述故障引擎中的目标脚本,针对所述靶子应用生成目标故障场景下的若干故障;防护数据读取模块,配置为读取所述自动防护系统的防护数据,以确定其针对所述目标故障场景的防护结果。

根据第三方面,提供了一种计算机可读存储介质,其上存储有计算机程序,当上述计算机程序在计算机中执行时,令计算机执行第一方面的方法。

根据第四方面,提供了一种计算设备,包括存储器和处理器,上述存储器中存储有可执行代码,该处理器执行上述可执行代码时,实现第一方面的方法。

在本说明书实施例提供的上述方法和装置中,通过在生产环境中部署模拟业务应用的目标功能而建立的靶子应用,生成和调度虚拟访问流量至靶子应用,并利用基于脚本实现的故障引擎发起对靶子应用的故障注入式攻击,实现在生产环境中进行故障防护测试。进一步,1)因为攻击的靶子应用的服务对象为仿真用户而非真实用户,所以可以对靶子应用进行有损仿真用户体验的有损攻击和高频攻击;2)因为注入故障是通过调用脚本实现的,而非直接向监控日志中插入基于故障编写的日志,可以实现注入单点故障而引发链路级故障。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本说明书实施例披露的实施故障防护测试方案的生产环境的架构示意图;

图2为本说明书实施例披露的在生产环境中进行故障防护测试的方法流程步骤示意图;

图3为本说明书实施例披露的故障防护测试方案的方案架构示意图;

图4为本说明书实施例披露的在生产环境中进行故障防护测试的装置结构示意图。

具体实施方式

本说明书实施例披露一种在生产环境中实施的故障防护测试方案,在生产环境中部署模拟真实业务应用的目标功能而建立的靶子应用,生成和调度虚拟用户的访问流量(或简称虚拟访问流量)至靶子应用,并利用基于脚本实现的故障引擎发起对靶子应用的故障注入式攻击,实现在生产环境中进行故障演练(或称故障防护测试)。并且,1)因为攻击的靶子应用的服务对象为仿真用户而非真实用户,所以可以对靶子应用进行有损仿真用户体验的有损攻击和高频攻击;2)因为注入故障是通过调用脚本实现的,而非直接向监控日志中插入基于故障编写的日志,可以实现注入单点故障而引发链路级故障。

下面结合图1-图4,对本说明书提供的上述故障防护测试方案进行描述。

图1为本说明书实施例披露的实施故障防护测试方案的生产环境的架构示意图。如图1所示,业务系统中包括为真实用户提供线上服务的业务应用,图1中仅示意一个业务应用,实际可以有多个。在部署业务系统的环境中还部署为业务系统提供防护的自动防护系统(或称通用防线),该自动防护系统可以包括多个子系统,例如,故障报错系统或故障告警系统等。

为进行故障测试,在业务系统中额外建立靶子应用。需说明,靶子应用是有待被注入故障的应用,其用于模拟业务应用的目标功能(如支付功能),从而向虚拟用户(或称仿真用户)提供与目标功能对应的服务(如支付服务),进而在向生产环境中的靶子应用进行故障注入时,不会影响业务应用的功能和真实用户的体验,但同时可以实现对自动防护系统的有效检测。可以理解,目标功能可以是一个或多个,靶子应用也可以是一个或多个,一个靶子应用可以只模拟一个目标功能,也可以同时模拟多个目标功能(如支付和退款)。

因靶子应用只需实现目标功能,相较于业务应用的代码中涉及的较为繁杂的底层组件,靶子应用可以实现为轻量级应用,只需较少的代码即可完成部署。由此,可以方便工作人员根据靶子应用的代码编写用于注入故障的脚本,放入故障引擎,使得后续可以调用故障引擎中的脚本进行故障注入。示例性的,靶子应用的代码由故障演练的攻方人员编写,故障引擎中的脚本等其他代码文件也由攻方人员编写、配置。

进一步,因为故障注入采取的是执行脚本的方式,1)可以实现真正意义上对靶子应用的有损攻击,虚拟用户的体验会收到损害,例如,在注入的故障是服务延迟的情况下,虚拟用户会看到应用界面加载迟缓,体验受损,从而实现对真实业务场景的模拟。2)由于虚拟用户的体验有损也没关系,而且可以设定自动触发脚本执行,因此可以对靶子应用进行高频攻击来验证通用防线的有效性。3)可以对存在调用关系的多个靶子应用形成的链路中注入单点故障而引发链路级故障,从而验证通用防线在链路级故障下的有效性。

下面结合图2和更多实施例,描述基于图1示出的生产环境架构下,实施故障防护测试方案的具体步骤。图2为本说明书实施例披露的在生产环境中进行故障防护测试的方法流程步骤示意图。可以理解,该方法的执行主体可以为任何具有计算、处理能力的装置、服务器、平台或设备集群等,示例性的,可以为测试平台或称攻防平台。如图2所示,所述方法包括以下步骤:

步骤S210,生成并调度虚拟访问流量至所述靶子应用。步骤S220,在所述靶子应用处理所述虚拟访问流量的过程中,执行所述故障引擎中的目标脚本,针对所述靶子应用生成目标故障场景下的若干故障。步骤S230,读取所述自动防护系统的防护数据,以确定其针对所述目标故障场景的防护结果。

针对以上步骤的展开介绍如下:

首先,在步骤S210,生成并调度虚拟访问流量至靶子应用。

需理解,虚拟访问流量是虚拟用户的访问流量,例如,某个虚拟用户向靶子应用发起支付请求,虚拟访问流量模拟的是真实用户的访问流量。另外,可以在生产环境中部署流量应用,从而利用此流量应用实现虚拟流量的生成和调度,或者,还可以在故障引擎中集成用于生成、调度虚拟访问流量的功能模块。

在一个实施例中,业务系统为分布式系统,其中可以包括一个分布式集群,也可以包括多个不同的分布式集群,靶子应用被部署在单个集群或不同集群上。进一步,实现目标功能的靶子应用有多个,被对应部署在一个集群的多个节点上,此时,可以生成一定量级(如上千万)的虚拟访问流量,并将其分散调度至不同节点上的靶子应用。

在另一个实施例中,可以针对提供不同服务的靶子应用分别生成虚拟访问流量,再调度至对应的靶子应用。

可以理解,靶子应用在接收到虚拟访问流量后,会对其进行处理。

在步骤S220,在靶子应用处理虚拟访问流量的过程中,通过执行故障引擎中的目标脚本,针对靶子应用生成目标故障场景下的若干故障。

需理解,靶子应用在生产环境中处理虚拟访问流量,模拟的是业务应用基于其目标功能在生产环境中处理真实用户的访问流量,为真实用户提供目标功能所对应服务。因此,在这一过程中对靶子应用注入故障,可以真实、有效地实现对自动防护系统的测试。

为便于理解,下面先对故障引擎、其中的脚本,以及执行脚本可生成的故障场景进行介绍,之后再介绍本步骤的实施方式。

故障引擎,就是用于制造和注入故障的引擎,其基于脚本(如groovy脚本)的执行而实现。故障引擎中包括的若干(文中若干指代一个或多个)脚本可以基于故障数据集而得到,故障数据集至少包括基于上述业务应用采集的真实故障场景的数据。在一个实施例中,还可以利用预定算法处理该真实故障场景的数据,从而将得到的若干泛化故障场景的数据归入故障数据集中,使得故障数据集中的故障数据更为丰富。示例性的,其中预定算法可以是人为配置的一些规则,例如将真实故障场景中单位时间发生的故障数量翻倍,又例如,将故障的时序模式泛化为平缓、毛刺或突变等;又或者,预定算法还可以是一些机器学习算法等。

一般地,故障引擎中的若干脚本由工作人员基于上述故障数据集预先编写,并且,可以根据实际需要动态调整,如删除、新增或替换脚本等。另一方面,在一个实施例中,自动防护系统支持多项防护功能,此时,可以在故障引擎中预置针对该多项防护功能分别设置对应的脚本(或称攻击脚本、测试脚本、故障注入脚本),用于生成检测对应项防护功能的若干故障场景。可以理解,用于测试单项防护功能的脚本数量可以是一个或多个,可以按照实际需求选择性地为多项防护功能中的部分或全部功能配置对应的脚本。

故障引擎中的每个脚本用于生成、产生对应的故障场景。为帮助理解故障场景,先介绍单个故障的注入,对于单个故障的注入,需明确其注入的对象(或者说靶子应用的点位)、故障类型、持续时长等,而故障场景涉及在具有预定时长的时段内批量注入故障,还限定每个故障在时段内的注入时刻。或者说,故障场景包括在预定时长的各个时刻下是否注入故障、注入哪些类型的故障、注入各类型故障的数量、注入故障的对象等,换言之,故障场景包括所注入故障的类型、对象、数量和时序模式等。

靶子应用的数量可以是一个或多个,单个故障场景下可以对全部靶子应用中的部分或全部发动攻击。基于脚本实现的故障注入支持将靶子应用关联的多个对象作为上述故障注入对象,或者说靶子点位。示例性的,多个对象包括存储、计算资源、网络、节点、容器、进程和消息服务等。

基于脚本实现的故障注入支持多种故障类型,实际可以覆盖所有可能的故障类型。另外,不同对象被注入故障的类型有所不同,在一个示例中,对存储注入的故障可以包括:磁盘空间满、文件句柄耗尽和文件删除等。在另一个示例中,对计算资源注入的故障可以包括:CPU占用率的增速大于第一阈值(或者说CPU飙升、CPU负载高)、对SQL语句的处理时间大于第二阈值(或者说长SQL语句)、内存满、GPU负载高、虚拟内存满、完全的垃圾回收Full GC溢出,等等。在又一个示例中,对网络注入的故障可以包括丢包、延迟、限速、端口耗尽量,等等。在还一个示例中,对节点/容器注入的故障可以包括删pod、杀容器等。在再一个示例中,对消息服务注入的故障可以包括服务延时、服务失败、服务异常、业务成功率下降等。

故障的时序模式是指以时间为横坐标,以故障数量为纵坐标而绘制的曲线所呈现的趋势,例如,可以是平缓模式、毛刺模式或突变模式等。需说明,还可以将故障场景换称为故障时间序列、故障时序。

以上对故障引擎、脚本和故障场景进行介绍,接下来介绍本步骤的实施方式。

在一个实施例中,响应于对故障引擎中目标脚本的选定执行,调用并执行该目标脚本。在一个具体的实施例中,故障引擎中包括与自动防护系统提供的多项防护功能中各个多项防护功能对应的若干脚本,此时,可以根据对多项防护功能中目标防护功能的选取指令,以及对目标防护功能下若干脚本中目标脚本的选取和确认指令,调用并执行该目标脚本。

在另一个实施例中,可以按照预定时间间隔,周期性自动调用故障引擎中的脚本进行执行,由此,可以将当前周期执行的脚本视作目标脚本。需说明,预定时间大于单个故障场景的持续时长,也就是说,在单个故障场景结束后会预留出一些时间让自动防护系统恢复到正常水位,包括CPU占用量、内存占用量等资源量恢复到正常水平。

在一个实施例中,通过执行目标脚本对存在调用链路的多个靶子应用之一注入故障,可以引发链路级故障。关于靶子应用间存在调用,在一个具体的实施例中,业务系统中包括web型应用,其为业务系统提供外部访问服务,示例性的,访问形式为http请求;业务系统中还包括core型应用,其为业务系统的其他靶子应用提供内部调用服务,示例性的,调用形式为远程调用(Remote Procedure Call,简称RPC)请求。web型应用在处理外部流量时需要对core型应用进行内部调用,或者,不同core型应用之间也存在调用。

根据一个例子,靶子应用中包括属于web应用的第一应用和属于core型应用的第二应用,第一应用在处理上述虚拟访问流量的过程中调用第二应用,目标故障场景包括注入第二应用的故障,于是,第一应用因需要调用第二应用也会连带发生故障。

根据另一个例子,靶子应用中包括属于web应用的第一应用,以及属于core型应用的第二应用和第三应用,目标故障场景包括注入第三应用的故障,第二应用因需调用第三应用、第一应用因需调用第二应用,而连带发生故障。

以上介绍本步骤的实施,通过执行目标脚本生成针对靶子应用的目标故障场景,而实现故障注入。

另一方面,在一个实施例中,考虑到故障注入是为了测试自动防护系统的防护功能,对于某些防护功能是针对业务系统相关的特定事件而唤起,因此,假定目标故障场景的测试目标是需要特定事件唤起的防护功能,则需要先触发特定事件,从而启动目标防护系统中对应的防护功能。在一个具体的实施例中,上述特定事件是变更事件,相应,在执行本步骤之前,可以向业务系统中的变更管理平台发生针对靶子应用的变更请求,从而启动自动防护系统中对应变更的防护功能,或者说子防护系统。示例性的,变更事件包括业务参数变更、新业务上线、业务下线、应用重启、扩容等。在另一个具体的实施例中,上述特定事件是业务成功率下降到最低阈值以下,相应,在执行本步骤之前,可以通过注入前置故障,使得防护功能A监测到业务成功率下降到最低阈值以下,从而启动自动防护系统中对应的防护功能B(不同于防护功能A)。由此,可以在唤起防护功能后,再通过执行故障引擎中的脚本进行测试。

在另一个实施例中,自动防护系统会随着业务系统的启动而自行启动,自动防护系统中的各项防护功能持续运作,此时,可以直接通过执行故障引擎中的脚本进行测试。

由上,可以通过执行故障引擎中的脚本生成目标故障场景。

步骤S230,读取自动防护系统的防护数据,以确定其针对目标故障场景的防护结果。

需理解,自动防护系统对业务系统的防护情况体现在自动防护系统的防护数据,因此,可以通过读取此防护数据确定其针对目标故障场景的防护结果,作为故障防护测试的测试结果。示例性的,自动防护系统产生的防护数据被存储在数据库或其他指定存储区域。

在一个实施例中,可以响应于工作人员的操作指令,读取自动防护系统的防护数据并进行展示,使得工作人员基于展示的防护数据分析防护结果。在另一个实施例中,可以在目标故障场景结束后,自动读取从结束时刻起回溯一段时长的防护数据,进行防护结果分析。

另一方面,在一个实施例中,假定目标故障场景意图测试的防护功能是故障告警,则可以根据自动防护系统在目标故障场景所对应时段内的防护数据,如报警信息等确定告警数据,若告警数据达到合格标准,例如,正确告警的次数与实际发生故障的比值超过预设百分比(如99%),则判定防护成功,否则判定防护失败。

在另一个实施例中,假定目标故障场景意图测试的防护功能是故障报错,则可以根据自动防护系统在目标故障场景所对应时段内的防护数据等确定报错数据,若报错数据达到合格标准,例如,实际报错的次数与应该报错的次数相匹配,则判定防护成功,否则判定防护失败。

又一方面,需要说明,自动防护系统的防护是通过分析业务系统的运行日志来实现的,而其中与变更对应的防护功能在运行时,会获取变更请求指示的变更时刻之前业务系统针对靶子应用的第一监控日志,用其与变更时刻之后的第二监控日志进行比对,从而生成防护数据。简单来说,与变更对应的防护功能是为了检测由变更引发的故障,那么,如果有的故障是在变更前就存在,那么即使其在变更后依然存在,也并非是变更引发,因而无需在此项防护功能的防护数据中有所体现。

基于此,还提出在发起变更请求之前针对靶子应用进行前置故障注入,以丰富变更之前靶子应用的运行状态、故障状态,丰富生成的上述第一监控日志,实际上,可以制造变更之前的一切指标现象(例如,制造3个报错、5个告警等),以实现对变更所对应防护功能的全面测试。

具体地,在发起变更请求之前,根据预设模拟目标,执行故障引擎中的若干脚本,针对靶子应用生成若干前置故障场景下的故障,作为变更前故障状态。在一个例子中,预设模拟目标包括第一故障场景,相应,可以执行故障引擎中与第一故障场景对应的第一脚本,针对靶子应用生成第一故障场景下的故障。在另一个例子中,所述预设模拟目标包括随机故障,此时,可以随机执行故障引擎中的至少一个脚本,针对靶子应用生成至少一个故障场景下的故障。可以理解,上述第一监控日志中包括与若干前置故障场景下故障相关的监控数据。此种二段式故障注入,可以实现对防护功能的全方位检测。

综上,采用本说明书实施例披露的在生产环境中进行故障防护测试的方法,通过在生产环境中部署模拟业务应用的目标功能而建立的靶子应用,生成和调度虚拟访问流量至靶子应用,并利用基于脚本实现的故障引擎发起对靶子应用的故障注入式攻击,实现在生产环境中进行故障防护测试。并且,1)因为攻击的靶子应用的服务对象为仿真用户而非真实用户,所以可以对靶子应用进行有损仿真用户体验的有损攻击和高频攻击;2)因为注入故障是通过调用脚本实现的,而非直接向监控日志中插入基于故障编写的日志,可以实现注入单点故障而引发链路级故障。

下面结合图3,描述本说明书实施例披露的故障防护测试方案的方案架构。如图4所示,整体架构分为4层:

1)计划层,涉及场景编排、持续集成、调度策略、工作空间、间隔时间、周期/实时。计划层主要是日常持续集成的攻击计划(或者说测试计划)里故障场景的编排能力,所有故障场景都从工作空间中获取,并且控制好故障场景之间的间隔时长,每个防护功能的场景数量等。

2)流控层,流量系统涉及流量控制、分布式、LDC控制、战役(故障演练)控制、基线控制、实时调整、基础数据、安全审计。流量系统分布式调度发起故障演练时的虚拟访问流量,可实时调整业务流量模型,如http、rpc等以及流量量级。

3)核心故障层,包括算法分析、武器库和靶标。其中算法分析包括单点突刺、时序滤波、极值持续、波动时序、持续波动和趋势时序,武器库包括groovy脚本、shell脚本和awatch指令,靶标包括业务、消息服务和容器等。核心故障层是负责故障的核心处理层,主要跟算法侧合作,根据线上故障泛化更多的故障场景。

4)运营度量层,包括攻防可视和运营分析。其中攻防可视包括攻击结果、防御排名、红黑榜、防守结果、战况总览和融合分析。运营分析包括防御日报、问题闭环、防线周会、防御周报、问题跟踪和场景讨论。

根据另一方面的实施例,与上述测试方法相对应的,本说明书实施例还披露测试装置。图4为本说明书实施例披露的在生产环境中进行故障防护测试的装置结构示意图,所述生产环境中部署业务系统、针对该业务系统的自动防护系统,以及故障引擎,所述业务系统包括业务应用和模拟所述业务应用的目标功能而建立的靶子应用。图4示出的装置400包括以下模块:

流量生成调度模块410,配置为生成并调度虚拟访问流量至所述靶子应用。脚本执行模块420,配置为在所述靶子应用处理所述虚拟访问流量的过程中,执行所述故障引擎中的目标脚本,针对所述靶子应用生成目标故障场景下的若干故障。防护数据读取模块430,配置为读取所述自动防护系统的防护数据,以确定其针对所述目标故障场景的防护结果。

在一个实施例中,所述装置还包括:应用引擎部署模块440,配置为在所述业务系统中部署所述故障引擎和靶子应用。

在一个实施例中,所述自动防护系统支持多项防护功能,所述故障引擎包括其中各项防护功能对应的若干脚本,用于生成检测对应该项防护功能的若干故障场景;所述脚本执行模块420具体配置为:根据对所述多项防护功能下的目标防护功能,以及对所述目标防护功能下所述目标故障场景的选取指令,调用并执行所述目标脚本。

进一步,在一个具体的实施例中,所述若干脚本基于故障数据集而得到,所述故障数据集包括:基于所述业务应用采集的真实故障场景的数据;以及,利用预定算法处理所述真实故障场景的数据得到的若干泛化故障场景的数据。

在一个实施例中,所述脚本执行模块420具体配置为:按照预定时间间隔,周期性调用所述故障引擎中的若干脚本并执行,生成对应的若干故障场景中的故障;所述若干脚本包括所述目标脚本,所述若干故障场景包括所述目标故障场景;所述预定时间间隔大于单个故障场景的持续时长。

在一个实施例中,所述靶子应用包括第一应用和第二应用,第一应用在处理所述虚拟访问流量的过程中调用所述第二应用,所述目标故障场景包括注入所述第二应用的故障。

在一个实施例中,所述目标故障场景用于测试所述自动防护系统中针对变更事件的目标防护功能;所述装置400还包括变更请求发送模块450,配置为向所述业务系统中的变更管理平台发送针对所述靶子应用的变更请求,以启动所述目标防护功能。

进一步,在一个具体的实施例中,防护数据读取模块430具体配置为:读取基于所述目标防护功能产生的所述防护数据,所述防护数据的产生包括:获取所述变更请求所指示变更时刻之前所述业务系统针对所述靶子应用的第一监控日志和之后的第二监控日志;通过比对所述第一监控日志和第二监控日志,生成所述防护数据。

在一个更具体地实施例中,所述装置400还包括前置状态生成模块460,配置为根据预设模拟目标,执行所述故障引擎中的若干脚本,针对所述靶子应用生成若干前置故障场景下的故障,作为变更前故障状态;其中,所述第一监控日志中包括与所述若干前置故障场景相关的监控数据。

在一个例子中,所述预设模拟目标包括第一故障场景;所述前置状态生成模块460具体配置为:执行所述故障引擎中与第一故障场景对应的第一脚本,针对所述靶子应用生成第一故障场景下的故障。

在另一个例子中,所述预设模拟目标包括随机故障;所述前置状态生成模块460具体配置为:随机执行所述故障引擎中的至少一个脚本,针对所述靶子应用生成至少一个故障场景下的故障。

在一个实施例中,所述目标故障场景中发生故障的对象包括以下中的至少一类:存储、计算资源、网络、节点、容器、进程、消息服务。

在一个实施例中,所述目标故障场景中的故障类型包括以下中的至少一项:服务延时、CPU占用率的增速大于第一阈值、对SQL语句的处理时间大于第二阈值、完全的垃圾回收Full GC溢出,服务失败、业务成功率下降。

在一个实施例中,所述目标故障场景中故障类型的时序模式为缓慢、毛刺或突变。

在一个实施例中,所述靶子应用包括web型应用,为所述业务系统提供外部访问服务,和/或,所述靶子应用包括core型应用,为所述业务系统的其他靶子应用提供内部调用服务。

在一个实施例中,所述业务系统为分布式系统,所述靶子应用部署在所述分布式系统中的单个集群或不同集群上。

根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。

根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所描述的方法。本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。

相关技术
  • 用于测试电弧防护的方法和装置以及包括该装置的电单元
  • 一种DCS系统连接故障的测试装置和一种测试方法
  • 基于CPLD进行故障注入的测试装置及测试方法
  • 基于CPLD进行故障注入的测试装置及测试方法
技术分类

06120116483009