第 1 章. 遭遇复杂系统
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在本章的第一部分,我们探讨了在处理复杂系统时出现的问题。混沌工程(Chaos Engineering)诞生于复杂的分布式软件系统。它专门针对复杂系统的运行需求,即这些系统是非线性的,这使得它们具有不可预测性,进而导致不理想的结果。这通常会让我们这些工程师感到不舒服,因为我们总以为可以通过计划来解决不确定性问题。我们常常会把这些不良行为归咎于系统的建造者和操作者,但事实上,意外是复杂系统的自然属性。在本章稍后部分,我们将提出这样一个问题:我们能否将复杂性从系统中分离出来,从而将不良行为也一并分离出来?(剧透:不,我们不能)。
思考复杂性
在决定混沌工程对您的系统是否有意义之前,您需要了解简单与复杂之间的界限在哪里。描述系统特征的一种方法是系统输入变化与输出变化的对应关系。简单系统通常被描述为线性系统。线性系统输入的变化会导致系统输出的相应变化。许多自然现象构成了我们熟悉的线性系统。用力扔球,球扔得越远。
非线性系统 ,其输出会根据各组成部分的变化而发生巨大变化。 牛鞭效应是系统思维中的一个例子,直观地反映了这种互动关系。1手腕轻轻一挥(系统输入的微小变化),鞭子的远端就会在瞬间移动足够长的距离,从而打破音速,发出鞭子所特有的 "啪啪 "声(系统输出的巨大变化)。
非线性效应的形式多种多样:系统部件的变化可能导致输出的指数变化,比如社交网络在大的时候比小的时候发展得更快;也可能导致输出的量子变化,比如对一根干燥的棍子施加越来越大的力,直到棍子突然断裂它才会移动;还可能导致看似随机的输出,比如一首欢快的歌曲可能会在某一天激励某人锻炼身体,但第二天就会让他们感到无聊。
线性系统显然比非线性系统更容易预测。线性系统的输出往往比较容易直观,尤其是在与其中一个部分交互并体验了线性输出之后。因此,我们可以说线性系统是简单的系统。相比之下,非线性系统则表现出不可预测的行为,尤其是当多个非线性部分同时存在时。重叠的非线性部分会使系统输出增加到某一点,然后突然逆转,甚至突然完全停止。我们称这些非线性系统为复杂系统。
我们可以用另一种方法来描述系统的特征,这种方法不那么专业,更主观,但可能更直观。简单系统是指一个人可以理解所有部件、它们如何工作以及它们如何对产出做出贡献的系统。相比之下,复杂系统则有许多活动部件,或者这些部件的变化如此之快,以至于没有人能够在头脑中建立一个心智模型。见表 1-1。
| 简单系统 | 复杂系统 |
|---|---|
| 线性 | 非线性 |
| 可预测的输出 | 不可预测的行为 |
| 可理解 | 无法建立完整的心智模型 |
通过观察复杂系统的累积特征,我们不难理解为什么传统的系统安全探索方法是不够的。非线性输出难以模拟或准确建模。输出不可预测。人们无法对其进行心智模型化。
在 的软件世界中,与具有这些特征的复杂系统打交道并不罕见。事实上, 必要多样性定律的一个结果就是2的一个结果就是,任何控制系统的复杂程度都必须至少与它所控制系统的复杂程度相当。由于大多数软件都涉及到控制系统的编写,因此构建软件的大部分工作都会随着时间的推移而增加复杂性。如果你现在从事软件工作,却不与复杂系统打交道,那么你将越来越有可能在某个时候与复杂系统打交道。
复杂系统增加的一个 后果是,随着时间的推移,软件架构师的传统角色变得不再重要。在简单系统中,一个人(通常是经验丰富的工程师)就可以协调多个工程师的工作。架构师的角色之所以发展起来,是因为这个人可以在心智上为整个系统建模,并且知道所有部分是如何组合在一起的。他们可以充当指导者和规划者,指导如何编写功能,以及技术如何在软件项目中逐步展开。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access