CN113535532B - 故障注入***、方法和装置 - Google Patents
故障注入***、方法和装置 Download PDFInfo
- Publication number
- CN113535532B CN113535532B CN202010291836.7A CN202010291836A CN113535532B CN 113535532 B CN113535532 B CN 113535532B CN 202010291836 A CN202010291836 A CN 202010291836A CN 113535532 B CN113535532 B CN 113535532B
- Authority
- CN
- China
- Prior art keywords
- fault injection
- fault
- injection
- container
- module
- 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
- 238000002347 injection Methods 0.000 title claims abstract description 291
- 239000007924 injection Substances 0.000 title claims abstract description 291
- 238000000034 method Methods 0.000 title claims abstract description 97
- 238000012544 monitoring process Methods 0.000 claims abstract description 38
- 238000012545 processing Methods 0.000 claims description 27
- 238000013515 script Methods 0.000 claims description 26
- 238000011084 recovery Methods 0.000 claims description 14
- 239000003795 chemical substances by application Substances 0.000 claims description 11
- 230000004044 response Effects 0.000 claims description 11
- 238000001514 detection method Methods 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims 2
- 230000007613 environmental effect Effects 0.000 claims 1
- 238000005192 partition Methods 0.000 claims 1
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 10
- 230000006870 function Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 4
- 230000007547 defect Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003993 interaction Effects 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000007474 system interaction Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3644—Software debugging by instrumenting at runtime
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3664—Environments for testing or debugging software
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例涉及计算机技术领域,公开了一种故障注入***、方法和装置,包括:调度单元:用于向代理服务单元发送故障注入指令;容器单元:包括容器镜像挂载目录,容器镜像挂载目录用于接收代理服务单元发出的故障注入程序;代理服务单元:包括故障场景配置模块、故障注入引擎模块和结果监控模块;故障场景配置模块:用于根据预设的故障注入场景配置相应的故障注入程序;故障注入引擎模块:用于接收调度单元发送的故障注入指令,并根据故障注入指令从故障场景配置模块中获取相应的故障注入程序,将故障注入程序注入到容器单元的容器镜像挂载目录中;结果监控模块对故障注入结果进行监控。通过上述方式,本发明实施例提高了故障注入的效率。
Description
技术领域
本发明实施例涉及计算机技术领域,具体涉及一种故障注入***、方法和装置。
背景技术
随着云化、容器化的逐渐成熟和普及,大量传统型、竖井型应用被逐渐改造或直接迁移和部署到虚拟化、容器化环境当中。而容器化大规模的应用伴随而来来的是维护难度几何式的增长,容器状态在云化架构下的影响被弱化,但容器上承载的应用自身运行情况以及各个应用之间的调用关系等,仍然是决定业务稳定性的最关键因素。
在这种情况下,通过直接在生产环境对Docker容器内的应用进行故障注入,来观测应用异常带来的业务影响,是一种较有效的储备运维经验的方法。而目前针对Docker容器的故障注入存在操作繁琐以及覆盖场景有限等问题。
发明内容
鉴于上述问题,本发明实施例提供了一种故障注入***、方法和装置,用于解决现有技术中存在的上述问题。
本发明实施例提出了一种故障注入***,包括:调度单元、代理服务单元和容器单元;
所述调度单元:用于向代理服务单元发送故障注入指令;
所述容器单元:包括容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元发出的故障注入程序;
所述代理服务单元:包括故障场景配置模块、故障注入引擎模块和结果监控模块;
所述故障场景配置模块:用于根据预设的故障注入场景配置相应的故障注入程序;
所述故障注入引擎模块:用于接收所述调度单元发送的故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元的容器镜像挂载目录中;
所述结果监控模块:用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至所述调度单元。
进一步的,所述故障注入指令包括故障场景信息;
所述故障注入引擎模块用于根据所述故障场景信息从所述故障场景配置模块中获取故障注入程序。
进一步的,所述故障场景配置模块包括:进程外场景配置模块和进程内场景配置模块;
所述进程外场景配置模块用于通过操作***命令对设置所述故障注入指令;
所述进程内场景配置模块用于通过JDK接口和字节码设置所述故障注入指令。
进一步的,所述进程内场景配置模块还用于对所述容器内的运行函数按入口、函数体和出口进行划分;
所述进程内场景配置模块分别对所述函数的入口、函数体和出口的响应值、处理速度和处理逻辑设置故障注入指令。
进一步的,所述故障注入引擎模块还包括环境检查模块;
所述环境检查模块用于根据所述故障注入指令对所述容器单元的环境信息进行检查,如果符合所述环境信息符合所述故障注入指令的运行要求,则执行故障注入,否则向所述调度单元返回故障注入失败信息。
进一步的,所述故障场景配置模块还用于根据故障注入程序配置相应的故障注入有效性检查脚本;
所述故障注入引擎模块还用于在完成注入所述故障注入程序后,运行对应的所述故障注入有效性检查脚本,以便确定所述故障注入程序是否运行成功。
进一步的,所述代理服务单元还包括:故障恢复模块;
所述故障恢复模块用于在所述故障注入程序执行完成后,清除所述故障注入程序,并将所述容器单元恢复到所述故障注入程序运行前的状态。
进一步的,所述代理服务单元还包括:突发事件处理模块;
所述突发事件处理模块用于根据所述调度单元发送的控制指令执行暂停、中止或重执行所述故障注入程序的操作;
所述突发事件处理模块还用于根据调度单元发送的控制指令执行一键还原所述容器单元的操作。
本发明实施例还提出了一种故障注入装置,包括:代理服务单元和容器单元;
所述容器单元:包括容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元发出的故障注入程序;
所述代理服务单元:包括故障场景配置模块、故障注入引擎模块和结果监控模块;
所述故障场景配置模块:用于根据预设的故障注入场景配置相应的故障注入程序;
所述故障注入引擎模块:用于接收故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元的容器镜像挂载目录中;
所述结果监控模块:用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至所述调度单元。
本发明实施例还提出了一种上述故障注入***进行故障注入的方法。
通过本发明实施例提供的故障注入***,一方面通过在所述代理服务单元上设置故障场景配置模块,可以针对不同的故障场景进行不同的故障注入程序的配置,能够适应多种故障场景的需要,进行多种故障的注入;另一方面,通过在容器单元上设置容器镜像挂载目录,方便的实现了故障的注入,可以将所有注入程序、监控程序以及代理程序全部上传到容器对应的挂载目录中,方便的实现了故障的注入,解决了此前需要一一进入容器内部擦偶作的弊端,实现了各容器注入程序的共享。
上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
附图仅用于示出实施方式,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的故障注入***示意图;
图2示出了本发明实施例提供的故障注入***交互图;
图3示出了本发明实施例提供的故障场景配置模块示意图;
图4示出了本发明实施例提供的进程内故障配置示意图;
图5示出了本发明实施例提供的故障注入***内外进程交互图;
图6示出了本发明实施例提供的故障注入引擎模块示意图;
图7示出了本发明实施例提供的故障注入方法流程图;
图8示出了本发明实施例提供的故障注入装置结构图;
图9示出了本发明实施例提供的服务器设备结构图。
具体实施方式
下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。
目前,针对Docker容器内的应用的故障注入,可以通过人工方式进行;在人工方式下,通过Docker相关命令查看布署容器的ID,然后登入容器,进入容器内部后,查找相关应用进程,通过Kill命令方式杀死进程,这种方式操作繁琐,效率比较低,随着***规模的不断扩大,人工操作难度比较大,实施的工作量、风险以及还原周期时间都比较长。也可以通过引入外部程序在内部模拟故障注入,通过提前将外部程序安装在容器内,然后使用外部程序对应的命令行,实现故障注入的模拟,主要模拟资源消耗类的部分场景,如CPU暴增、内存暴增等,这种方式的注入场景不够丰富,对容器承载的应用相关的故障注入,比如:OOM、传参异常、响应延迟等情况均无法有效覆盖。
本发明实施例提出了一种故障注入***,能够有效的解决生产环境下故障注入难度大、操作繁琐、适用的场景少等问题。如图1所示,示出了本发明实施例提出的故障注入***,所述***包括:调度单元100、代理服务单元200和容器单元300。所述调度单元通常设置在远端调度台;所述代理服务器单元200设置在所述云端服务器上;所述云端服务器划分为多个虚拟的空间,设置成不同的容器单元,用于运行不同的应用程序。因此,所述故障注入***中,所述调度单元100通常设置在本地服务器上,所述代理服务单元和容器单元通常设置在云端服务器上,所述调度单元通过调度客户端与代理服务单元进行交互,完成对云端服务器上的各个容器的调度和故障注入。
其中,所述调度单元100用于向代理服务单元200发送故障注入指令;所述***包括一个或多个容器单元300,所述调度单元通过代理服务单元200分别对不同的容器单元进行故障注入,每个容器单元200都包括有容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元发出的故障注入程序。所述容器挂载目录是通过容器镜像的方式,提前预制在所述容器上的一个挂载目录,通过该容器挂载目录,所有注入程序、监控程序以及代理程序,全部都可以上传到容器对应的挂载目录上,在虚拟机或主机启动容器时,都可以访问注入程序并具备对注入程序操作的所有权限。所述代理服务单元200包括故障场景配置模块210、故障注入引擎模块220和结果监控模块230;所述故障场景配置模块210用于根据预设的故障注入场景配置相应的故障注入程序;所述故障注入引擎模块220用于接收所述调度单元发送的故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元的容器镜像挂载目录中;所述结果监控模块230用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至所述调度单元。
如图2示出了故障注入***交互图,所述调度单元设置在远程控制服务器上,通过远程方式和Docker所在的服务器进行连接,在所述Docker服务器上,通过Agent客户端与所述调度单元进行交互。所述Docker服务器上包括多个容器单元,容器1,容器2......容器N,每个容器单元包括挂载目录、APP1......APP N等,故障注入程序被封装到Inject APP中,存储在所述Docker服务器上;当所述调度单元发送故障注入指令时,所述Agent接收所述故障注入指令,并将所述故障注入指令发送给Inject APP,所述Inject APP获取对应的故障注入程序,并通过镜像的方式,将所述故障注入程序注入到容器对应的容器镜像挂载目录中,所述故障注入程序在所述容器内运行,进行故障的注入。
通过本发明实施例提供的故障注入***,一方面通过在所述代理服务单元上设置故障场景配置模块,可以针对不同的故障场景进行不同的故障注入程序的配置,能够适应多种故障场景的需要,进行多种故障的注入;另一方面,通过在容器单元上设置容器镜像挂载目录,方便的实现了故障的注入,可以将所有注入程序、监控程序以及代理程序全部上传到容器对应的挂载目录中,解决了此前需要一一进入容器内部操作的弊端,实现了各个容器注入程序的共享。
进一步的,所述代理服务单元200统一封装为Agent程序包,所述Agent包括故障场景配置模块、故障注入引擎模块和结果监控模块,下面将对代理服务器单元进行详细说明。
所述故障场景配置模块210,如图3所示,通过脚本化和场景化的方式集成和封装了故障注入程序,实现故障注入程序的统一管理,故障注入程序以脚本形式实现参数的输入和检测,每种注入场景对应一个脚本,注入程度由脚本参数进行控制,如图3所示,比如:场景为需要将进程杀掉时,则对应故障注入程序为Kill_process.sh;场景为需要使程序的运行态异常时,则对应故障注入程序为Exception.sh等等。通过故障场景库的方式,实现了对故障注入程序的统一管理和统一接口,丰富了故障注入的种类。
进一步的,所述故障场景配置模块中,可以对故障场景进行分类,比如:划分为进程外场景和进程内场景,相应的,所述故障场景配置模块包括进程外场景配置模块和进程内场景配置模块。所述进程外场景配置模块用于通过操作***命令对设置所述故障注入指令。所述进程内场景配置模块用于通过JDK接口和字节码设置所述故障注入指令,实现方式为JDK的Java Instrument接口以及Javasist字节码编辑工具,以热替换的方式替换运行态中的Java字节码逻辑。通常情况下,如图4所示,所述进程内场景配置模块对所述容器内的运行函数按入口、函数体和出口进行划分,并对函数的处理过程又划分为响应值、处理速度和处理逻辑三部分,函数的构成和函数的处理过程可以有多对多的关系,通过对响应值设置、响应速度控制、新增或修改处理逻辑即可在函数的任何地方按照我们设置的预期值进行故障注入。通过对故障场景进行分类,以使后续故障注入引擎在调度所述故障注入程序时,以及在进行故障注入时,能够采用不同的方式进行操作。
当所述调度单元100根据管理员的操作向所述代理服务单元200发送故障注入指令时,所述故障注入引擎模块220接收所述调度单元100发送的故障注入指令,并根据所述故障注入指令从所述故障场景配置模块210中获取相应的故障注入程序。其中,所述故障注入指令包括故障场景信息,所述故障注入引擎模块能够根据所述故障场景信息从所述故障场景配置模块中获取故障注入程序。如图5所示,所述故障注入程序Inject APP对于进程外的问题的处理过程为:从所述故障场景配置模块210的进程外故障配置模块中,获取故障注入程序,比如:暂停、杀死进程等,然后,匹配场景对应的注入脚本,并传递进行PID信息,将所述脚本注入到对应容器的容器镜像挂载目录中,直接运行注入脚本,直接攻击,返回注入结果。所述故障注入程序Inject APP对进程内的问题的处理过程为:从所述故障场景配置模块210的进程内故障配置模块中选择注入场景,如OOM、延迟等;配置Javasist字节码编辑工具实现的场景scenes.jar包,并传递进程PID信息,将所述故障注入程序注入到对应容器的容器镜像挂载目录中;运行注入脚本,传递场景参数(注入位置、注入值等),直接攻击,返回注入结果。
优选的,如图6所示,所述故障注入引擎模块还包括环境检查模块221、有效性检查模块222、故障恢复模块223和突发事件处理模块224。上述环境检查模块221、有效性检查模块222、故障恢复模块223和突发事件处理模块224主要用于在故障注入阶段以及在故障注入结束后,对故障注入的结果、有效性进行检查,同时,在故障注入结束后,将所述***从故障状态恢复为正常状态。
具体的,所述环境检查模块221用于根据所述故障注入指令对所述容器单元的环境信息进行检查,对注入程序的布署、Agent进程存在性以及相关环境进行检查;如果所述环境信息符合所述故障注入指令的运行要求,则执行故障注入,否则向所述调度单元返回故障注入失败信息。
所述有效性检查模块222用于在完成注入所述故障注入程序后,运行对应的所述故障注入有效性检查脚本,以便确定所述故障注入程序是否运行成功。所述故障注入有效性检查脚本为预先在所述故障场景配置模块中根据故障注入程序配置的故障注入有效性检查脚本。由于每个故障注入场景都存在不同的表现,判断注入是否成功的标准除了注入返回的成功/失败标记外,对故障注入后的程序现象判断指标才是真正注入结果的标准。本阶段是根据每个注入场景启动对应注入有效性检查脚本,将监控结果实时输出给控制台。
所述故障恢复模块223用于在所述故障注入程序执行完成后,清除所述故障注入程序,并将所述容器单元恢复到所述故障注入程序运行前的状态。所述恢复是指将整个环境还原到注入故障之前的状态,主要内容一般包括故障注入撤销、移除控制文件、删除临时文件、环境恢复检查等,在某些情况下还可以强制应用重启、日志检查等,最终将恢复详情返回给控制台。
在某些特殊情况下,还可以通过控制台控制注入的暂停、中止、重执行以及一键还原等操作,因此,所述代理服务单元200还包括:突发事件处理模块224;所述突发事件处理模块用于根据所述调度单元发送的控制指令执行暂停、中止或重执行所述故障注入程序的操作;所述突发事件处理模块还用于根据调度单元发送的控制指令执行一键还原所述容器单元的操作。
进一步的,所述结果监控模块230,是整个***的过程和结果展示模块,主要以WEB形式对生产演练人员提供定制化的故障注入演练视图,包括被注入应用***的运行状态、业务情况、流程情况,注入过程数据以及实时注入结果数据等。另外,在此模块还可以增加根据业务指标的熔断装置等,以便进一步增强演练控制能力和降低演练风险。
因此,综上所述,本发明实施例提供的故障注入***一方面通过在所述代理服务单元上设置故障场景配置模块,可以针对不同的故障场景进行不同的故障注入程序的配置,能够适应多种故障场景的需要,进行多种故障的注入;另一方面,通过在容器单元上设置容器镜像挂载目录,方便的实现了故障的注入,可以将所有注入程序、监控程序以及代理程序全部上传到容器对应的挂载目录中,方便的实现了故障的注入,解决了此前需要一一进入容器内部擦偶作的弊端,实现了各容器注入程序的共享。进一步的,还通过设置环境检查模块对所述故障注入的环境进行检查,保证了故障能够成功注入,同时,还通过设置有效性检查模块、故障恢复模块对故障注入之后的情况进行检查和恢复,大大方便了故障的注入,提高了故障注入的效率。
进一步的,本发明实施例还提出了一种用于上述故障注入***的故障注入方法,所述故障注入***通过该方法进行故障的注入,在进行故障注入之前,首先需要将所述代理服务单元部署在云端服务器上,即将故障场景配置模块、故障注入引擎模块和结果监控模块等,部署到所述Docker服务器上。当部署完成后,所述故障注入***执行故障注入方法,如图7所示,包括:
步骤401:输入参数;
通过所述调度单元向所述代理服务单元发送故障注入指令,所述故障注入指令包括故障场景信息。
步骤402:参数解析;
所述代理服务单元接收所述故障注入指令,并根据所述故障场景信息从故障场景配置模块获取相应的故障注入程序。
步骤403:判断所述待注入故障为进程内故障还是进程外故障;
所述故障注入引擎判断所述待注入故障为进程外故障还是进程内故障,当为进程外故障时,转步骤404;当为进程内故障时,转步骤406。
步骤404:场景解析;
所述故障注入引擎对获取的故障注入程序进行解析,解析出相应的脚本信息。
步骤405:执行所述故障注入程序;
当所述故障为进程外故障时,可以直接调用操作***指令,直接进行故障的注入,包括:杀死进程、暂停进程、hang进程等。
步骤406:场景解析;
所述故障注入引擎对获取的故障注入程序进行解析,解析出相应的脚本等信息。
步骤407:判断所述进程内故障的类型;
判断所述进程内故障的内容,比如:涉及响应值、响应速度还是处理逻辑等。如果涉及影响值,则转步骤408;如果涉及响应速度则转步骤409;如果涉及控制逻辑,则转步骤410。
步骤408:抛出异常、返回特定值等;
运行相应的故障注入脚本,反馈异常、特征值等。
步骤409:响应延迟、速率控制等;
运行相应的故障注入脚本,延迟响应、进行速率控制等。
步骤410:进行OOM、信息打印和FGC等操作;
运行相应的故障注入脚本,进行OOM、信息打印和FGC等操作。
步骤411:有效性检查;
由于每个注入场景都存在不同的表现,判断注入是否成功的标准除了注入返回的成功/失败标记外,对故障注入后的程序现象判断指标才是真正注入结果的标准。本阶段是根据每个注入场景启动对应注入有效性检查脚本,将监控结果实时输出给控制台。
步骤412:故障恢复;
当故障注入完成后,需要将***恢复到故障注入之前的状态。因此,恢复阶段是指将整个环境还原到注入故障之前的状态,主要内容一般包括故障注入撤销、移除控制文件、删除临时文件、环境恢复检查等,在某些情况下还可以强制应用重启、日志检查等,最终将恢复详情返回给控制台。
综上所述,所述故障注入***运行该故障注入方法,将故障注入区分为进程外故障和进程内故障,然后分别进行故障注入的调用,大大提高了故障注入的效率。同时,在故障注入以后,通过有效性检查程序,有效的保证了故障注入的成功率。
如图8所示,本发明实施例还提出了一种故障注入装置,应用于所述故障注入***,包括:代理服务单元200和容器单元300;
所述容器单元300:包括容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元200发出的故障注入程序;
所述代理服务单元200:包括故障场景配置模块210、故障注入引擎模块220和结果监控模块230;
所述故障场景配置模块210:用于根据预设的故障注入场景配置相应的故障注入程序;
所述故障注入引擎模块220:用于接收故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元300的容器镜像挂载目录中;
所述结果监控模块230:用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至所述调度单元。
进一步的,所述故障注入指令包括故障场景信息;
所述故障注入引擎模块用于根据所述故障场景信息从所述故障场景配置模块中获取故障注入程序。
进一步的,所述故障场景配置模块包括:进程外场景配置模块和进程内场景配置模块;
所述进程外场景配置模块用于通过操作***命令对设置所述故障注入指令;
所述进程内场景配置模块用于通过JDK接口和字节码设置所述故障注入指令。
进一步的,所述故障注入引擎模块还包括环境检查模块;
所述环境检查模块用于根据所述故障注入指令对所述容器单元的环境信息进行检查,如果符合所述环境信息符合所述故障注入指令的运行要求,则执行故障注入,否则向所述调度单元返回故障注入失败信息。
进一步的,所述故障场景配置模块还用于根据故障注入程序配置相应的故障注入有效性检查脚本;
所述故障注入引擎模块还用于在完成注入所述故障注入程序后,运行对应的所述故障注入有效性检查脚本,以便确定所述故障注入程序是否运行成功。
进一步的,所述代理服务单元还包括:故障恢复模块;
所述故障恢复模块用于在所述故障注入程序执行完成后,清除所述故障注入程序,并将所述容器单元恢复到所述故障注入程序运行前的状态。
进一步的,所述代理服务单元还包括:突发事件处理模块;
所述突发事件处理模块用于根据所述调度单元发送的控制指令执行暂停、中止或重执行所述故障注入程序的操作;
所述突发事件处理模块还用于根据调度单元发送的控制指令执行一键还原所述容器单元的操作。
因此,综上所述,本发明实施例提供的故障注入装置,一方面通过在所述代理服务单元上设置故障场景配置模块,可以针对不同的故障场景进行不同的故障注入程序的配置,能够适应多种故障场景的需要,进行多种故障的注入;另一方面,通过在容器单元上设置容器镜像挂载目录,方便的实现了故障的注入,可以将所有注入程序、监控程序以及代理程序全部上传到容器对应的挂载目录中,方便的实现了故障的注入,解决了此前需要一一进入容器内部擦偶作的弊端,实现了各容器注入程序的共享。进一步的,还通过设置环境检查模块对所述故障注入的环境进行检查,保证了故障能够成功注入,同时,还通过设置有效性检查模块、故障恢复模块对故障注入之后的情况进行检查和恢复,大大方便了故障的注入,提高了故障注入的效率。
图9示出了本发明提供的运行所述故障注入方法的服务器实施例的结构示意图,本发明具体实施例并不对所述服务器的具体实现做限定。
如图9所示,该服务器可以包括:处理器(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,所述存储器506包括至少一个容器,所述存储器还用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory),例如至少一个磁盘存储器。
程序510具体可以被处理器502调用使故障注入***执行上述实施例中提供的故障注入方法。具体的操作如上述故障注入方法所述,在这里不再赘述。
本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有至少一可执行指令,该可执行指令在故障注入***上运行时,使得所述故障注入***装置执行上述任意方法实施例中的故障注入方法。
本发明实施例提供了一种计算机程序,所述计算机程序可被处理器调用使故障注入装置执行上述任意方法实施例中的故障注入方法。
本发明实施例提供了一种计算机程序产品,计算机程序产品包括存储在计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令在计算机上运行时,使得所述计算机执行上述任意方法实施例中的故障注入方法。
在此提供的算法或显示不与任何特定计算机、虚拟***或者其它设备固有相关。各种通用***也可以与基于在此的示教一起使用。根据上面的描述,构造这类***所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本发明并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。上述实施例中的步骤,除有特殊说明外,不应理解为对执行顺序的限定。
Claims (10)
1.一种故障注入***,其特征在于,包括:调度单元、代理服务单元和容器单元;
所述调度单元:用于向代理服务单元发送故障注入指令;
所述容器单元:包括容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元发出的故障注入程序;其中,所述容器挂载目录是通过容器镜像的方式,提前预制在所述容器上的一个挂载目录,通过该容器挂载目录,所有注入程序、监控程序以及代理程序,全部都可以上传到容器对应的挂载目录上,在虚拟机或主机启动容器时,都可以访问注入程序并具备对注入程序操作的所有权限;
所述代理服务单元:包括故障场景配置模块、故障注入引擎模块和结果监控模块;
所述故障场景配置模块:用于根据预设的故障注入场景配置相应的故障注入程序,包括:通过脚本化和场景化的方式集成和封装故障注入程序,故障注入程序以脚本形式实现参数的输入和检测,每种注入场景对应一个脚本,注入程度由脚本参数进行控制;
所述故障注入引擎模块:用于接收所述调度单元发送的故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元的容器镜像挂载目录中;
所述结果监控模块:用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至所述调度单元。
2.如权利要求1所述的故障注入***,其特征在于,所述故障注入指令包括故障场景信息;
所述故障注入引擎模块用于根据所述故障场景信息从所述故障场景配置模块中获取故障注入程序。
3.如权利要求2所述的故障注入***,其特征在于,所述故障场景配置模块包括:进程外场景配置模块和进程内场景配置模块;
所述进程外场景配置模块用于通过操作***命令对设置所述故障注入指令;
所述进程内场景配置模块用于通过JDK接口和字节码设置所述故障注入指令。
4.如权利要求3所述的故障注入***,其特征在于,所述进程内场景配置模块还用于对所述容器内的运行函数按入口、函数体和出口进行划分;
所述进程内场景配置模块分别对所述函数的入口、函数体和出口的响应值、处理速度和处理逻辑设置故障注入指令。
5.如权利要求1所述的故障注入***,其特征在于,所述故障注入引擎模块还包括环境检查模块;
所述环境检查模块用于根据所述故障注入指令对所述容器单元的环境信息进行检查,如果符合所述环境信息符合所述故障注入指令的运行要求,则执行故障注入,否则向所述调度单元返回故障注入失败信息。
6.如权利要求5所述的故障注入***,其特征在于,所述故障场景配置模块还用于根据故障注入程序配置相应的故障注入有效性检查脚本;
所述故障注入引擎模块还用于在完成注入所述故障注入程序后,运行对应的所述故障注入有效性检查脚本,以便确定所述故障注入程序是否运行成功。
7.如权利要求6所述的故障注入***,其特征在于,所述代理服务单元还包括:故障恢复模块;
所述故障恢复模块用于在所述故障注入程序执行完成后,清除所述故障注入程序,并将所述容器单元恢复到所述故障注入程序运行前的状态。
8.如权利要求6所述的故障注入***,其特征在于,所述代理服务单元还包括:突发事件处理模块;
所述突发事件处理模块用于根据所述调度单元发送的控制指令执行暂停、中止或重执行所述故障注入程序的操作;
所述突发事件处理模块还用于根据调度单元发送的控制指令执行一键还原所述容器单元的操作。
9.一种故障注入装置,其特征在于,包括:代理服务单元和容器单元;
所述容器单元:包括容器镜像挂载目录,所述容器镜像挂载目录用于接收所述代理服务单元发出的故障注入程序;其中,所述容器挂载目录是通过容器镜像的方式,提前预制在所述容器上的一个挂载目录,通过该容器挂载目录,所有注入程序、监控程序以及代理程序,全部都可以上传到容器对应的挂载目录上,在虚拟机或主机启动容器时,都可以访问注入程序并具备对注入程序操作的所有权限;
所述代理服务单元:包括故障场景配置模块、故障注入引擎模块和结果监控模块;
所述故障场景配置模块:用于根据预设的故障注入场景配置相应的故障注入程序,包括:通过脚本化和场景化的方式集成和封装故障注入程序,故障注入程序以脚本形式实现参数的输入和检测,每种注入场景对应一个脚本,注入程度由脚本参数进行控制;
所述故障注入引擎模块:用于接收故障注入指令,并根据所述故障注入指令从所述故障场景配置模块中获取相应的故障注入程序,将所述故障注入程序注入到所述容器单元的容器镜像挂载目录中;
所述结果监控模块:用于接收所述容器单元根据所述故障注入程序运行的结果信息,并根据所述运行结果信息对所述故障注入程序进行监控,将监控结果上报至调度单元。
10.一种采用如权利要求1-8任意一项所述的故障注入***进行故障注入的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010291836.7A CN113535532B (zh) | 2020-04-14 | 2020-04-14 | 故障注入***、方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010291836.7A CN113535532B (zh) | 2020-04-14 | 2020-04-14 | 故障注入***、方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113535532A CN113535532A (zh) | 2021-10-22 |
CN113535532B true CN113535532B (zh) | 2023-11-10 |
Family
ID=78119965
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010291836.7A Active CN113535532B (zh) | 2020-04-14 | 2020-04-14 | 故障注入***、方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113535532B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114816558B (zh) * | 2022-03-07 | 2023-06-30 | 深圳市九州安域科技有限公司 | 一种脚本注入方法、设备及计算机可读存储介质 |
CN115473793B (zh) * | 2022-08-19 | 2023-08-08 | 苏州浪潮智能科技有限公司 | 一种集群ei主机环境自动恢复方法、装置、终端及介质 |
CN115438518B (zh) * | 2022-11-08 | 2023-04-07 | 恒丰银行股份有限公司 | 一种基于混沌理念的故障模拟应用*** |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102571498A (zh) * | 2012-02-09 | 2012-07-11 | 华为技术有限公司 | 故障注入控制方法和装置 |
CN106909498A (zh) * | 2015-12-22 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种Java程序注入故障的方法和*** |
CN108683553A (zh) * | 2018-03-30 | 2018-10-19 | 北京华为数字技术有限公司 | 故障注入的方法和装置 |
CN109067598A (zh) * | 2018-09-25 | 2018-12-21 | 江苏润和软件股份有限公司 | 一种基于图中心度的云计算***物理设备故障检测方法 |
CN109947535A (zh) * | 2019-03-22 | 2019-06-28 | 哈尔滨工业大学 | 面向虚拟机的故障注入套件 |
CN110554856A (zh) * | 2019-09-06 | 2019-12-10 | 航天科工广信智能技术有限公司 | 一种微服务治理*** |
CN110673993A (zh) * | 2019-09-19 | 2020-01-10 | 聚好看科技股份有限公司 | 一种故障注入方法、平台及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019086996A (ja) * | 2017-11-07 | 2019-06-06 | ルネサスエレクトロニクス株式会社 | シミュレーション装置及びプログラム |
US10678665B2 (en) * | 2018-05-21 | 2020-06-09 | Microsoft Technology Licensing, Llc | Cloud platform experimentation system |
-
2020
- 2020-04-14 CN CN202010291836.7A patent/CN113535532B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102571498A (zh) * | 2012-02-09 | 2012-07-11 | 华为技术有限公司 | 故障注入控制方法和装置 |
CN106909498A (zh) * | 2015-12-22 | 2017-06-30 | 阿里巴巴集团控股有限公司 | 一种Java程序注入故障的方法和*** |
CN108683553A (zh) * | 2018-03-30 | 2018-10-19 | 北京华为数字技术有限公司 | 故障注入的方法和装置 |
CN109067598A (zh) * | 2018-09-25 | 2018-12-21 | 江苏润和软件股份有限公司 | 一种基于图中心度的云计算***物理设备故障检测方法 |
CN109947535A (zh) * | 2019-03-22 | 2019-06-28 | 哈尔滨工业大学 | 面向虚拟机的故障注入套件 |
CN110554856A (zh) * | 2019-09-06 | 2019-12-10 | 航天科工广信智能技术有限公司 | 一种微服务治理*** |
CN110673993A (zh) * | 2019-09-19 | 2020-01-10 | 聚好看科技股份有限公司 | 一种故障注入方法、平台及*** |
Non-Patent Citations (4)
Title |
---|
Fault Injection Tools Based on Virtual Machines;Maha Kooli等;《2014 9th International Symposium on Reconfigurable and Communication-Centric Systems-on-Chip (ReCoSoC)》;全文 * |
云平台故障检测与恢复能力测评体系研究;赵经纬;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第02期);I139-48 * |
基于业务数据变异的故障注入方法研究;丁冉等;《指挥与控制学报》;第5卷(第4期);316-322 * |
面向虚拟化***的故障注入平台的研究与设计;麻彦东;《中国优秀硕士学位论文全文数据库 (信息科技辑)》(第02期);I137-7 * |
Also Published As
Publication number | Publication date |
---|---|
CN113535532A (zh) | 2021-10-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113535532B (zh) | 故障注入***、方法和装置 | |
US8151277B2 (en) | Method and system for dynamic remote injection of in-process agents into virtual machine based applications | |
US7000150B1 (en) | Platform for computer process monitoring | |
CN109800160B (zh) | 机器学习***中的集群服务器故障测试方法和相关装置 | |
Hanawa et al. | Large-scale software testing environment using cloud computing technology for dependable parallel and distributed systems | |
CN104915263B (zh) | 基于容器技术的进程故障处理方法及装置 | |
CN109510742B (zh) | 一种服务器网卡远程测试方法、装置、终端及存储介质 | |
CN111258591A (zh) | 程序部署任务执行方法、装置、计算机设备和存储介质 | |
CN105740139B (zh) | 一种基于虚拟环境的嵌入式软件调试方法 | |
CN111580926A (zh) | 模型发布方法、模型部署方法、装置、设备及存储介质 | |
CN114880159B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN112882793B (zh) | 一种容器资源共享的方法和*** | |
CN110351149A (zh) | 一种维护网络数据转发平面的方法及装置 | |
CN108268305A (zh) | 用于虚拟机自动扩缩容的***和方法 | |
CN105205391B (zh) | 一种基于完整性验证的净室实时监控方法 | |
CN111258913A (zh) | 算法自动测试方法、装置、计算机***及可读存储介质 | |
CN112199178A (zh) | 一种基于轻量化容器的云服务动态调度方法及*** | |
CN112817693A (zh) | 一种用于函数计算服务的安全容器*** | |
CN110268378B (zh) | 创建数据备份的方法、存储介质和虚拟服务器 | |
CN114995835A (zh) | 一种应用自动化部署方法、***、设备和可读存储介质 | |
CN111190875A (zh) | 基于容器平台的日志聚合方法及装置 | |
CN108241545B (zh) | ***故障的调试方法及装置 | |
CN111488306A (zh) | 攻防架构***及攻防架构***的搭建方法 | |
CN113746676A (zh) | 基于容器集群的网卡管理方法、装置、设备、介质及产品 | |
CN112035295A (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 |