指南:与任何新概念一样,混沌工程经常被误解。本文将讨论什么是混沌工程,什么不是。
作者:Casey Rosenthal、Nora Jones
来源:华章科技
在Netflix混沌工程实践之初,人们其实并不知道这门学科是什么。关于如何使服务更可靠,存在许多误解。比如当年经常听到这样的口号——拔掉网线,在生产环境中销毁,或者在生产环境中测试。此外,几乎没有混沌工程实际工具的例子。
Netflix 成立了混沌工程团队来创建一个有意义的学科。该学科可以借助工具主动提高可靠性。我们花了几个月的时间研究弹性工程和其他学科,并提出混沌工程的定义和蓝图,以造福他人。
混沌工程的定义已经以宣言的形式发布,称为“混沌工程原理”。
https://principlesofchaos.org
01 什么是混沌工程
混沌工程的原理定义了混沌工程的学科,以便每个人都可以理解何时继续,如何进行以及如何进行混沌工程。如今,混沌工程的一般定义是“有助于发现系统弱点的实验”。混沌工程原理网站概述了以下实验步骤:首先,定义一个“稳态”(steady state)来表示系统正常行为的一些可测量输出。建立以下假设——对照组和实验组都将继续这种稳定状态。引入反映真实事件的变量,例如服务器崩溃、硬盘驱动器故障、网络连接中断等。尝试通过寻找对照组和实验组之间的稳态差异来推翻这一假设。
这个实验构成了混沌工程的基本原理,为实验的实施提供了很大的自由度。
1.实验和测试
在 Netflix,我们发现首先必须澄清的是,混沌工程是一个实验而不是测试。可以说“质量保证”涵盖了两者,但该术语在软件行业中通常带有负面含义。
最初,一些 Netflix 团队会问 Chaos Engineering 团队:“你不能写一堆集成测试来发现同样的问题吗?”从理论上讲,这种观点是务实的。但实际上,通过集成测试是不可能得到想要的结果的。
严格来说,测试不会创造新知识。测试要求编写测试的工程师知道要验证的系统的特定属性。复杂系统对这种类型的分析是不透明的。人类根本无法理解复杂系统中各种组件的所有潜在相互作用所带来的所有潜在副作用。这导致我们得出以下测试的关键特征。
测试会根据已有知识做出断言,然后执行测试,并给出断言的结果(通常为真或假)。测试是关于系统已知特性的陈述。
另一方面,实验会产生新的知识。实验提出一个假设,只要不推翻假设,对假设的信心就会增加。而如果假设被推翻,那么就会学到一些新的东西。这可以启动调查以找出假设错误的原因。
复杂系统中发生的事情的原因通常并不明显。实验可以建立信心,也可以让我们学习系统的新属性。这是对未知的探索。
因为测试需要有人提前做出断言,所以通过实验获得的洞察力是无法单独通过测试获得的。该实验引入了一种发现新属性的正式方法。当发现系统的新属性时,可以将它们转换为测试。
实验还有助于将关于系统的新假设编码为新的假设,从而创建类似于“回归实验”的实践,以随着时间的推移进一步探索系统。
由于混沌工程的诞生是为了处理复杂的系统问题,因此该主题必须是实验性的,而不是可测试性的。
2.验证和盘点
在运维管理和物流中 在计划领域,验证和验证的定义是不同的。混沌工程更侧重于验证。验证
复杂系统的验证是在系统边界处分析输出的过程。例如,房主可以通过测试水槽(系统边界)中的污染物来验证水的质量(输出),而无需了解管道或市政供水系统(系统组件)的功能。盘点
盘点复杂系统是对系统的各个组成部分进行分析,并建立反映各组成部分之间相互作用的思维模型的过程。房主可以通过检查所有管道和基础设施(系统组件)来检查水质。这些管道和基础设施将收集、清洁和输送水(功能组件的心智模型),并将水输送到住宅区的数千户家庭。
这两种方法都很有用,并且都可以建立对系统输出的信心。作为软件工程师,我们经常强迫自己深入研究代码并验证代码是否反映了我们对代码应该如何工作的心理模型。与这种偏好相反,混沌工程强烈主张验证而不是库存。混沌工程关心的是某些东西是否有效,而不是它是如何工作的。
请注意,在上面的管道比喻中,虽然可以检查所有用于提供清洁饮用水的组件,但由于一些意想不到的原因,水龙头仍然受到污染。水的。复杂系统中总是存在不可预测的相互作用。但是,如果您确认从水龙头流出的水是干净的,您就不必担心水是如何来的。
文章来源:《工程与试验》 网址: http://www.gcysyzz.cn/zonghexinwen/2021/0707/2169.html