Chaosblade 是阿里巴巴 2019 年开源的混沌工程项目,用于模拟常见的故障场景。
在网易,故障平台对chaosblade做了一层封装,好处是集成了测试环境,以及便于统一管理故障演练的用例;缺点是,因为完全在平台上进行配置,执行者对于chaosblade底层的执行命令很难完全了解。另一方面,限于平台的配置选项有限,无法发挥chaosblade全部的能力。
当然,对于绝大部分故障演练场景来说,平台化的好处是远远大于缺点的;不过,了解下平台操作对应的chaosblade命令也是极有必要的。
在实际项目中,我们把故障演练的用例分为三类:
1、系统级故障,比如应用所在机器内存、磁盘、网络发生问题等等。
2、中间件故障,比如常见的Kafka,数据库,ES引擎等等。
3、业务级故障,比如业务应用本身进程挂掉、假死等等。
本文所描述的演练故障就是在网易真实项目中模拟的所有故障类型(故障描述参考网易故障平台上的说明),入参是指在网易故障平台上需要设置的参数。然后分析对应的blade命令以及其作用。
坦率的讲,执行的是比较基础的用例,并不代表网易在这方面的最高水准;但另一方面,基础的用例对于大部分应用,大部分业务场景都足够了(过于复杂的失败用例往往不会被优化,不优化则没有给企业带来实际价值)。
一般来说,blade命令可以配置的参数是远远多于网易故障平台上的配置数量(这部分可以翻阅官方文档),但网易故障平台的配置一般是最常见最有用的配置项,可以满足绝大多数场景的需求。
系统级故障
内存满载:用于制造内存使用率故障,通过percent参数指定内存使用
入参:percent参数
CPU满载:CPU所有内核满载(内存占用率)
网络超时:通过指定本地网卡、本地监听端口、延迟时间,来设置本地的网络延迟。例如可以指定本地网卡eth0上的监听端口8080网络延迟3000ms
入参:
1、本地网卡
2、延迟时间
3、本地端口
网络抖动:指定本地网卡、本地端口、丢包比例,来确定网络抖动的程度,比例越大表示网络越不稳定
入参:
1、本地网卡
2、比例
3、本地端口
磁盘写满载(磁盘读满载):让磁盘写(读)的性能满载,可指定读数据的块大小
入参:
1、写入块大小(单位 M)
2、超时回收(单位 s)
中间件故障
Kafka连接延迟:配置远程监听端口网络延迟
入参:
1、网卡
2、远程ip
3、远程端口
4、延迟时间
中间件故障的本质都是模拟远程IP的网络延迟,所以不再重复描述。在我所在的项目中,还模拟了DB连接延迟,Redis连接延迟,ES连接延迟。
业务级故障
进程->杀死进程:通过传入进程标识或者进程号来杀死指定的进程,如传入tomcat 表示杀死系统中所有的tomcat进程。
入参:进程名
实现原理:
--process 内部使用 ps -ef | grep KEY 查找;--process-cmd 内部使用 pgrep 命令查找。使用 kill -9 PIDS 杀死进程。杀死进程后不能自动恢复,需要手动重启服务
进程->进程假死:通过传入进程标识或者进程号来假死指定的进程,如传入tomcat 表示让系统中所有的tomcat进程假死。
入参:进程名
实现原理:
使用 kill -STOP PIDS 暂停进程,使用 kill -CONT PIDS 恢复进程。
任务结束,进程状态恢复正常,无需手动重启。
发表评论