专栏首页程序员升级之路故障演练利器之ChaosBlade介绍

故障演练利器之ChaosBlade介绍

一、什么是ChaosBlade

ChaosBlade是阿里巴巴在其自身故障测试和演练实践基础上,结合自身业务场景而开发的故障注入工具。

该工具目前已经开源,项目地址:

https://github.com/chaosblade-io/chaosblade

二、为什么需要故障演练

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高的命令如何使用:

blade create cpu load
--返回如下
{"code":200,"success":true,"result":"0496e31d8c619016"}

其中result相当于一个实验,如果想停止试验,执行命令:

blade destroy 0496e31d8c619016

--输出如下
{"code":200,"success":true,"result":{"Target":"cpu","Scope":"","ActionName":"fullload","ActionFlags":{}}}

功能大概分几大块:

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的设计。

本文分享自微信公众号 - 程序员升级之路(gh_1fab42db66cb),作者:刘江华

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-06-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Raft算法之选举篇

    Follower(跟随者):系统启动时默认的角色,一般来说不参与客户端读、写请求,接受Leader发送过来的心跳追加日志,在Leader挂了之后转变为Candi...

    心平气和
  • 全球智能DNS解析实践

    举个例子,我们有个域名:ab.com,服务器部署在2个机房:中国、美国;当前访问用户的IP为中国,DNS解析会返回一个中国的IP;换之是海外用户,DNS会返回海...

    心平气和
  • 扩展Redis:增加Redis命令

    Redis因高性能、轻量的优秀特性成了互联网公司缓存的标配,有的时候我们想增加一些自定义的命令,主要是重度使用Redis的场景,像抢购的场景,要保证多个Redi...

    心平气和
  • Linux系统结构目录、ls命令、文件类型、alias命令笔记

      tree命令可以树形的方式显示目录结构,在CentOS7中的最小化安装tree命令是需要自己手动安装的:

    端碗吹水
  • 一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等

    关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。

    JackJiang
  • 负载均衡技术小记

    4 层的负载均衡更偏向底层能力的转发,相对于 7 层负载均衡,负载性能更好。7 层负载均衡能做更细微粒度的负载决策。

    Cloud-Cloudys
  • 经典面试题:最长回文子串

    回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么。

    乔戈里
  • 一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等

    关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。

    JackJiang
  • 经典面试题:最长回文子串

    回文串是面试常常遇到的问题(虽然问题本身没啥意义),本文就告诉你回文串问题的核心思想是什么。

    帅地
  • Java并发之AQS源码分析(一)

    AQS 全称是 AbstractQueuedSynchronizer,顾名思义,是一个用来构建锁和同步器的框架,它底层用了 CAS 技术来保证操作的原子性,同时...

    张乘辉

扫码关注云+社区

领取腾讯云代金券