混沌测试-系统极端测试利器
背景
在我们日常开发过程中,会遇到各种各样的问题。有些是业务问题,可以通过自测以及测试同学测试来发现,还有一类是极端问题,平时一般不会遇到,但是恰好在客户现场出现了打的我们措手不及。没有准备就没法快速定位,所以最好的方式是可以复现问题,从而针对性的解决,所以这类问题的关键是复现。毕竟CPU打满,硬盘不够,系统年轻代、老年代、元空间OOM等这类情况是不容易出现的。如果想让他们稳定复现,从而达到解决甚至后续常态化演练的目的,那么混沌测试可以帮助你。
什么是混沌测试
它的定义是“混沌测试是一种可试验的、基于系统的方法来处理大规模分布式系统中的混乱问题”,但我习惯称它为故障演练,因为通过它可以模拟很多极端场景,像上文提到的CPU打满,OOM等问题都可以进行模拟,从而达到演练故障的目的。今天我们重点说一下混沌测试工具ChaosBlade。
什么是ChaosBlade
ChaosBlade 是阿里巴巴开源的一款遵循混沌工程原理和混沌实验模型的实验注入工具,帮助项目提升容错能力。它的使用场景可以参考官方文档中提到的,如下图
![](https://img.haomeiwen.com/i2585555/43fd0807db90bfca.png)
怎么用是ChaosBlade
安装部署
从https://github.com/chaosblade-io/chaosblade/releases下载最新的chaosblade压缩包,放到目标服务器上,解压后配置下环境变量
![](https://img.haomeiwen.com/i2585555/85174196b72936a1.png)
如果配置无误后,可以执行下blade命令,正常输出,表示配置无误
![](https://img.haomeiwen.com/i2585555/ba1ff1c6373de13d.png)
进行混沌实验
本文只演示一个场景,用来说明基础用法,他的其他用法在文档中已经写的很详细了,只要认真阅读,肯定能找到你想要
演练场景:指定JAVA项目使其CPU飚高
创建实验
blade c jvm cfl --pid 4083
![](https://img.haomeiwen.com/i2585555/b6c76d211132b151.png)
命令找那个的c是create的简写,表示创建实验的意思,jvm表示实验类型,是一个java项目,cfl是cpu fullload的简写,pid是指定java进程,通过top命令可以发现4083这个进程已经将cpu打满了
![](https://img.haomeiwen.com/i2585555/7f3b7486c0883ca7.png)
结束实验
创建实验成功后的返回值有一个result的字段72fce8dla8f3e09c,这个字段的含义是实验ID,如果你想结束实验,可以执行blade d 72fce8dla8f3e09c,其中d是destory的简写
![](https://img.haomeiwen.com/i2585555/0dadd0f5c817fe0d.png)
演练数据如何沉淀
现阶段我们已经找到了如何创建实验、关闭实验。但是要怎样把实验的数据沉淀下来呢,总不能每次测试都查文档吧,所以你缺一个控制台,它的作用是创建演练计划,沉淀演练数据,进行知识沉淀。简单来说就是把每次执行的实验参数、结果记录下来,可以方便下次使用。但是开源产品目前只有一个就是chaosblade-box,这个工具也是阿里开源的,它可以实现环境的平台化管理,进一步简化用户体验,降低使用门槛。
Chaosblade-Box测评
根据官方文档的指引安装了一下Chaosblade-Box,很有阿里云风味,最核心的一块是将演练场景可视化,不需要再看文档,他会根据你填入的参数生成对应的命令
![](https://img.haomeiwen.com/i2585555/b5303d2acf666499.png)
另外一个核心功能就是指定机器,演练具体流程
![](https://img.haomeiwen.com/i2585555/91dea2427a2824c0.png)
测评结果
优势:
-
没有产品竞争,目前市场只有这一款产品。
-
功能丰富,满足对此平台的核心诉求。
劣势:
-
没有租户隔离、权限等相关控制,这也是开源社区诟病最多的。
-
过于依赖于网络做一些事情,比如说默认脚本从网络上下载agent包之类的,对无互联网的环境不友好,例如我们的云内环境。
-
效率有提升空间,目前使用agent做命令下发,数据采集等操作。chaosblade本身可以提供HTTP的服务,这样控制台可以和chaosblade通过http通信,就可以替代agent的大部分功能。