解析阿里开源混沌工程工具ChaosBlade是什么?

栏目: 软件资讯 · 发布时间: 5年前

内容简介:历史文章回顾

微信公众号:内核小王子

关注可了解更多关于数据库,JVM内核相关的知识;

如果你有任何疑问也可以加我pigpdong [1]

高可用架构是保障服务稳定性的核心。

混沌工程

我们可以把混沌工程看作揭示分布式系统中未知的弱点而进行的实验。混沌工程师通过应用一些经验探索的原则,来学习观察系统是如何反应的。这就跟科学家做实验去学习物理定律一样,混沌工程师通过做实验去了解系统。

混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心,最早由Netflix及相关团队提出。

解析阿里开源混沌工程工具ChaosBlade是什么?

现在大部分的混沌工程项目都叫做 Monkey,也就是这只讨厌的猴子,在你的系统里面上蹦下窜,不停捣乱,直到搞挂你的系统。通过混沌实验,我们可以了解到系统脆弱的一面,在还没出现对用户造成伤害之前,我们就能主动发现这些问题,提升整个系统的弹性。

解析阿里开源混沌工程工具ChaosBlade是什么?

和故障注入以及故障测试的区别

混沌工程、故障注入和故障测试在关注点和 工具 中都有很大的重叠。但前者主要侧重通过实践产生无法预知的信息,帮助我们更好的认识系统,有更多的不确定性,而后者更偏重于是否达到预期,就像程序里的Assert断言一样,如果不符合预期就抛出异常。故障测试以某种预想的方式破坏系统,但没有探索更多可能发生的奇怪场景。本质上是实验和测试的区别,后者主要用来验证,前者用来发现新知识。

馄饨实验的输入示例:

  • 模拟整个 IDC 全部宕机

  • 针对某个接口调用延迟5秒返回

  • 让某个 CPU 全负载

  • 让某个函数抛出某个异常或返回某个固定的值

  • 强制让 NTP 时间不同步

  • 生产 IO 错误

混沌工程的原则

解析阿里开源混沌工程工具ChaosBlade是什么?

下图为可能的故障分类,我们可以通过 Java 字节码技术和操作系统层面的工具来分别模拟进程内和进程外的故障。随着Serverless、 Docker 等新架构、新技术的出现,故障实现机制和承接载体也将会有一些新的变化。

解析阿里开源混沌工程工具ChaosBlade是什么?

混沌工程的应用场景

  • 提升系统容错能力以及稳定性

  • 评估系统荣灾红线

  • 验证云服务的动态扩展能力

  • 验证监控和告警的有效性以及指标是否全面

  • 故障突袭,提升相关人员定位,故障问题的能力

ChaosBlade简单介绍

ChaosBlade 是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具,可实现底层故障的注入,特点是操作简洁、无侵入、扩展性强。

Github 地址为 (https://github.com/chaosblade-io/) 和其他阿里开源的工具不同,不在 /alibaba 下,而是放在 chaosblade-io 下

chaos [ˈkeɪɒs] 意思为馄饨的,混乱的  blade [bleɪd] 意思为 刀片 刀身 刀刃  连起来读就是 cosplay

解析阿里开源混沌工程工具ChaosBlade是什么?
下图为ChaosBlade发展历程,其中 ahas 为基于 ChaosBlade 的一个云上故障演练的产品。
解析阿里开源混沌工程工具ChaosBlade是什么?

ChaosBlade 组件和生态

解析阿里开源混沌工程工具ChaosBlade是什么?

ChaosBlade提供命令行的方式对实验进行管理,例如 create 创建一个实验, destroy 销毁一个实验,以及查询等。目前针对进程内的实验,针对JAVA环境主要通过javaagent字节码注入的方式进行 (这一点和另一款故障排查工具arthas一样) ,针对机器层面主要通过shell(包括docket 和 k8s)

解析阿里开源混沌工程工具ChaosBlade是什么?

ChaosBlade 特点

  • 场景丰富度高

  • 使用简单,易于理解

  • 动态加载,无侵入

  • 场景扩展方便

  • 支持运行时长设置

ChaosBlade 支持的实验

  • CPU 满载

  • 网络丢包 延迟 屏蔽

  • 域名屏蔽

  • 磁盘填充,磁盘 IO 读写负载

  • 杀进程

  • 删容器,POD

  • RPC 调用延迟

  • JAVA 方法注入指定异常和设置返回值

使用举例

docker pull registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest
docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest
docker pull registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest
docker run -it registry.cn-hangzhou.aliyuncs.com/chaosblade/chaosblade-demo:latest

./blade create cpu fullload

执行

./blade create cpu fullload

系统返回

{"code":200,"success":true,"result":"7c1f7afc281482c8"}

通过 top 命令查看 CPU 使用率

CPU usage: 93.79% user, 6.20% sys, 0.0% idle

此时命令已经生效,停止混沌实验,执行:

./blade destroy 7c1f7afc281482c8 

返回以下结果,表示停止实验成功

{"code":200,"success":true,"result":"command: cpu fullload --debug false --help false"}

再去观察 CPU 情况,CPU 负载已回到正常状态:

CPU usage: 6.36% user, 4.74% sys, 88.88% idle 

其他例子:

// 服务抛异
./blade create dubbo throwCustomException --exception java.lang.Exception --service com.alibaba.demo.HelloService --methodname hello --consumer --process dubbo.consumer


// 调用 com.alibaba.demo.HelloService 服务下的 hello 接口延迟 3 秒,我们执行以下命令:

./blade create dubbo delay --time 3000 --service com.alibaba.demo.HelloService --methodname hello --consumer --process dubbo.consumer

历史文章回顾

Java和操作系统交互细节

通过 MySQL 存储原理来分析 排序 和锁

最全的JAVA知识汇总(附讲解和思维导图)

最全的微服务知识科普


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序设计方法(中文版)

程序设计方法(中文版)

Matthias Fellisen / 黄林鹏、朱崇恺 / 人民邮电出版社 / 2003-12 / 49.00元

《程序设计方法》以Scheme语言为基础介绍计算和程序设计的一般理论和实践。《程序设计方法》由8个部分和7个独立的章节(第8、13、18、24、29、33、38章)组成。8个部分主要讨论程序设计,独立章节则介绍一些与程序设计和计算相关的话题。《程序设计方法》第1至第3部分介绍了基于数据驱动的程序设计基础。第4部分介绍了程序设计中的抽象问题。第5部分和第6部分是与递归及累积相关的内容。《程序设计方法......一起来看看 《程序设计方法(中文版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具