1、什么是ChaosBlade java
ChaosBlade是阿里巴巴在其自身故障测试和演练实践基础上,结合自身业务场景而开发的故障注入工具。git
该工具目前已经开源,项目地址:github
https://github.com/chaosblade...web
2、为何须要故障演练 redis
ChaosBlade是一款故障注入工具,是整个故障演练的一个小环节,那为何要作故障演练呢? sql
在我看来,主要是为了验证在故障场景程序的可靠性和可用性,由于大部分人写代码都有惯性,只喜欢写正向流程,对于一些异常处理每每是很是简单和粗暴的,因此颇有可能出如今系统发生故障时可能出现各类问题:如数据丢失、数据对不上等。网络
故障演练主要是经过模拟一个个故障场景来验证程序的可靠性和可用性,这样也反过来提高系统架构,为后续开发、设计提供一些指导。架构
3、安装 jvm
若是不想本身修改代码,能够用官方版本:工具
https://github.com/chaosblade...
我选择的是v0.6.0,解压后在根目录下有个blade的二进制文件。
若是想本身编译,则须要如下软件,如下是个人环境相关软件版本:
Java:1.8.1
Maven:3.6.3
Go>=1.13
Git>=1.8.5
编译步骤:
git clone https://github.com/chaosblade...
git checkout v0.6.0
make
4、使用
官方文档已经介绍的很是详细了,建议仔细阅读:
https://chaosblade-io.gitbook...
这里介绍一个模拟CPU Load高的命令如何使用:
blade create cpu load
其中result至关于一个实验,若是想中止试验,执行命令:
blade destroy 0496e31d8c619016
功能大概分几大块:
一、模拟CPU负载高
blade create cpu load
二、模拟磁盘IO压力
blade create disk fill
三、内存负载
四、模块网络负载
有模块延迟、丢包、重复等场景,这里就不一一详述了
五、模拟进程宕掉
六、JVM
能够指定类,方法注入延迟、返回值、异常故障场景,也能够编写 groovy 和 java 脚原本实现复杂的场景。
七、WEB服务
后台启动 blade,会暴露出 web 服务,上层可经过 http 调用。
请求格式是 chaosblade?cmd=具体命令,例如执行 CPU 满载,则请求是 chaosblade?cmd=create%20cpu%20fullload
这个是重点,由于前面讲的这些功能都是单机命令行的,实际的场景是但愿在一个控制台集中操做全部场景,有了这个远程通讯能力,上述需求落地才有了可能。
5、总体感觉
ChaosBlade的功能很是强大,常见的故障场景都能覆盖到,另外还提供了远程控制的能力,美中不足的是目前没有开源相应的控制台,若是须要最终落地而且产品化还须要作进一步开发,不过阿里 的AHAS已经集成了ChaosBlade,若是只是用了一个云厂商能够不用本身开发了,若是使用多个云厂商,像国内阿里云,海外AWS的这种状况,就须要本身作进一步的开发了。
真的须要作控制台,细节不少,如何自动化发现ChaosBlade,而且和本身的业务结合,仍是须要本身作进一步的开发,如我在Mysql和Redis上都部署了ChaosBlade,若是识别本身操控的是Mysql仍是Redis,这就涉及到ChaosBlade的管理了,这个能够参考下ServiceMesh的设计。