故障演练利器之 ChaosBlade 介绍
一、什么是 ChaosBlade
ChaosBlade 是阿里巴巴在其自身故障测试和演练实践基础上,结合自身业务场景而开发的故障注入工具。
该工具目前已经开源,项目地址:
https://github.com/chaosblade-io/chaosblade
二、为什么需要故障演练
在我看来,主要是为了验证在故障场景程序的可靠性和可用性,因为大部分人写代码都有惯性,只喜欢写正向流程,对于一些异常处理往往是非常简单和粗暴的,所以很有可能出现在系统发生故障时可能出现各种问题:如数据丢失、数据对不上等。
故障演练主要是通过模拟一个个故障场景来验证程序的可靠性和可用性,这样也反过来提升系统架构,为后续开发、设计提供一些指导。
三、安装
如果不想自己修改代码,可以用官方版本:
https://github.com/chaosblade-io/chaosblade/releases
我选择的是 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-io/chaosblade
git checkout v0.6.0
make
四、使用
官方文档已经介绍的非常详细了,建议仔细阅读:
https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/
这里介绍一个模拟 CPU Load 高的命令如何使用:
其中 result 相当于一个实验,如果想停止试验,执行命令:
1、模拟 CPU 负载高
blade create cpu load
2、模拟磁盘 IO 压力
blade create disk burn
blade create disk fill
3、模块内存负载
blade create mem load
4、模块网络负载
有模块延迟、丢包、重复等场景,这里就不一一详述了
5、模拟进程宕掉
blade create process kill
blade create process stop
6、JVM
blade create 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 的设计。
版权声明: 本文为 InfoQ 作者【心平气和】的原创文章。
原文链接:【http://xie.infoq.cn/article/b241775f7efa5ab8851c970a0】。文章转载请联系作者。
评论