chaosblade 工程链接:
https://github.com/chaosblade-io/chaosblade
chaosblade-exec-jvm 工程链接:
https://github.com/chaosblade-io/chaosblade-exec-jvm
在给出模型之前,我们先明确实施一次混沌实验所涉及的一些问题:
对什么做混沌实验?
混沌实验实施的范围是什么?
具体实施什么实验?
实验生效的匹配条件有哪些?
举个例子:
一台 IP 是 10.0.0.1 机器上的应用,调用 [email protected] Dubbo 服务延迟 3s。根据上述的问题列表,先明确的是要对 Dubbo 组件做混沌实验,实施实验的范围是 10.0.0.1 单机,对调用 [email protected] 服务模拟 3s 延迟等等。 明确以上内容,就可以精准的实施一次混沌实验。我们将这些步骤总结并抽象出以下模型:
Target:实验靶点,指实验发生的组件,例如容器、应用框架(Dubbo、Redis、Zookeeper)等。
Scope:实验实施的范围,指具体触发实验的机器或者集群等。
Matcher:实验规则匹配器,根据所配置的 Target,定义相关的实验匹配规则,可以配置多个。由于每个 Target 可能有各自特殊的匹配条件,比如 RPC 领域的 HSF、Dubbo,可以根据服务提供者提供的服务和服务消费者调用的服务进行匹配;缓存领域的 Redis,可以根据 set、get 操作进行匹配。
Action:指实验模拟的具体场景,Target 不同,实施的场景也不一样,比如磁盘,可以演练磁盘满、磁盘 IO 读写高、磁盘硬件故障等实验场景。如果是应用,可以抽象出延迟、异常、返回指定值(错误码、大对象等)、参数篡改、重复调用等实验场景。
回到上述的例子,我们可以将实验总结成一句话:对 Dubbo 组件(Target)进行故障演练,演练的是 10.0.0.1 主机(Scope)的应用,调用 [email protected] (Matcher)服务延迟 3s(Action)。
伪代码可以写成:
针对上述例子,chaosblade 的调用命令是:
delay
: 模型中的 action,执行延迟演练场景。
--time
: 模型中 action 参数,指延迟时间。
--consumer
、 --service
、 --version
:模型中的 matchers,实验规则匹配器。
注: 由于 chaosblade 是在单机执行的工具,所以混沌实验模型中的 scope 默认为本机,不再显示声明。
一个组件混沌实验模型的定义,包含组件名称和所支持的实验场景列表。
一个实验场景 action 的定义,包含场景名称、场景所需参数和一些实验规则匹配器。
一个实验匹配器的定义,包含参数名、参数描述等等。
以 network 组件为例,network 作为混沌实验组件,目前包含网络延迟、网络屏蔽、网络丢包、DNS 篡改演练场景,则依据模型规范,具体实现为:
network target 定义了 DelayActionSpec
、 DropActionSpec
、 DnsActionSpec
、 LossActionSpec
四种混沌实验场景,其中 DelayActionSpec
定义如下:
DelayActionSpec
包含 2 个场景参数和 4 个规则匹配器。
通过以上示例,可以看出此模型简单、易实现,并且可以覆盖目前已知的实验场景。后续我们将对此模型进行完善,塑造一个混沌实验标准。
想要更完整的免费故障演练工具?可访问文末“阅读原文”。
时间:4 月 17 日(下周三)19:00 -- 20:00
议题:《混沌工程工具 ChaosBlade 介绍与实践》
主讲人:穹谷(本文作者)
内容概要:
混沌工程概述
介绍 ChaosBlade 项目及附属项目
介绍 chaosblade 工具及混沌实验模型
实际场景下 chaosblade 最佳实践
如何参与:按照以下方式进入钉钉群
加入我们的混沌工程社群,一起交流和探索混沌工程的实践以及发展路径:
? ChaosBlade 开源钉群(推荐,入群请备注:名称或昵称+公司+城市)
? 若没有钉钉,请添加中间件小姐姐微信,再拉入微信群(回复较慢,请耐心等待⌛️)
本文作者:
肖长军(花名:穹谷)
GitHub ID @xcaspar,阿里巴巴高级开发工程师,多年应用性能监控和混沌工程领域工作经验,阿里云产品 AHAS 核心开发,ChaosBlade 开源项目负责人。
文章缩略图
Photo by Javardh on Unsplash
/ 首场 Nacos 开发者沙龙@杭州,即刻报名 /
/ 好玩又实用,阿里巴巴开源 ChaosBlade /
©每周一推
第一时间获得下期分享
☟☟☟
Tips:
# 点下“在看”❤️
# 然后,公众号对话框内发送“锅刷”,试试手气??
# 本期奖品是来自淘宝心选的进口椰棕锅刷。