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

从其他行业学到的教训

Site Reliability Engineering · Ch 33 · Google · 2016

EN →

这一章讲什么?

你坐过飞机、进过手术室,也可能住在离核电站不远的地方。这些行业有个共同点:出一次事就要命。它们为此摸索了上百年,把「怎么别出事」做成了一门手艺。这一章干的事很简单:把这些做法摊在桌上,看软件能抄哪几招、哪几招抄不了。

先说个怪事

游泳池的救生员每隔十几分钟就要换一个位置。不是因为累——他们坐着不动。换岗是因为一个很朴素的发现:盯着同一片水面看久了,人会「看着却看不见」。而溺水的人往往不喊不扑腾,就那么安静地沉下去。

请注意这里的思路:它没有要求救生员更专心一点。它把「人一定会走神」当成一条设计条件,然后围着这条条件排班表。

旧世界为什么难

软件是个很年轻的行业,年轻的代价是没有师父。飞行和发电的每一条规矩,背后都压着一次真实的伤亡,而这些教训被写成了全行业都得照做的规程——你不用亲自摔,也能拿到别人摔出来的经验。

软件这边不是这样:每家公司自己摔一遍,摔完还把过程当机密。同一个坑在几千家公司里被重新挖了几千次。

它是怎么做到的

把这些行业的做法拢一拢,剩下四件事:

其一,把灾难提前排练成日常。潜艇上天天演习,而且演习被故意设计得比真事更难;等真出事那天,身体已经先于脑子知道该干什么。

其二,出事之后只问「什么条件让这事成为可能」,不问「谁干的」。这不是宽容,是算计:你想知道真相,唯一的来源就是当事人的嘴——一旦开始罚说真话的人,嘴就闭上了。航空业干得最绝:事故报告交给一个跟监管方无关的第三方,让监管方拿不到它去罚人。

其三,把重复的活交给机器,但故意留一部分让人手动做。这一条最反直觉:自动化太好用的时候,人会慢慢不会做了;而机器搞不定的那些罕见场景,偏偏最需要一双熟练的手。航空业为这件事付过昂贵的学费。

其四,拍板按数据和事先写好的规则,不按谁资历深。事故当场不是发明流程的时候,谁说了算必须在出事前定死。

带来了什么 / 该怎么选

软件行业其实一直在抄,只是很多人不知道自己在抄:值班、演练、复盘、事故指挥官,一样都不是软件发明的。反过来,软件手里有两张别人没有的好牌——坏了通常几分钟就能改回来,而且通常不会死人。正因为有这两张牌,软件才敢用「允许出一点错」这种工具。

代价也很实在:坏了能马上改,久而久之就养成了「先上线再说」的习惯;而当软件开始管方向盘和输液泵,这个习惯就不够用了。

一句话记住

那些出事要命的行业,靠的不是让人更小心,而是把「人一定会走神、一定会出错」当成设计条件:平时排练灾难、出事只追条件不追人、把重复的交给机器又故意留活给人、拍板按事先写好的规则。软件能抄这些,但抄不走「允许出点错」——它的前提是失败可逆、且不致命。

想看四个主题的具体机制、五个行业的对照表和示意图? → 切到精读版