蚂蚁集团自动化混沌工程 ChaosMeta 正式开源
![蚂蚁集团自动化混沌工程 ChaosMeta 正式开源](https://static001.geekbang.org/infoq/81/8149294213458e68ecbb372038686bd6.png)
ChaosMeta 介绍
ChaosMeta 是一款面向云原生、自动化演练而设计的混沌工程平台。它是蚂蚁集团内部混沌工程平台 XMonkey 的对外开源版本,凝聚了蚂蚁集团在公司级大规模红蓝攻防演练实践中多年积累的方法论、技术能力以及产品能力。
经过公司内部多年复杂故障演练场景的驱动,XMonkey 在混沌工程领域沉淀了很多独特经验,是蚂蚁集团研发、测试、质量、SRE 等人员进行历史故障演练和挖掘系统潜在风险的重要平台。我们非常希望能将这些经验和业界进行共同探讨与共同演进,为此我们开源了 ChaosMeta。
ChaosMeta 设计上是包含了完整混沌工程生命周期的一站式演练综合解决方案,以帮忙用户快速挖掘业务应用和系统的潜在风险;除此之外,还内置了浓缩蚂蚁集团在技术风险领域多年沉淀的“风险目录”,这是一份对各技术领域的基础通用风险的汇总。
以混沌工程生命周期的平台能力为技术支撑,“风险目录”作为理论支撑,使 ChaosMeta 得以朝着自动化混沌工程演进。
核心特性
▌混沌工程生命周期
当前业界主流混沌工程项目主要都是只关注如何制造故障的问题,而经常做演练相关工作的工程师,应该明白每次演练还有以下工作的痛点:
检测当前环境是否符合演练预设条件(演练准入)
业务流量是否满足(流量注入)
注入后判断故障效果是否符合预期(故障度量)
是否在预设时间内恢复了业务服务(恢复度量)
复盘分析总结风险点
基于业界现状和上面的问题分析,结合蚂蚁集团在混沌工程领域的多年经验,ChaosMeta 提出了混沌工程生命周期模型,覆盖“准入检测”、“流量注入”、“故障注入”、“故障度量”、“恢复度量”、“注入恢复”等各个阶段的技术支撑,为自动化混沌工程提供技术依据。
![](https://static001.geekbang.org/infoq/f4/f4019223bb210dc966c4fd8c1f65242f.png)
▌风险目录
蚂蚁集团内部每年都会举行公司级大规模红蓝攻防演练活动,面向公司全体业务,并且也有不少业务进行 7X24 小时演练以及月度常态演练。
演练对象类型覆盖云产品、Kubernetes、Operator 应用、数据库(OceanBase、MySQL 等)、中间件(消息队列、分布式调度、配置中心等)、业务应用(交易系统、营销系统等)等。
对于每种类型的应用,总能抽象出一些最通用的公共风险:
比如消息队列,会有消息堆积、消息丢失、消息顺序混乱、依赖方网络不稳定等风险;
比如交易系统,会有分布式事务、金额一致性、并发冲突等风险;
比如数据库,会有磁盘 I/O 故障、磁盘填满、节点间网络故障等风险。
而“风险目录”正是蚂蚁集团在大型金融互联网架构环境下,多年打磨出来的一份“风险百科全书”,而我们会将和开源界通用的部分内置到 ChaosMeta 项目中,作为自动化混沌工程的理论依据。
▌丰富的云原生故障注入能力
大规模高频率的演练活动,也推动了各种各样的故障注入能力建设。除了业界常见的系统资源故障、内核故障、网络故障、JVM 注入等,我们还提供了丰富的云原生故障注入能力。
比如:
给 Kubernetes 集群堆积大量 pending 状态的 pod,拖垮调度系统;
给某个资源对象的创建流程注入动态校验 Webhook,延长校验时间,影响创建效率;
注入动态变更 Webhook 使特定字段变异;
建立大量 Watch&List 链接,加重 APIServer 回调 Operator 的负担等。
云原生架构
ChaosMeta 的核心平台能力是基于 Operator 开发模式实现的,因此天然支持云原生。ChaosMeta 分为三层设计,详见官方文档:
用户层由 chaosmeta-platform 组件构成,其主要任务是降低用户使用的门槛,提供可视化界面,方便用户使用计划、编排、实验配置、实验记录详情等平台功能;
引擎层包含了 ChaosMeta 的远程注入、编排、度量等核心平台能力以及部分云原生故障能力的实现;
内核层主要包含了单机故障注入能力的实现,主要包含了 chaosmetad 组件,提供了常驻 HTTP 服务的方式以及命令行执行的方式,还封装了对应的 daemonset 组件(chaosmeta-daemonset),可灵活搭配不同需求的演练平台。
![](https://static001.geekbang.org/infoq/67/67a81dcbc64f603b43e473de52f00260.png)
规划
ChaosMeta 的规划分为平台能力和故障注入能力两个主体路线,当前主要任务是把架构图中的主体能力都完成对外版改造进行开放。
▌平台能力
ChaosMeta 平台能力的未来演进分为三大阶段。
第一阶段-人工配置
此阶段的目标是将架构图中的组件都完成对外开放,此时,即可支撑完整的混沌工程生命周期,进入初级自动化混沌工程领域,以“风险目录”作为理论参考,一次人工配置,多次自动执行。
第二阶段-自动化
此阶段下,“风险目录”会发挥更大的价值,它不仅仅给出一类应用会有什么风险,还有对应的预防以及应急建议,并且每一项的评分是多少,而 ChaosMeta 会将“风险目录”集成为通用组件的风险体检套餐,实现一键“体检”能力,输入目标应用信息,直接输出一个风险评分以及风险分析报告。
第三阶段-智能化
探索结合人工智能的方向,自动生成更多未知的风险场景。
▌故障注入能力
以下仅为故障能力分类,具体提供的原子故障能力详见官方文档(欢迎提交 issue,提出新能力需求,需求较高的优先提供):
![](https://static001.geekbang.org/infoq/06/06ac6c6b8b870645619b6dec43b94d3d.png)
加入 ChaosMeta 社区
作为一个开放的项目,我们认可开源的研发模式,并致力于将 ChaosMeta 社区打造成一个开放和有创造力的社区。后续,所有的研发、讨论等相关工都会在社区透明运行。
我们欢迎任何形式的参与,包括且不限于提问、代码贡献、技术讨论、需求建议等。期待收到社区想法和反馈,以推动项目往前进一步发展。
项目 GitHub 地址:
https://github.com/traas-stack/chaosmeta
官方文档:
https://chaosmeta.gitbook.io/chaosmeta-cn
微信群:添加负责人好友(微信号:KingsonKai)邀请入群
![](https://static001.geekbang.org/infoq/ba/babb25e05107d0c50c4e51992ea6342d.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
钉钉群:21765030887
![](https://static001.geekbang.org/infoq/2c/2c8f681b6cc6b88ba818e099d0a0882c.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
公众号:ChaosMeta 混沌工程
![](https://static001.geekbang.org/infoq/fd/fd10183a0f255003eb6d190116d9d144.png)
评论