作者 | 肖长军 穹谷 桑杰
ChaosBlade 是阿里巴巴 2019 年开源的混沌工程项目 已加入到 CNCF Sandbox 中。起初包含面向多环境、多语言的混沌工程实验工具 chaosblade 到现在发展到面向多集群、多环境、多语言的混沌工程平台 chaosblade-box 平台支持实验工具托管和工具自动化部署 通过统一用户实验界面 将用户的精力聚焦在通过混沌工程解决云原生过程中高可用问题上。本文从混沌实验模型抽象、混沌实验工具开源和混沌工程平台升级项目三阶段出发 详细介绍 ChaosBlade。
在今年可信云测评中 阿里云故障演练平台以最高分首批通过可信云混沌工程平台能力要求最高等级-先进级认证。
ChaosBlade 项目覆盖基础资源、应用服务、容器服务等混沌实验场景。在实验工具设计之初就考虑了场景模型统一 便于场景扩展和沉淀 也为平台托管实验工具实现统一场景调用提供模型依据。ChaosBlade 项目中所有的实验场景均遵循此实验模型设计 下面通过实验模型的推导、介绍、意义和具体的应用来详细介绍此模型。
混沌实验主要包含故障模拟 我们一般对故障的描述如下
10.0.0.1 机器上挂载的 A 磁盘满造成了服务不可用通过上述 我们可以使用以下句式来描述故障 因为某某机器 或集群中的资源 如 Node Pod 上的哪个组件发生了什么故障 从而造成了相关影响。我们也可以通过下图来看故障描述拆分
可以通过这四部分来描述现有的故障场景 所有我们抽象出了一个故障场景模型 也称为混沌实验模型。
此实验模型详细描述如下
使用此模型可以很清晰表达出以下实施混沌实验需要明确的问题
混沌实验的实施范围是什么实施混沌实验的对象是什么实验对象触发实验的条件有哪些具体实施什么实验场景此模型具有以下特点
简洁 层次清晰 通俗易懂 通用 覆盖目前所有的故障场景 包含基础资源、应用服务、容器服务、云资源等 易实现 很方便的定义清晰的接口规范 实验场景扩展实现简单 语言、领域无关 可以扩展多语言、多领域的模型实现。此模型具有以下的意义
更精准的描述混沌实验场景 更好的理解混沌实验注入 方便沉淀现有的实验场景 依据模型发掘更多的场景 混沌实验工具更加规范、简洁。混沌实验模型的应用可归纳为以下几点
混沌实验模型使实验场景变量参数化 参数规范化 可遵循模型实现实验场景领域化的水平扩展 可将混沌实验模型和领域内标准化实现相结合 便捷实现领域内场景垂直扩展 上层的领域场景可以复用遵循混沌实验模型定义的场景 通过混沌实验模型声明的场景描述可以很好的接入到 ChaosBlade 中 遵循实验模型可以很方便的构建上层混沌实验平台。下文重点介绍基于此模型实现的混沌工程工具 ChaosBlade。
阿里巴巴内部从最早引入混沌工程解决微服务的依赖问题 到业务服务、云服务稳态验证 进一步升级到公共云、专有云的业务连续性保障 以及在验证云原生系统的稳定性等方面积累了比较丰富的场景和实践经验。并且当时混沌工程相关的开源工具存在场景能力分散、上手难度大、缺少实验模型标准 场景难以扩展和沉淀等问题。这些问题就会导致很难实现平台化 你很难通过一个平台去囊括这些工具。所以开源混沌工程实验执行工具 chaosblade 下面通过场景介绍、使用方式、架构设计和案例来详细介绍此工具。
Chaosblade 工具设计初期就考虑了易用性和场景扩展的便捷性 方便大家上手使用以及根据各自需要扩展更多的实验场景 遵循混沌实验模型提供了统一的操作简洁的执行工具。混沌实验工具支持 Linux、Windows、Docker、Kubernetes等系统平台 覆盖 Java、Golang、NodeJS、C 语言应用 共涉及 200 多个实验场景 3000 多个实验参数 v1.0.0-GA 。目前包含的场景领域如下
ChaosBlade 是个直接下载解压就可以使用的工具 不需要安装 然后它支持的调用方式包含 CLI 方式 直接执行 blade 命令。
比如这里举的做网络延迟的例子 你添加 -h 参数就可以看到非常完善的命令提示 比如我要一个 9520 端口调用做网络丢包 对齐前面的实验模型 我们就可以看到 它的演练目标是 network 它的 action 是丢包 它的 matcher 就是调用远程的一个服务端口 9520。执行成功后会返回实验结果 每一个实验场景我们都会作为一个对象 它会返回一个实验对象的 UID 此 UID 用于后续的实验管理 比如销毁、查询实验都是通过此 UID 来做的。要销毁实验 也就是恢复实验 直接执行 blade destroy 命令就可以了。
ChaosBlade 另一种调用方式是 Web 方式 通过执行 server 命令对外暴露 HTTP 服务 那么在上层 你如果自己构建混沌实验平台的话 你直接可以通过 HTTP 请求去调用就可以。
ChaosBlade 依据领域实现封装成各自独立的项目 每个项目根据各领域的最佳实践来实现 不仅能满足各领域使用习惯 而且还可以通过混沌实验模型来建立与 chaosblade cli 项目的关系 方便使用 chaosblade 来统一调用 各领域下的实验场景依据混沌实验模型生成 yaml 文件描述 暴露给上层混沌实验平台 混沌实验平台根据实验场景描述文件的变更 自动感知实验场景的变化 无需新增场景时再做平台开发 使混沌平台更加专注于混沌工程其他部分。目前包含的执行器项目如下
通过一个 Dubbo 微服务案例 来介绍 chaosblade 工具的使用。这个微服务 Demo 分三级调用 consumer 调用 provider provider 调用 base 同时 provider 还调用 mk-demo 数据库 provider 和 base 服务具有两个实例。
这个案例执行的实验场景是数据库调用延迟 我们先定义监控指标 慢 SQL 数和告警信息 做出期望假设 慢 SQL 数增加 钉钉群收到慢 SQL 告警。接下来执行实验。我们直接使用 chaosblade 工具执行 可以看下左下角 我们对 demo-provider 注入调用 mysql 查询时 若数据库是 demo 且表名是 d_discount 则对 50% 的查询操作延迟 600 毫秒。
我们使用阿里云产品 ARMS 做监控告警。大家可以看到 当执行完混沌实验后 很快钉钉群里就收到了报警。所以我们对比下之前定义的监控指标 是符合预期的。但需要注意的是这次符合预期并不代表以后也符合 所以需要通过混沌工程持续性的验证。出现慢 SQL 可通过 ARMS 的链路追踪来排查定位 可以很清楚的看出哪条语句执行慢。
为了让使用者将精力聚焦在通过混沌工程解决系统高可用问题上 而不是实验工具的选择、部署上 所以将 ChaosBlade 品牌进行升级 开源 chaosblade-box 混沌工程平台。平台托管主流的混沌实验工具 实现工具自动化的部署 通过统一的操作页面实现混沌工程实施。
下面通过平台的功能特点、架构设计及使用案例来介绍混沌工程平台 chaosblade-box。
具备以下功能特点
通过控制台页面可实现 chaosblade、litmuschaos 等已托管工具自动化部署 按照社区的建立的混沌实验模型统一实验场景 根据主机、Kubernetes、应用来划分目标资源 通过目标管理器来控制 在实验创建页面 可以实现白屏化的目标资源选择。平台通过调用混沌实验执行来执行不同工具的实验场景 配合接入 prometheus 监控 可以观察实验 metric 指标 后续会提供丰富的实验报告。Chaosblade-box 的部署也非常简单 具体可以查看
https://github.com/chaosblade-io/chaosblade-box/releases
安装部署完成后 通过配置 Kubernetes 集群或者主机信息 可以在机器列表页面看到集群或主机数据。选择实验管理创建实验 演练维度支持主机、Node、Pod、Container 维度 选择相应的维度后 会出现对应的资源列表 可以很方便的选择。演练内容包含所托管的所有实验场景。完成实验创建后 自动跳转到演练详情页面 点击执行跳到任务详情页。
演练任务详情页面展示实验的基本信息和实验任务状态 可以很方便的控制实验 以及明确实验任务状态。
ChaosBlade 未来以云原生为基础 提供面向多集群、多环境、多语言的混沌工程平台和混沌工程实验工具。实验工具继续聚焦在实验场景丰富度和稳定性方面 支持更多的 Kubernetes 资源场景和规范应用服务实验场景标准 提供多语言实验场景标准实现。
后续会将阿里云故障演练平台 可信云混沌工程平台先进型认证 核心功能开源 与现有的混沌工程平台进行融合 实现更多能力的开放。同时简化混沌工程工具部署实施方面 后续会托管更多的混沌实验工具和兼容主流的平台 实现场景推荐 提供业务、系统监控集成 输出实验报告 在易用的基础上完成混沌工程操作闭环。
作者介绍
肖长军 花名 穹谷 阿里巴巴技术专家 开源项目 ChaosBlade Founder Maintainer 阿里云故障演练平台端侧负责人 可信云标准专家 混沌工程布道师 多年分布式系统架构和稳定性建设经验。
桑杰 就职于中国农业银行研发中心 从事于财务相关系统大数据研发工作。
很长时间没有更新原创文章了,但是还一直在思考和沉淀当中,后面公众号会更频繁...
在TOP云(zuntop.com)科技租赁过服务器的站长都知道独立服务器在价格上比VPS主...
最近,DevOps的采用导致了企业计算的重大转变。除无服务器计算,动态配置和即付...
本文转载自网络,原文链接:https://mp.weixin.qq.com/s/vlOUg46B5bcmToX-fjavJQ...
2020年对于云计算行业来说是突破性的一年,因为公共云供应商增加了收入,而疫情...
查看表结构,sbtest1有主键、k_1二级索引、i_c二级索引 CREATE TABLE `sbtest1` ...
定义 this是函数运行时自动生成的内部对象,即调用函数的那个对象。(不一定很准...
9月17日,2020云栖大会上,阿里云正式发布工业大脑3.0。 阿里云智能资深产品专家...
中国最?好的一朵云飘进了华瑞银行。阿里云将进一步助力华瑞银行All in Cloud。 -...
一、PostgreSQL行业位置 一 行业位置 首先我们看一看RDS PostgreSQL在整个行业当...