ChaosBlade是阿里巴巴在其自身故障测试和演练实践基础上,结合自身业务场景而开发的故障注入工具。
该工具目前已经开源,项目地址:
https://github.com/chaosblade...
ChaosBlade是一款故障注入工具,是整个故障演练的一个小环节,那为什么要做故障演练呢?
在我看来,主要是为了验证在故障场景程序的可靠性和可用性,因为大部分人写代码都有惯性,只喜欢写正向流程,对于一些异常处理往往是非常简单和粗暴的,所以很有可能出现在系统发生故障时可能出现各种问题:如数据丢失、数据对不上等。
故障演练主要是通过模拟一个个故障场景来验证程序的可靠性和可用性,这样也反过来提升系统架构,为后续开发、设计提供一些指导。
如果不想自己修改代码,可以用官方版本:
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
官方文档已经介绍的非常详细了,建议仔细阅读:
https://chaosblade-io.gitbook...
这里介绍一个模拟CPU Load高的命令如何使用:
blade create cpu load
其中result相当于一个实验,如果想停止试验,执行命令:
blade destroy 0496e31d8c619016
功能大概分几大块:
1、模拟CPU负载高
blade create cpu load
2、模拟磁盘IO压力
blade create disk fill
3、内存负载
4、模块网络负载
有模块延迟、丢包、重复等场景,这里就不一一详述了
5、模拟进程宕掉
6、JVM
可以指定类,方法注入延迟、返回值、异常故障场景,也可以编写 groovy 和 java 脚本来实现复杂的场景。
7、WEB服务
后台启动 blade,会暴露出 web 服务,上层可通过 http 调用。
请求格式是 chaosblade?cmd=具体命令,例如执行 CPU 满载,则请求是 chaosblade?cmd=create%20cpu%20fullload
ChaosBlade的功能非常强大,常见的故障场景都能覆盖到,另外还提供了远程控制的能力,美中不足的是目前没有开源相应的控制台,如果需要最终落地并且产品化还需要做进一步开发,不过阿里 的AHAS已经集成了ChaosBlade,如果只是用了一个云厂商可以不用自己开发了,如果使用多个云厂商,像国内阿里云,海外AWS的这种情况,就需要自己做进一步的开发了。
真的需要做控制台,细节很多,如何自动化发现ChaosBlade,并且和自己的业务结合,还是需要自己做进一步的开发,如我在Mysql和Redis上都部署了ChaosBlade,如果识别自己操控的是Mysql还是Redis,这就涉及到ChaosBlade的管理了,这个可以参考下ServiceMesh的设计。
线上故障处理实践
扩展Redis:增加Redis命令
从一次线上故障来看redis删除机制
一次线上Mysql死锁分析
欢迎关注我们的微信公众号,每天学习Go知识