前言
为满足 C++ 应用系统故障演练,阿里妈妈安全生产团队开源了 C++ 混沌实验执行器,填补了 C++ 应用混沌工程实验的空白,其遵循《混沌实验模型》,可通过 ChaosBlade 工具直接执行。项目地址:https://github.com/chaosblade-io/chaosblade-exec-cplus 。
本文重点介绍该执行器的架构图、支持的实验场景,并以 Demo 为例介绍具体的使用方式,附录介绍了阿里妈妈内部混沌实验流程。
新版本 chaosblade 下载地址:
https://github.com/chaosblade-io/chaosblade/releases
实验场景
目前支持的 C++ 混沌实验场景如下,具体使用方式可详见下文:
针对某个方法,或者某行代码注入延迟故障;
针对某个方法,或者某行代码注入替换变量,或者对象值,可以制造调用第三方接口返回结果中包含错误码等等故障;
针对某个方法,或者某行代码注入立刻退出方法并返回指定值(可以是错误值)的故障;
架构图
解释说明:
C++ 混沌实验执行器包括 8 个模块:模型匹配器模块、应用状态获取模块、流程控制模块、在应用运行中注入故障模块、应用未启动状态启动应用并注入故障模块、故障恢复模块、卸载实验器模块 和 日志记录模块;
模型匹配器模块:会把用户传入的参数匹配《混沌实验模型》,发现不符合规范的参数,将停止执行,并返回用户相应提示;
应用状态获取模块:获取待注入故障的 C++ 应用目前的状态;
流程控制模块:可以控制整个实验器的运行流程;
在应用运行中注入故障模块:在 C++ 应用运行状态时,在不改变应用原有代码,和编译文件的情况下,直接注入故障到进程;
应用未启动状态启动应用并注入故障模块:在 C++ 应用未启动状态,在不改变应用原有代码,和编译文件的情况下,启动应用,并同时注入故障;
故障恢复模块:当某一个实验或演练场景完成,基于该模块移除该场景的故障;
卸载实验器模块:当所有实验或演练场景都完成,基于该模块移除应用所有故障,并退出 C++ 混沌实验执行器的进程;
日志记录模块:可以把 C++ 混沌实验执行器运行过程中的情况记录到日志中;
C++ 应用:待注入故障的应用,在故障注入过程中,C++ 混沌实验执行器通过 attach 方式把 C++ 应用做为自己的子进程进行状态跟踪;
ChaosBlade:混沌实验注入工具;
使用方法
可以通过如下三种方式对 C++ 应用注入故障:
登录待注入故障的机器,使用 chaosblade 提供的命令行方式实施