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

微信公众号:内核小王子
关注可了解更多关于数据库,JVM内核相关的知识;
若是你有任何疑问也能够加我pigpdong[1]java

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

混沌工程

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

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

monkey.png

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

hundun.png

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

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

馄饨实验的输入示例:微信

  • 模拟整个 IDC 所有宕机
  • 针对某个接口调用延迟5秒返回
  • 让某个 CPU 全负载
  • 让某个函数抛出某个异常或返回某个固定的值
  • 强制让 NTP 时间不一样步
  • 生产 IO 错误

混沌工程的原则

cs.png

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

env.png

混沌工程的应用场景

  • 提高系统容错能力以及稳定性
  • 评估系统荣灾红线
  • 验证云服务的动态扩展能力
  • 验证监控和告警的有效性以及指标是否全面
  • 故障突袭,提高相关人员定位,故障问题的能力

ChaosBlade简单介绍

ChaosBlade 是一款遵循混沌工程实验原理,提供丰富故障场景实现,帮助分布式系统提高容错性和可恢复性的混沌工程工具,可实现底层故障的注入,特色是操做简洁、无侵入、扩展性强。
Github 地址为 (https://github.com/chaosblade-io/) 和其余阿里开源的工具不一样,不在 /alibaba 下,而是放在 chaosblade-io 下架构

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

logo.png

下图为ChaosBlade发展历程,其中 ahas 为基于 ChaosBlade 的一个云上故障演练的产品。

blade.png

ChaosBlade 组件和生态

c1.png

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

c2.png

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

1.gif