专业书籍精读 · SRE · 第 22 章

应对级联失效:失败会自己繁殖,所以修好起因也救不回来

Site Reliability Engineering · Ch 22 · Mike Ulrich · Google · 2016

EN →

这一章讲什么?

你一定见过这种新闻:某个 App「崩了」上了热搜,几个小时都回不来。奇怪的是事后公布的原因往往小得离谱——改了一行配置、多加了几台机器、开了一个没什么人用的新功能。SRE 书第 22 章讲的就是这件事:一个小故障,是怎么把整个系统一层一层拖下水的。

先打个比方

想想大停电。用电高峰,一条高压线路过载跳闸——它原本输送的电流不会凭空消失,会自动转到旁边几条线上。旁边那几条本来也接近满载,多接一份就更容易跳;跳了之后电流再往下一批转……几分钟内,一座城市黑掉。

最反直觉的是:把最初跳闸的那条线修好,城市也不会自己亮起来。此刻全城的空调、冰箱、电梯都停着,你一合闸它们同时启动,冲击比平时大得多,会立刻再把线路顶掉。电力行业为此有一套专门流程,叫黑启动:先点亮一小片,稳住,再点下一片。

旧世界为什么难

软件系统的塌方是同一个剧本。一台服务器挂了,它的活自动分给剩下的同伴;同伴本来就忙,多接一份就更慢;一慢,用户开始反复刷新,请求量不降反增;自动巡检发现有几台「不吭声」,判定它们坏了,杀掉重启——于是活着的机器更少、每台更忙。

看出来了吗:每一步的结果,都成了下一步的原因。故障不是被外力推着走的,它自己会长。这是这一章唯一真正要你记住的东西。

它到底是怎么长起来的

三台小发动机在推:

那该怎么办

平时:给每件活标上「最晚到什么时候还有意义」,过了就扔;别让队排太长;把要紧的和不要紧的分开,忙时先砍不要紧的。出事时:先别急着加机器(新机器要预热,很可能更糟),最有效的一招常常也是最难下手的那招——把流量整个掐掉,让系统喘匀,再一小份一小份放回来。跟给城市送电一模一样。

代价也很诚实:掐流量意味着你要主动制造一段「谁都用不了」的时间,很多团队到了那一刻不敢按下这个按钮,结果把几十分钟拖成了几十小时。

一句话记住

故障本身不可怕,可怕的是失败会繁殖。一旦这个循环转起来,修好最初的原因也没用——你必须亲手把它掐停,然后像给城市送电那样,一片一片地把系统重新点亮。

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