1、诞生
先看下这个生动的图吧。
文字版
2008年之前,国际巨型视频网站Netflix的模式还是自建机房,自己维护,由于在全球有超1亿用户,所以流量特别大。有一天服务宕机,导致部分国家的不可用长达1天时间,于是他们决定将服务器迁移到AWS上,做了多节点分布式部署,同时增加对服务可用性、容错性、健壮性的实验,而这套实验方法就是混沌工程的前身 。他们将这种实验方法和工具抽象剥离出来后,命名为Choas Monkey,寓意为上蹿下跳捣乱的猴子(看来猴子这个物种无论海内海外,都认为他们喜欢捣乱,想想大闹天宫的大圣)。
经过几年的发展,这种思想被业界争相效仿,来提升自己公司的产品。而就在这个时候,2014年Netflix宣布新增一个叫混沌工程师的职位,代表Netflix将混沌工程融入了自己的运维过程,这也直接激起了混沌工程的热度。
2015年,Netflix与社区正式提出了混沌工程原则,从此Choas Monkey不再是一种工具、一组方法,而是真正形成了一套理论。
2、定义与作用
定义
混沌工程(Chaos Engineering)是一种通过主动向系统中注入故障或异常条件,以验证系统在真实环境中的韧性、发现潜在弱点,并提升系统容错能力的技术实践。它旨在将不可预测的故障转化为可控实验,帮助构建高可用的分布式系统。-- 来自Deepseek
混沌工程是一种通过主动在系统中引入可控的故障和不确定性,来测试和验证系统韧性的实践方法。
其核心目标是:在系统发生意外故障(如服务器宕机、网络延迟、数据丢失等)前,主动发现潜在的脆弱点,从而提升系统在真实复杂环境中的稳定性、可靠性和容错能力。
简单来说,就像给系统"打疫苗",通过模拟各种可能的"疾病"(故障),让系统提前适应并增强抵御风险的能力,减少实际运行中突发故障造成的损失。 -- 来自豆包
作用
- 提前暴露潜在故障点,降低线上故障发生率与复发率
- 验证故障恢复机制有效性
- 构建系统自愈能力,提高故障应急效率
- 提高系统架构的容错能力与健壮性
经典案例
- Netflix 的 Chaos Monkey:随机终止生产环境虚拟机,迫使服务实现自动化容错。
- NASA航天系统:在阿波罗计划中通过"故障注入"测试飞船的生存能力。
- 银行系统演练:定期模拟数据中心宕机,验证异地多活的切换时效。
再来个图,直观了解某银行应用混沌工程的案例:
几个好理解的场景
- 服务器宕机: 模拟某个服务器失效,观察系统是否能通过负载均衡快速恢复。
- 网络延时: 模拟高延迟或丢包场景,评估用户体验是否受到影响。
- 流量激增: 测试系统在突发流量下的响应能力,找到可能的性能瓶颈。
混动工程是一种主动发现问题的方式,而不是被动等待事故发生。就像 Netflix 最开始的Chaos Monkey工具(随机关闭生产环境中的服务,通过实践验证系统的健壮性)。
3、实施原则
Netflix首先提出的五大原则:
建立稳定状态的假设
当系统处于稳定状态时,可以通过一些指标来定义这一状态(如请求成功率、延迟百分位)。系统在混沌工程实验完成后,这些指标无法快速恢复,可以认为这个系统是不稳定的。
多样化真实事件
不能够凭空想像出一些事件来验证,而是引入那些真实存在的,频繁发生的,且影响重大的事件。给这些事件做混沌实验才有价值。如磁盘故障、网络延时、主机宕机等。
在生产环境中进行实验
尽量在生产或接近生产的环境中进行测试,生产环境的多样性是其它环境所不具备的。混沌工程的价值就是保证生产上的业务连续不中断。
持续运行自动化实验
实施混沌工程实验一般最开始是人工手动操作,当对业务有足够的信心时,要把混沌实验融入到持续集成过程。在版本升级、不断迭代的过程中,持续不断自动化地做验证,最大程度保证业务的连续性验证。
最小化影响范围
做混沌工程的意义就是保证生产上的业务,在实施混沌实验时也必须保证对线上业务影响最小。在实施实验时,从小范围开始,不断扩大范围,避开高风险时段,如选择业务量最小的时段实施实验。
4、主流工具
- Chaos Monkey (开源)/ˈkeɪɒs/
- 特点:由 Netflix 开发,用于随机终止生产环境中的服务实例,测试系统的恢复能力。
- 优势:简单易用,能够快速暴露系统中的单点故障。
- 适用场景:适合已经具备一定弹性和容错能力的大型分布式系统。
- ChaosBlade (开源)
- 特点:阿里巴巴开源,支持多种故障注入场景,包括CPU、内存、网络、磁盘、进程、文件系统等。
- 优势:多环境支持(物理机、虚拟机、容器等),灵活的实验场景,轻量级且易于集成。
- 适用场景:适合混合云或复杂基础设施的企业。
- Chaos Mesh(开源)
- 特点:PingCAP 开源,专注于K8S环境的混沌工程工具,支持 Pod 故障、网络故障、文件系统故障等20+实验类型,提供Chaos Dashboard管理界面。
- 优势:深度集成K8S,支持基于标签的精准故障注入。
- 适用场景:适合基于K8S的云原生系统,尤其是微服务架构和分布式数据库。
- LitmusChaos (开源) /ˈlɪtməs/
- 特点:MayaData 开源,基于K8S的开源工具,专注于云原生环境下的韧性测试。
- 优势:与K8S生态紧密集成,能够针对容器、Pod、节点等不同层次进行故障模拟。
- 适用场景:适合云原生环境下的系统,尤其是基于K8S构建的微服务架构。
- ChaosMeta (开源)/ˈmɛtə/
- 特点:专注于大规模分布式系统的故障注入和韧性测试,支持节点故障、网络分区、服务延迟等。
- 优势:支持实验编排和复杂故障链模拟,适合超大规模系统。
- 适用场景:适合需要测试大规模分布式系统韧性的企业,如大型互联网公司或金融科技公司。
- Gremlin (商业) /ˈɡremlɪn/
- 特点:企业级混沌工程平台,支持100+故障场景(CPU满载、网络延迟、磁盘故障等),集成Prometheus等监控工具,具备可视化仪表盘和可靠性评分。
- 优势:提供更细粒度的故障模拟,能够模拟复杂的故障场景,并且有良好的用户界面和报告功能。
- 适用场景:适合需要精细控制实验的企业,尤其是对系统稳定性要求极高的行业,如金融、医疗等。
|--------------|--------------|----------------------------------------|-------------------------------------------|------|-------|
| 工具名称         | 开发团队         | 核心特点                                   | 适用场景                                      | 是否开源 | 活跃度排序 |
| Chaos Monkey | Netflix      | 随机终止服务,简单易用                            | 大型分布式系统                                   | 是    | /     |
| ChaosBlade   | 阿里巴巴         | 多环境支持,灵活的实验场景,轻量级                      | 混合云、复杂基础设施                                | 是    | 2     |
| Chaos Mesh   | PingCAP      | Kubernetes 深度集成,丰富的故障类型,可视化界面          | 云原生、微服务架构                                 | 是    | 1     |
| LitmusChaos  | MayaData     | 擅长 K8s 原生资源(如 Pod/Node 级故障)的标准化实验    | 云原生、基于K8S环境的架构                            | 是    | 3     |
| ChaosMeta    | 蚂蚁集团         | 2024年1月进入CNCF,大规模支持,实验编排,开放的 API 和插件机制 | 覆盖传统云原生架构及新兴AI基础设施(如GPU集群、大模型训练)超大规模分布式系统 | 是    | 4     |
| Gremlin      | Gremlin Inc. | 企业级平台,细粒度故障模拟,丰富的用户界面                  | 企业级应用,高稳定性要求行业                            | 商业   | /     |
5、工具使用
ChaosBlade
官网: https://chaosblade.io/
Github: https://github.com/chaosblade-io/chaosblade
Chaosblade支持的试验场景:
操作手册:
https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade-create-disk-burn
磁盘读写实验
代码实现
最小单元是一个for循环:
Chaos Mesh
官网:https://chaos-mesh.org
Github:https://github.com/pingcap/chaos-mesh
官网直观展示的能力:
- 可视化操作界面(Chaos Dashboard):可以通过 Web UI 设计混沌实验场景、编排故障注入流程,并实时监控实验运行状态,降低混沌工程实施门槛。
- 文档与社区资源:包含详细的使用指南、故障类型说明及社区支持信息,便于用户快速上手和实践。
- 集成 DevOps 工具链:支持与 GitHub Actions 等 CI/CD 系统集成,实现持续混沌测试。
Chaos Mesh 是 CNCF 的托管项目:
文档
Chaos Mesh 简介:
支持故障类型:
支持容器和物理机:
模拟Pod故障:
使用Chaos Dashboard方式创建Pod故障实验:
通过Kubectl方式创建Pod故障实验:
Yaml文件中的字段: