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

news2025/1/4 19:12:48

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

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

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

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

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

  • 复盘分析总结风险点。

这也是蚂蚁集团内部混沌工程平台 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.coloradmin.cn/o/972403.html

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

相关文章

第四章网关

文章目录 Gateway服务网关为什么需要网关gateway快速入门断言工厂过滤器工厂路由过滤器的种类默认过滤器全局过滤器自定义全局过滤器 过滤器执行顺序 跨域问题什么是跨域问题 Gateway服务网关 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 S…

基于3D数字孪生系统开展水环境治理与修复的功能特点

“小水滴”折射“大民生”,城市供水是极为重要的民生工程、民心工程。上海市委、市政府始终把提高城市供水安全韧性摆在突出位置,着力打造更加完善、更高质量的城市供水网络体系,夯实筑牢城市供水生命线,确保城市水安全。经过多年…

TFTP服务器,NFS服务器

一,安装tftp服务器 1,什么是tftp服务器? tftp服务器是通过网络,将ubuntu程序下载到开发板中 2,安装步骤 1,保证连接外网成功 2,安装tftp服务器 sudo apt-get install tftp-hpa tftpd-hpat…

算法笔记 近似最近邻查找(Approximate Nearest Neighbor Search,ANN)

1 介绍 精准最近邻搜索中数据维度一般较低,所以会采用穷举搜索,即在数据库中依次计算其中样本与所查询数据之间的距离,抽取出所计算出来的距离最小的样本即为所要查找的最近邻。 当数据量非常大的时候,搜索效率急剧下降。——>…

公共实训中心物联网技术应用实训室建设方案

一、概述 1.1专业背景 物联网(Internet of Things)被称为继计算机、互联网之后世界信息产业第三次浪潮,它并非一个全新的技术领域,而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升,是随着传感网、通…

百度低质量站点怎么办?解决百度低质量站点的方法和工具

百度低质量站点怎么恢复?这是许多网站主和运营人员在SEO优化过程中经常面临的一个问题。百度作为中国最大的搜索引擎,对于网站收录和排名具有至关重要的影响。然而,由于各种原因,有些网站可能面临被百度降权或收录减少的情况。那么…

Netty服务端启动的整体流程-基于源码4.1.96Final分析

Netty采用的是主从Reactor多线程的模型,参考Scalable IO in Java,但netty的subReactor为一个组 一、从FileServer服务器示例入手 public final class FileServer {static final boolean SSL System.getProperty("ssl") ! null;// Use the …

RHCA之路---EX280(4)

RHCA之路—EX280(4) 1. 题目 Use the S2I functionality of your OpenShift instance to build an application in the rome project Use the Git repository at http://services.lab.example.com/php-helloworld for the application source Use the Docker image labeled re…

栈(Stack)的详解

目录 1.栈的概念 2.栈的模拟实现 1.栈的方法 2.模拟栈用(整型)数组的形式呈现 2.1栈的创建 2.2压栈 2.3栈是否为空 2.4出栈 2.5获取栈中有效元素个数 2.6获取栈顶元素 2.7完整代码实现 1.栈的概念 从上图中可以看到, Stack 继承了…

vite+vue3+element-plus

vitevue3element-plus 1.开始 npm create vitelatest app -- --template vuenpm installlnpm run dev2.引入element-ui npm install element-plus修改main.js import ElementPlus from element-plus import element-plus/dist/index.css createApp(App).use(ElementPlus).m…

剑指 Offer 65. 不用加减乘除做加法(简单)

题目: class Solution { public:int add(int a, int b) {while(b){ //总体思路:每一次加法器结果a上一次产生的进位数*进制数本位数,进制数为0的时候直接返回本位数a即可int carry a&b; //计算进位a a^b; //计算…

NC后端扩展开发

前言 在日常的工作中,会遇到各种各样的需要进行扩展开发的需求,可以使用系统预留的扩展开发机制来实现,避免修改源码。因NC产品已迭代至BIP版本,所以前端扩展方式就再进行不赘述了,本文主要介绍后端扩展开发方式&…

docker使用(二)提交到dockerhub springboot制作镜像

docker使用(二) dockerhub创建账号创建存储库成功!开始推送获取image名 提交成功SpringBoot项目制作Dockerfile镜像部署打jar包 dockerhub创建账号 (自认为可以理解为github一类的东西) 单击创建存储库按钮。 设定存…

DROID-SLAM复现(服务器端复现,yaml创建env,)

环境配置 代码地址:https://github.com/princeton-vl/DROID-SLAM git 代码 官方方法,直接拉取: git clone --recursive https://github.com/princeton-vl/DROID-SLAM.git如果从github拉取很慢,可以直接从gitee上拉取同步的代码…

code阶段——gitgitlab安装

在code阶段,我们需要将不同版本的代码存储到一个仓库中,常见的版本控制工具就是SVN或者Git,这里我们采用Git作为版本控制工具,GitLab作为远程仓库。 Git安装 https://git-scm.com/(傻瓜式安装) GitLab安…

【业务功能篇97】微服务-springcloud-springboot-电商购物车模块-获取当前登录用户的购物车信息

购物车功能 一、购物车模块 1.创建cart服务 我们需要先创建一个cart的微服务&#xff0c;然后添加相关的依赖&#xff0c;设置配置&#xff0c;放开注解。 <dependencies><dependency><groupId>com.msb.mall</groupId><artifactId>mall-commo…

docker使用(一)生成,启动,更新(容器暂停,删除,再生成)

docker使用&#xff08;一&#xff09; 编写一个 Dockerfile构建镜像构建失败构建成功 运行镜像运行成功 修改代码后再次构建请不要直接进行构建&#xff0c;要将原有的旧容器删除或暂停停止成功删除成功再次构建且构建成功&#xff01; 要创建一个镜像&#xff0c;你可以按照以…

OpenCV(十八):图像直方图

目录 1.直方图统计 2.直方图均衡化 3.直方图匹配 1.直方图统计 直方图统计是一种用于分析图像或数据的统计方法&#xff0c;它通过统计每个数值或像素值的频率分布来了解数据的分布情况。 在OpenCV中&#xff0c;可以使用函数cv::calcHist()来计算图像的直方图。 calcHist(…

Docker使用数据卷挂载进行数据存储与共享

一、挂载和数据卷 在 Docker 中&#xff0c;挂载&#xff08;Mounting&#xff09;和数据卷&#xff08;Data Volumes&#xff09;是用于在容器和宿主机之间共享数据的机制。 挂载&#xff1a;将宿主机文件系统中的目录或文件与容器中的目录或文件进行关联的过程。数据卷&…

Linux系统--基础IO

文章目录 文件的概念 C语言 文件 IO 相关操作 系统调用接口 文件描述符 一、文件的概念 1.在系统角度上来说 文件内容属性 如果在磁盘上建立一个为0KB的文件&#xff0c;磁盘上也会存储文件的属性。(因为文件的属性也是数据). 文件的操作 1.一种是对于文件内容做操作。2.另…