混沌工程是在系统上进行实验的学科,目的是建立对系统在生产中承受动荡条件的能力的信心。
概念
在软件开发中,一个给定的软件系统在保证足够服务质量的同时容忍故障的能力——通常被概括为弹性——通常被指定为一项要求。但是,由于截止日期短或缺乏该领域的知识等因素,开发团队经常无法满足这一要求。混沌工程是一种满足弹性要求的技术。
混沌工程可用于实现针对基础设施故障、网络故障和应用程序故障的弹性。
历史
在 2011 年监督 Netflix 向云迁移的过程中,[2][3] Greg Orzell 的想法是通过设置一个工具来解决缺乏足够的弹性测试的问题,该工具会导致其生产环境(Netflix 客户使用的环境)出现故障。其目的是从假设没有故障的开发模型转变为故障被认为是不可避免的模型,从而促使开发人员将内置弹性视为一种义务而不是一种选择:
“在 Netflix,我们的自由和责任文化使我们不强迫工程师以特定方式设计他们的代码。相反,我们发现我们可以通过隔离服务器中和和将它们推向极致。我们创建了 Chaos Monkey,这是一个随机选择服务器并在正常活动时间内禁用它的程序。有些人会觉得这很疯狂,但我们不能依赖随机发生的事件来测试我们的面对这一事件的后果时采取的行为。知道这种情况会经常发生,因此工程师之间建立了强烈的一致性,以建立冗余和流程自动化以在此类事件中幸存下来,而不影响数百万 Netflix 用户。Chaos Monkey 是我们的一员提高我们服务质量的最有效工具。”[4]
通过定期“杀死”软件服务的随机实例,可以测试冗余架构以验证服务器故障不会明显影响客户。
混沌工程的概念与 Martin Fowler 于 2012 年首次提出的 Phoenix Servers 很接近。 [5]
扰动(Perturbation)模型
混沌工程工具实现了扰动模型。扰动,也称为湍流,旨在模拟生产中可能发生的罕见或灾难性事件。为了最大化混沌工程的附加值,预计扰动是现实的。 [6]
服务器关闭
一种扰动模型包括随机关闭服务器。 Netflix 的 Chaos Monkey 就是这种扰动模型的实现。
延迟注入
引入通信延迟以模拟网络中的退化或中断。例如,Chaos Mesh 支持延迟注入。
资源枯竭
吃掉给定的资源。例如,Gremlin 可以填满磁盘。
混沌工程工具
Chaos Monkey
Chaos Monkey 是 Netflix 于 2011 年发明的一种工具,用于测试其 IT 基础架构的弹性。 [2]它通过故意禁用 Netflix 生产网络中的计算机来测试剩余系统如何响应中断来工作。 Chaos Monkey 现在是名为 Simian Army 的更大工具套件的一部分,旨在模拟和测试对各种系统故障和边缘情况的响应。
Chaos Monkey 背后的代码由 Netflix 于 2012 年在 Apache 2.0 许可下发布。
“混沌猴”这个名字在安东尼奥·加西亚·马丁内斯的《混沌猴》一书中有解释:
- 想象一只猴子进入“数据中心”,这些服务器“农场”承载着我们在线活动的所有关键功能。猴子随机撕开电缆,破坏设备并归还所有经过手的东西[即扔粪便]。 IT 经理面临的挑战是设计他们负责的信息系统,以便它能够在这些猴子的情况下工作,没有人知道它们何时到达以及它们将破坏什么。
Simian Army
Simian Army 是 Netflix 开发的一套工具,用于测试其亚马逊网络服务基础设施的可靠性、安全性或弹性,包括以下工具:
在Simian Army 等级的最顶端,Chaos Kong 放弃了一个完整的 AWS“区域”。 虽然很少见,但确实会发生整个区域的损失,Chaos Kong 模拟了系统对此类事件的响应和恢复。
Chaos Gorilla 放弃了一个完整的亚马逊“可用区”(一个或多个服务于一个地理区域的完整数据中心)。
ChaosMachine
ChaosMachine 是一个在 JVM 的应用程序级别进行混沌工程的工具。它专注于通过注入异常来分析应用程序中涉及的每个 try-catch 块的错误处理能力。
Proofdock混沌工程平台
Proofdock 是一个混沌工程平台,专注于并利用 Microsoft Azure 平台和 Azure DevOps 服务。用户可以在基础设施、平台和应用程序级别注入故障。
Gremlin
Gremlin 是一个“故障即服务”平台。
Facebook Storm
为了应对数据中心的损失,Facebook 定期测试其基础设施对极端事件的抵抗力。该程序被称为 Storm Project,它模拟大规模数据中心故障。
Days of Chaos
Voyages-sncf.com 于 2017 年创建了“混沌之日”,将预生产故障的模拟游戏化。他们在 2017 DevOps REX 会议上展示了他们的结果。
See also
- Fault injection
- Fault tolerance
- Fault-tolerant computer system
- Data redundancy
- Error detection and correction
- Fall back and forward
- Resilience (network)
- Robustness (computer science)
本文:
Tags
最新内容
- 51 minutes 36 seconds ago
- 55 minutes 58 seconds ago
- 3 days ago
- 3 days 15 hours ago
- 5 days ago
- 5 days 20 hours ago
- 5 days 20 hours ago
- 5 days 20 hours ago
- 5 days 20 hours ago
- 5 days 20 hours ago