如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?

当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点:

  • 检测当前环境是否符合演练预设条件(演练准入);

  • 业务流量是否满足(流量注入);

  • 注入后判断故障效果是否符合预期(故障度量);

  • 是否在预设时间内恢复了业务服务(恢复度量);

  • 复盘分析总结风险点。

这也是蚂蚁集团内部混沌工程平台 XMonkey 在多年复杂故障演练场景中时常遇到的问题。

作为蚂蚁集团研发、测试、质量、SRE 等人员进行历史故障演练和挖掘系统潜在风险的重要平台,XMonkey 在公司级大规模红蓝攻防演练实践中沉淀了丰富且专业的方法论,在业界有极高的分享价值。基于经验共享与探讨的角度,XMonkey 的对外开源版本 ChaosMeta 在近日宣布正式开源。同时,ChaosMeta 也成为了 OceanBase 生态伙伴的新成员。

ChaosMeta 能做什么?

混沌工程生命周期

ChaosMeta 是一款面向云原生、自动化演练而设计的混沌工程平台,基于业界现状和攻防演练的常见痛点,结合蚂蚁集团在混沌工程领域的多年经验,提出了混沌工程生命周期模型(见图1)。该模型覆盖了“准入检测”“流量注入”“故障注入”“故障度量”“恢复度量”“注入恢复”等各个阶段的技术支撑,为自动化混沌工程提供技术依据。

图片

图1 混沌工程生命周期模型

也就是说,ChaosMeta 提供了完整的混沌工程生命周期的一站式演练综合解决方案,助力用户快速挖掘业务应用和系统的潜在风险。除此之外,ChaosMeta 还内置了蚂蚁集团在技术风险领域多年沉淀的“风险目录”,这是一份对各技术领域的基础通用风险的汇总。

沉淀多年的“风险目录”

蚂蚁集团内部每年都会举行公司级大规模红蓝攻防演练活动,面向公司全体业务,并且也有不少业务进行 7X24 小时演练以及月度常态演练。

演练对象类型覆盖云产品、Kubernetes、Operator 应用、数据库( OceanBase、MySQL 等)、中间件(消息队列、分布式调度、配置中心等)、业务应用(交易系统、营销系统等)等。

以 OceanBase 的攻防演练为例,使用 ChaosMeta 对 OceanBase 集群的任意节点注入磁盘 I/O 夯的故障,其底层原理是通过使用 cgroup 的 blkio 子系统对 OBServer 进程进行 I/O 限制,考查 OceanBase 集群对磁盘 I/O 类故障的发现、定位、自愈的效率;还会随机对 OceanBase 集群中任意节点的 clog、ilog、slog 等日志目录的磁盘填满,考查能否快速定位哪个节点的哪个日志目录被填满并进行相应的应急处理。

对于每种类型的应用,都能抽象出一些比较通用的公共风险:

  • 比如消息队列,会有消息堆积、消息丢失、消息顺序混乱、依赖方网络不稳定等风险;

  • 比如交易系统,会有分布式事务、金额一致性、并发冲突等风险;

  • 比如数据库,会有磁盘 I/O 故障、磁盘填满、节点间网络故障等风险。

“风险目录”是蚂蚁集团在大型金融互联网架构环境下,多年打磨、沉淀而来的一份“风险百科全书”,其中,开源界通用的风险,将会内置到 ChaosMeta 中,作为自动化混沌工程的理论依据。

丰富的云原生故障注入能力

大规模高频率的演练活动,推动了各种各样的故障注入能力建设。除了业界常见的系统资源故障、内核故障、网络故障、JVM 注入等,ChaosMeta 还提供了丰富的云原生故障注入能力。例如:

  • 给 Kubernetes 集群堆积大量 pending 状态的 pod,拖垮调度系统;

  • 给某个资源对象的创建流程注入动态校验 Webhook,延长校验时间,影响创建效率;

  • 注入动态变更 Webhook 使特定字段变异;

  • 建立大量 Watch&List 链接,加重 APIServer 回调 Operator 的负担等。

以混沌工程生命周期的平台能力为技术支撑,“风险目录”作为理论支撑,使 ChaosMeta 得以朝着自动化混沌工程演进。

图片

ChaosMeta 是如何实现的?

ChaosMeta 的核心平台能力是基于 Operator 开发模式实现的,因此,其天然支持云原生。ChaosMeta 分为三层设计(见图2 ),详见官方文档,地址👇

https://chaosmeta.gitbook.io/chaosmeta-cn

图片

图2  ChaosMeta 架构设计

最上层的用户层由 chaosmeta-platform 组件构成,其主要任务是降低用户的使用门槛,提供可视化界面,方便用户使用计划、编排、实验配置、实验记录详情等平台功能。

中间的引擎层包含了 ChaosMeta 的远程注入、编排、度量等核心平台能力以及部分云原生故障能力的实现。

作为底层的内核层,主要为单机故障注入能力的实现,包含了 chaosmetad 组件,提供了常驻 HTTP 服务的方式以及命令行执行的方式,还封装了对应的 daemonset 组件(chaosmeta-daemonset),可灵活搭配不同需求的演练平台。

图片

ChaosMeta 的后续规划

ChaosMeta 的规划分为平台能力和故障注入能力两个主体路线,当前主要任务是把架构图中的主体能力都完成对外版改造,并进行开放。

另外,ChaosMeta 会继续加强与 OceanBase 社区的合作,支持 OceanBase 的故障演练能力。

平台能力演进

ChaosMeta 平台能力的未来演进分为三大阶段。

第一阶段,人工配置。此阶段的目标是将架构图中的组件都对外开放,此时,即可支撑完整的混沌工程生命周期,进入初级自动化混沌工程领域,以“风险目录”作为理论参考,一次人工配置,多次自动执行。

第二阶段,自动化。此阶段下,“风险目录”会发挥更大的价值,它不仅能分析一类应用会有什么风险,作出风险评估,还会给出对应的预防以及应急建议。ChaosMeta 会将“风险目录”集成为通用组件的风险体检套餐,实现一键“体检”能力,用户输入目标应用信息后,得到风险评分以及风险分析报告。

第三阶段,智能化。探索结合人工智能的方向,自动生成更多未知的风险场景。

故障注入能力演进

图3 仅为故障能力分类,具体提供的原子故障能力详见官方文档(欢迎提交 issue,提出新能力需求,需求较高的优先提供):

图片

图3 故障能力分类

与 OceanBase 社区的后续合作

ChaosMeta 的内部版本 XMonkey 近几年持续支持 OceanBase 的常态攻防演练,达500+次,包含:磁盘 I/O 故障、磁盘填满(日志盘/数据盘)、节点间网络异常等场景,这些攻防演练经验将分享到 OceanBase 开源社区中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/69443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue基础1:生命周期汇总(vue2)

Description 生命周期图: 可以理解vue生命周期就是指vue实例从创建到销毁的过程,在vue中分为9个阶段:创建前/后,载入前/后,更新前/后,销毁前/后,其他;常用的有:created&…

C#常用多线程(线程同步,事件触发,信号量,互斥锁,共享内存,消息队列)

using System; using System.Threading; using System.Windows.Forms; using UtilForm.Util;namespace UtilForm {// 线程同步,事件触发,信号量,互斥锁,共享内存,消息队列public partial class frmUIThread : Form{ Sy…

autojs修改顶部标题栏颜色

顶部标题栏的名字是statusBarColor 不是toolbar。难怪我搜索半天搜不到 修改之后变成这样了 代码如下: "ui"; importClass(android.view.View); importClass(android.graphics.Color); ui.statusBarColor(Color.parseColor("#ffffff")); ui.…

一个月能做什么?成长感悟分享

一个月做了什么? 八月做了些什么? 单词打卡 第一件事情就是单词打卡 英语很差的我,一样继续打卡,今天是第736天 当你还在纠结扇贝和不背、可可英语哪一个好的时候,别人已经同时使用了 当你还在咨询学编程、敲代码需…

Pygame中Trivia游戏解析6-1

1 Trivia游戏简介 Trivia的含义是“智力测验比赛中的各种知识”。Trivia游戏类似智力竞赛,由电脑出题,玩家进行作答,之后电脑对玩家的答案进行判断,给出结果并进行评分。该游戏的界面如图1所示。 图1 Trivia游戏界面 2 游戏流程 …

git 后悔药

前言 自上而下,撤销可以分为从远程库撤销,从本地库撤销,从暂存库撤销。 例子:代码已经提交了三个记录到远程库,分别对应了记录1,内容1,记录2,内容2,记录3,内…

QTday5(QT连接TCP通信)

一、Xmind整理&#xff1a; C语言中的通信协议&#xff1a; 二、上课笔记整理&#xff1a; 1.QT中的服务器端的操作&#xff1a; .pro文件&#xff1a; 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务…

npm install依赖冲突解决办法

今天npm的时候发现报错&#xff0c;原来是依赖冲突了 npm后面加上这个指令就可以顺利的安装依赖了。问题主因就是不同开发用了不同版本node导致依赖版本不同&#xff0c;出现了成功冲突&#xff0c;这是段指令&#xff1b;它告诉npm忽略项目中引入的各个依赖模块之间依赖相同但…

layui 新增tab标签页

// $("#fjyj").click(function () {// //window.location.href "/sysconfig/SuperVisorEdit";// navigateToTeamPersonModule(/CollectData/GradeWarning/EduIndex, 分级预警);// });function navigateToTeamPersonModule(url, name) {var ids n…

如何截取视频中的一段视频?分享几种视频分割方法

当处理长视频时&#xff0c;视频分割可以使您更加高效。如果您只需要处理其中的一部分&#xff0c;而不是整个视频&#xff0c;那么分割视频可以使您更容易找到需要处理的部分。而且&#xff0c;分割视频还可以使您更容易在不同的项目之间重复使用视频片段。教大家几种简单的视…

基于blockqueue的生产和消费模型

线程篇下讲的是基于阻塞队列的生产者消费者模型。在学习这个之前我们先了解一些其他概念&#xff1a; 同步&#xff1a;在保证数据安全的条件下&#xff0c;让线程按某种特定的顺序依次访问临界资源。 通过上一节的代码我们实现了一个多线程抢票的程序&#xff0c;但结果显示…

分布式锁之redis实现

docker安装redis 拉取镜像 docker pull redis:6.2.6 查看镜像 启动容器并挂载目录 需要挂在的data和redis.conf自行创建即可 docker run --restart always -d -v /usr/local/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf -v /usr/local/docker/redis/data:/dat…

使用 【jacoco】对基于 SpringBoot 和 Dubbo RPC 的项目生成测试覆盖率报告:实践+原理

基于 Dubbo RPC 的项目中有一个提供者项目backend、一个消费者项目gateway、以及注册中心nacos。本篇文章记录在windows本地对该框架的测试过程&#xff0c;以及介绍jacoco的基本原理 测试过程 官网下载安装包解压到本地&#xff0c;https://www.jacoco.org/jacoco/ 只需要用…

11. Junit

我们主要学习的是 Junit5. 1. selenium 和 Junit 之间的关系 selenium 和 Junit 之间的关系 就像 Java 和 JavaScript 之间的关系&#xff0c;也就是没有关系。 为什么学习了 selenium 还要学习 Junit 呢&#xff1f; 举个例子&#xff0c;如果 Selenium 编写的自动化测试用…

论坛系统公共组件部分

1.在Java⽬录下创建包&#xff0c;在Resources⽬录下创建⽂件夹&#xff0c;结构如下 ├─java # java⽂件区 │ └─com │ └─example │ └─demo │ ├─common # 公共类 │ ├─config # 配置…

MySQL表操作

目录 一、创建mysql表的结构 1.在mydb数据库下创建一个表格名字为stu_info&#xff0c;里面结构包含了学号和姓名的名称&#xff0c;字符型以及他的引擎为innodb 字符集为gbk 校队规则为gbk_chinese_ci 二、数据库表查看的基本用法语句 1.查看数据库表明 2.查看数据库表的结…

数字图像处理:亮度对比度-几何变换-噪声处理

文章目录 数字图像增强亮度与对比度转换几何变换图像裁剪尺寸变换图像旋转 噪声处理添加噪声处理噪声 数字图像增强 亮度与对比度转换 图像变换可分为以下两种&#xff1a; 点算子&#xff1a;基于像素变换&#xff0c;在这一类图像变换中&#xff0c;仅仅根据输入像素值计算…

【计算机网络】 ARP协议和DNS协议

文章目录 数据包在传输过程中的变化过程单播组播和广播ARP协议ARP代理免费ARP路由数据转发过程DNS协议 数据包在传输过程中的变化过程 在说ARP和DNS之前&#xff0c;我们需要知道数据包在传输过程的变化过程 从图片中可以看到&#xff0c;发送方的原数据最开始是在应用层&…

vscode使用delve调试golang程序

环境配置 delve仓库&#xff0c;含有教程&#xff1a;https://github.com/go-delve/delve golang的debugging教程&#xff1a;https://github.com/golang/vscode-go/wiki/debugging > go version go version go1.20 windows/amd64> go install github.com/go-delve/de…

华为云Stack的学习(五)

六、华为云stack服务简介 1.云服务在华为云Stack中的位置 云服务对接多个数据中心资源池层提供的资源&#xff0c;并向各种行业应用提供载体。 2.华为云Stack通用服务 2.1 云计算的服务模式 2.2 计算相关的云服务 2.3 存储相关的云服务 2.4 网络相关的云服务 3.云化案例 **…