专业书籍精读 · Chaos Engineering · 第 2 章

在复杂系统里导航

Chaos Engineering: System Resiliency in Practice · Ch 2 · Casey Rosenthal & Nora Jones · 2020

EN →

这一章讲什么?

上一章说的是:现在的线上系统太复杂,没人装得下,所以故障推不出来。这一章接着问一个更扎心的问题——既然没有人想出事,为什么系统还是会一步步走到出事那天?答案不是「有人偷懒」。真正的答案更难受:每天把它往危险处推的那几股力,本身全是正当的。

打个比方:开车跑长途

你开车跑一趟长途,身上有三条看不见的绳子在拽着你:

你一天下来大概会在「不太费油、不太累、还没出事」之间找个舒服点。问题出在这儿:前两条绳子你拉过头会立刻难受——油表掉得快你看得见,困了你自己知道。安全这条不一样:超速跟车一百次都没事,第一百零一次才出事。它平时一声不响,只在越过的那一瞬间给你一记重击。

于是系统每天都在往危险处漂

一个团队也是这样。省成本(关掉备用机器)有人表扬;少折腾(这季度演练先不做了)大家都轻松;而「你们这么干已经很危险了」没有任何人会告诉你——因为它上一百次都没出事。所以不是某天突然变危险的,是天天往那边挪一点,每一步都看着没毛病。最要命的是:等你终于收到安全那条绳子的反馈,那个反馈的名字就叫「事故」。

核心机制直觉:给安全这条绳子装上痛觉

想不漂过去,就得让安全这条绳子平时也会说话。办法是:主动在可控范围里制造一次小故障,看系统真实怎么反应。这相当于在空旷场地上试一次急刹——提前知道自己离失控还有多远,而不是在高速上第一次知道。这就是混沌工程在这套模型里的全部作用:它不是来找 bug 的,是来替安全那条边界喊疼的。

另一半:你能动的只有「撤得回来」

这一章还数了数复杂到底从哪来,一共四处:系统有多少种可能的情形、零件之间有多少条牵连、外头有多少你管不着的东西、以及出事之后撤不撤得回来。前三处都是业务要的——多做一个功能就多一堆情形,多接一个合作方就多一堆牵连,用户和市场本来就不听你的。能真正当工程目标的只剩最后一个:出错之后多快能回到原样。这也是为什么业界这些年把大钱花在「一键撤回、先放给一小撮人试、随时能关」上,而不是花在「这次保证不出错」上。诚实说一句代价:这些本事本身也要花钱,而且它们只能让你出错后损失变小,不能让你不出错。

一句话记住

系统不是某天突然变危险的,是被几股正当的力气天天往危险处推一点;三条边界里只有安全那条不会提前喊疼,混沌工程就是替它喊。

想进到具体机制、量级和示意图? → 切到精读版