1.1 混沌工程的开始
2014年,Netflix团队创建了一种新的角色,叫作混沌工程师(Chaos Enigneer),并开始向工程社区推广。项目目标、业务场景、人员结构、实施方式的不同导致了对于稳定状态行为的定义不太标准。
多元化的业务场景、规模化的服务节点及高度复杂的系统架构,每天都会遇到各式各样的故障。这些故障信息就是最真实的混沌工程变量。为了能够更体感、有效率地描述故障,优先分析了P1和P2的故障,提出一些通用的故障场景并按照IaaS层、PaaS层、SaaS层的角度绘制了故障画像。
1.2. 混沌工程是什么
根据 Netflix 的解释,混沌工程师通过应用一些经验探索的原则,来学习观察系统是如何反应的。这就跟科学家做实验去学习物理定律一样,混沌工程师通过做实验去了解系统。
上图就是混沌工程的典型代表 - 猴子。拜 Netflix 所赐,现在大部分的混沌工程项目都叫做 Monkey,也就是一只讨厌的猴子,在你的系统里面上蹦下窜,不停捣乱,直到搞挂你的系统。
然后,我们需要知道,为什么需要混沌工程。应用混沌工程能提升整个系统的弹性。通过设计并且进行混沌实验,我们可以了解到系统脆弱的一面,在还没出现对用户造成伤害之前,我们就能主动发现这些问题。
“在分布式系统上进行实验的学科,目的是建立对系统承受生产环境中湍流条件能力的信心。
Chaos Engineering is the discipline of experimenting on a systemin order to build confidence in the system’s capabilityto withstand turbulent conditions in production.
1.3 混沌工程师和测试工程师区别
混沌工程其实是很重要的,但我之前一直以为混沌工程就是测试,但它们还是有区别的。虽然混沌工程跟传统测试通常都会共用很多测试工具的,譬如都会使用错误注入工具,但混沌工程是通过实践对系统有更新的认知,而传统测试则是使用特定方式对某一块进行特定测试。譬如在传统测试里面,我们可以写一个断言,我们给定特定的条件,产生一个特定的输出,如果不满足断言条件,测试就出错了,这个其实是具有很明确的特性。但混沌工程是试验,而试验会有怎样的新信息生成,我们是不确定的。譬如我们可以进行下面的这些试验:
- 模拟整个 IDC 当掉
- 选择一部分网络连连接注入特定时间的延迟
- 随机让一些函数抛出异常
- 强制 NTP 时间不同步
- 生成 IO 错误
- 榨干 CPU
这些试验到底会有什么样的结果,有些我们可以预料,但有些可能我们就不会预先知道,只有发生了,才会恍然大悟,有一种『喔,这也会出现!』的感叹。
2012年,Netflix开源了Chaos Monkey。
2021年,阿里巴巴开源了ChaosBlade。
其他开源工具及对比:
混沌工程可以帮助我们理解和控制复杂系统,进而提高这些系统的效率和可靠性。可以通过对复杂系统的模拟来预测它们的行为,这有助于在出现问题时作出快速和有效的决策,具有广泛的适用性。然而,混沌工程也存在一些缺点:需要对复杂系统的深入理解,并对系统的数学模型进行准确的建模,这对研究者的专业知识和技能有很高的要求。由于复杂系统的复杂性,混沌工程往往需要大量的计算资源和高级计算技术。研究结果往往是不确定的,这可能对决策过程产生影响。因此,在使用混沌工程的时候,需要考虑到这些优缺点,并在解决复杂系统问题时作出明智的决策。