如何使用蚂蚁集团自动化混沌工程 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 开源社区中。
相关文章:

如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
当前,业界主流的混沌工程项目基本只关注如何制造故障的问题,而经常做演练相关工作的工程师应该明白,每次演练时还会遇到以下痛点: 检测当前环境是否符合演练预设条件(演练准入); 业务流量是否满…...
在 Node.js 中使用 MongoDB 事务
MongoDB事务 事务介绍 在 MongoDB 中,对单个文档的操作是原子的。由于您可以使用嵌入的文档和数组来捕获单个文档结构中的数据之间的关系,而不是跨多个文档和集合进行规范化,因此这种单一文档的原子性消除了对多文档的需求许多实际用例的事务…...

IntelliJ IDEA的远程开发(Remote Development)
DEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发操作即可,官方给出的逻辑图如下,可见通过本地的IDE和服务器上的IDE backend将本地电脑和服务器打通&am…...
网络安全-信息收集简介
本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 什么是信息收集 信息收集是指通过各种方式获取所需要的信息,以便我们在后续的渗透过程更好的…...

页面页脚部分CSS分享
先看效果: CSS部分:(查看更多) <style>body {display: grid;grid-template-rows: 1fr 10rem auto;grid-template-areas: "main" "." "footer";overflow-x: hidden;background: #F5F7FA;min…...

微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽
微信小程序文档 - slots介绍 由上述文档看俩来,微信小程序官方并没有提及动态插槽内容。 uniapp文档 - slots介绍 uni官方也未提及关于动态插槽的内容 在实际使用中,直接通过 <<slot :name"item.xxx" /> 这种形式会报错ÿ…...

l8-d6 socket套接字及TCP的实现框架
一、socket套接字 /*创建套接字*/ int socket(int domain, int type, int protocol); /*绑定通信结构体*/ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); /*监听套接字*/ int listen(int sockfd, int backlog); /*处理客户端发起的连接࿰…...

ChatGPT AIGC 完成动态堆积面积图实例
先使用ChatGPT AIGC描述一下堆积面积图的功能与作用。 接下来一起看一下ChatGPT做出的动态可视化效果图: 这样的动态图案例代码使用ChatGPT AIGC完成。 将完整代码复制如下: <!DOCTYPE html> <html> <head><meta charset="utf-8"><tit…...

虹科产线实时数采检测方案——高速采集助力智能化升级
01 产线数采检测相关技术背景 1.1 典型场景 对于产线数采检测,让我们从典型的工厂场景开始介绍。 每个工位都有上位机监控下方的PLC控制器。指令、执行单元和作用对象的状态通过内置传感器进行采集和测量,反馈给PLC实现闭环控制。 工业4.0和智能制…...

用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI
本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\07”目录下,如下图所示: 在计算机的色彩图像中存有三个通道,即 BGR 通道,根据三个颜色通道的亮度值来显示出不同的颜色&…...

低压配电室电力安全解决方案
低压电气安全监控运维系统是力安科技基于物联网核心技术自主开发的高可靠性安全监测系统。其工作原理是利用物联网、云计算、大数据、数字传感技术及RFID无线射频识别技术来获取低压配电回路电压、电流、温度、有功、无功、功率因数等全电量的采集及配电线路的漏电、温度的实时…...

【Windows 常用工具系列 11 -- 笔记本F5亮度调节关闭】
文章目录 笔记本 F 按键功能恢复 笔记本 F 按键功能恢复 使用笔记本在进行网页浏览时,本想使用F5刷新下网页,结果出现了亮度调节,如下图所示: 所以就在网上查询是否有解决这个问题的帖子,结果还真找到了:…...

Python小知识 - 【Python】如何使用Pytorch构建机器学习模型
【Python】如何使用Pytorch构建机器学习模型 机器学习是人工智能的一个分支,它的任务是在已有的数据集上学习,最终得到一个能够解决新问题的模型。Pytorch是一个开源的机器学习框架,它可以让我们用更少的代码构建模型,并且可以让模…...

使用Akka的Actor模拟Spark的Master和Worker工作机制
使用Akka的Actor模拟Spark的Master和Worker工作机制 Spark的Master和Worker协调工作原理 在 Apache Spark 中,Master 和 Worker 之间通过心跳机制进行通信和保持活动状态。下面是 Master 和 Worker 之间心跳机制的工作流程: Worker 启动后,…...

文心一言api接入如何在你的项目里使用文心一言
文心一言api接入在项目里接入文心一言 一、百度文心一言API二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 四、重要说明 一、百度文心一言API 基于百度文心一言语言大模型的智能文本对话AI机器人…...
Python匿名函数lambda(R与Python第五篇)
目录 一、为什么要引入“lambda函数”? 二、匿名函数的两种用法 参考: 本文来源:《Python全案例学习与实践》(2019年9月出版,电子工业出版社) Python允许使用一种无名的函数,称其为匿名函数…...
【2023校园招聘】 钉钉AI应用开发平台开始校招拉~
【岗位职责】 负责钉钉AI Paas 产品化研发落地,包含但不限于: 1. 用户意图理解、任务规划、服务推荐等算法的设计和开发 2. 基于大模型落地各种落地应用,缩短大模型与真实应用场景的距离 3. 负责算法的工程化落地,包括算法的代…...
Linux系统gdb调试常用命令
GDB(GNU调试器)是一款常用的调试工具,用于调试C、C等编程语言的程序。以下是一些常用的GDB命令: 1. 启动程序: - gdb <executable>:启动GDB调试器,并加载可执行文件。 2. 设置断点&a…...

Sumo中Traci.trafficlight详解(上)
Sumo中Traci.trafficlight详解(上) 记录慢慢学习traci的每一天,希望也能帮到你 文章目录 Sumo中Traci.trafficlight详解(上)Traci.trafficlight信号灯参数讲解1.getAllProgramLogics(self,tlsID)2.getBlockingVehicle…...

手写Mybatis:第13章-通过注解配置执行SQL语句
文章目录 一、目标:注解配置执行SQL二、设计:注解配置执行SQL三、实现:注解配置执行SQL3.1 工程结构3.2 注解配置执行SQL类图3.3 脚本语言驱动器3.3.1 脚本语言驱动器接口3.3.2 XML语言驱动器 3.4 注解配置构建器3.4.1 定义增删改查注解3.4.2…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...

论文阅读:Matting by Generation
今天介绍一篇关于 matting 抠图的文章,抠图也算是计算机视觉里面非常经典的一个任务了。从早期的经典算法到如今的深度学习算法,已经有很多的工作和这个任务相关。这两年 diffusion 模型很火,大家又开始用 diffusion 模型做各种 CV 任务了&am…...
[USACO23FEB] Bakery S
题目描述 Bessie 开了一家面包店! 在她的面包店里,Bessie 有一个烤箱,可以在 t C t_C tC 的时间内生产一块饼干或在 t M t_M tM 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC,tM≤109)。由于空间…...