混沌工程原理

参考:

最后更新:2019 年 3 月(更改)

混沌工程学是在系统上进行实验的学科,目的是建立对系统承受生产中动荡环境能力的信心。

大规模,分布式软件系统的进步正在改变软件工程的局面。作为一个行业,我们迅速采用可以提高开发灵活性和部署速度的实践。紧随这些好处之后,紧迫的问题随之而来:我们对投入生产的复杂系统能有多少信心?

即使分布式系统中的所有单个服务都正常运行,这些服务之间的交互也会导致不可预测的结果。不可预测的结果,再加上影响生产环境的罕见但具有破坏性的现实事件,使这些分布式系统固有地混乱。

我们需要先确定弱点,然后才能在系统范围的异常行为中体现出来。系统性弱点可以表现为:当服务不可用时,回退设置不正确;重试由于超时调整不当而引起的风暴;当下游依赖项接收到过多流量时中断;单点故障崩溃时的级联故障;等。我们必须主动解决最重要的弱点,以免影响生产中的客户。我们需要一种方法来管理这些系统中固有的混乱,利用增加的灵活性和速度,并对我们的生产部署充满信心,尽管它们代表了复杂性。

一种基于经验的,基于系统的方法可以大规模解决分布式系统中的混乱情况,并增强人们对这些系统承受现实条件的能力的信心。我们通过在受控实验中观察分布式系统的行为来了解它的行为。我们称此为 混沌工程

实践中的混乱

为了专门解决大规模分布式系统的不确定性,可以将“混沌工程”看作是发现系统弱点的实验的促进。这些实验遵循四个步骤:

  1. 首先将“稳定状态”定义为指示正常行为的系统的某些可测量输出。
  2. 假设在对照组和实验组中这种稳定状态都将持续。
  3. 引入反映真实事件的变量,例如崩溃的服务器,发生故障的硬盘驱动器,断开的网络连接等。
  4. 试图通过寻找对照组和实验组之间稳态差异来反驳这一假设。

破坏稳态越难,我们对系统行为的信心就越大。如果发现了一个弱点,那么我们现在就有一个改进的目标,那就是在整个系统中表现出来之前。

高级原则

以下原则描述了混沌工程的理想应用,该理想工程应用于上述实验过程。遵循这些原则的程度与我们对大规模分布式系统的信心密切相关。

建立关于稳态行为的假设

关注于系统的可测量输出,而不是系统的内部属性。在短时间内对该输出的测量构成了系统稳态的代理。整个系统的吞吐量,错误率,等待时间百分位数等都可以成为代表稳态行为的关注指标。通过关注实验过程中的系统行为模式,Chaos 可以验证系统是否有效,而不是试图验证其工作方式。

变化的现实世界事件

混沌变量反映了现实世界中的事件。通过潜在影响或估计频率对事件进行优先级排序。考虑与硬件故障(如服务器死机),软件故障(如格式错误的响应)和非故障事件(如流量高峰或扩展事件)相对应的事件。在混沌实验中,任何能够破坏稳态的事件都是潜在的变量。

在生产中进行实验

系统的行为取决于环境和流量模式。由于利用率的行为可以随时更改,因此对真实流量进行采样是可靠捕获请求路径的唯一方法。为了保证系统运行方式的真实性和与当前已部署系统的相关性,Chaos 强烈希望直接对生产流量进行试验。

自动化实验以连续运行

手动运行实验是劳动密集型的,最终是不可持续的。自动化实验并连续运行。Chaos Engineering 将自动化内置到系统中,以驱动业务流程和分析。

最小化爆炸半径

在生产中进行试验有可能导致不必要的客户痛苦。尽管必须考虑到一些短期的负面影响,但是混沌工程师的责任和义务是确保最大程度地减少和控制实验的后果。

混沌工程是一种强大的实践,已经在改变世界上一些最大规模的运营中软件的设计和工程方式。在其他实践涉及速度和灵活性的地方,混沌专门解决了这些分布式系统中的系统性不确定性。混沌原理为快速大规模创新提供了信心,并为客户提供了应有的高质量体验。

加入有关“混沌原理”及其在混沌社区中的应用的持续讨论。


最后修改 July 9, 2024: terminal, perf (c8bef1d4)