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

LinkedIn:对真实用户负责

Chaos Engineering: System Resiliency in Practice · Ch 7 · LinkedIn · 2020

EN →

这一章讲什么?

前三章都在讲「怎么把故障注进生产」。这一章问一个被绕开的问题:生产里有真人。

你摇的不是一堆机器,是几亿个正在投简历、正在和招聘方说话的人。LinkedIn 的回答不是「那就别在生产做」,而是:把「谁会受影响」变成实验里一个可以填的格子。

打个比方:新药是怎么试的

没有一种新药是直接上市给所有人吃的。先在很少几个人身上试,看安全;再扩到几十、几百人;而且每一期都事先写好「出现什么情况立刻停」,还有人专门盯着这条线。

在真人身上做混沌实验,规矩是同样三条:从极小的人群开始、一级一级放大、事先定好自动叫停的条件。只有一点不同:软件的「停药」能在几秒内完成,所以你可以比医学大胆一点。

旧世界为什么难

最常见的做法是随机关掉一台机器。它的毛病不是风险大,而是——你没法选谁倒霉。

落在那台机器上的是谁,取决于流量当时怎么分。可能全是随手刷刷的人,也可能包含一个正点下「提交申请」的人。「只影响千分之一的请求」听着很小,但那千分之一不是数字,是某些具体的人的某一次具体操作。

还有更隐蔽的一层:如果系统总把同一个人分到同一台机器,那「影响千分之一的请求」其实是「让千分之一的人全程崩坏」。一个人连失败一百次,和一百个人各失败一次,报表上是同一个数,体验上是两件事——前者会卸载 App。

核心机制直觉:三件事

带来了什么 / 该怎么选

好处是实验从「要不要冒这个风险」变成了「冒多大」:绝大多数毛病在「摇自己」那一级就露出来了,根本用不到真实用户;真需要放量,也是一级一级放、随时能收回。

一句诚实的代价:精确到一次请求的故障是「装」出来的——它只让这一次请求以为下游坏了,而真故障会同时砸在所有调用方身上,那种全局拥挤只有放到规模上才看得见。

一句话记住

生产混沌的爆炸半径该用「人」做单位:把故障挂在一次请求上随它传播,先摇自己、再按人群一级一级放量,并且事先写好会自动触发的叫停条件——做不到自动叫停的实验,就不该在真人身上跑。

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