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

简单性:可靠性的上限,是你还读得懂多少

Site Reliability Engineering · Ch 9 · Max Luebbe · Google · 2016

EN →

这一章讲什么?

你手机里那些 App,越更新越大、越更新越慢,这不是错觉。软件有个自然趋势:只会越长越复杂,没人主动把它变简单。Google 这本书的第 9 章讲的就是怎么跟这个趋势对着干。它的立场只有一句:系统之所以不可靠,最大的原因不是机器坏、也不是人多,而是复杂到没人再看得懂它

先打个比方

把系统想成一栋住了十年、年年加盖的房子。第一年住得挺好;后来隔出一间储藏室,加了一路暗线,留下一个「以后可能用得上」的旧插座,又装了个备用水泵——平时不开。十年后,房子还是那栋房子,但换个灯泡都得先猜:这根线通哪儿?拆这堵墙会塌吗?

软件比房子更容易失控,因为加盖不要钱:加一个功能有人夸,删一段旧代码没人夸、还担着「万一有人在用」的风险。于是所有人都在加,没人在减。

旧世界为什么难

难在三处。第一,每个人都舍不得自己写的东西——那是几个月的心血,删掉像是承认白干。第二,那些「留着以后可能用」的旧路子平时根本不走,真到要走的那天,往往早就坏了,只是没人知道。第三,一次改一百处、攒够了再上线:上线后出了岔子,一百处改动全是嫌疑犯,查起来像大海捞针。

这章的核心点子:三条

分清「这事本来就难」和「我们把它搞难了」。要把网页又快又稳地送到你手机上,这件事本身就难,逃不掉;但为了绕开某个工具的老毛病,外面多裹的三层壳,是自己给自己造的难——这层可以削掉,而且该削。

代码是负债,不是资产。每多一行,就多一份要有人读懂、有人测试、可能藏着错的东西。所以在一个已经做完的项目上,最好的改动往往是负数行——删得比加得多。删了也不可怕:版本管理工具替你留着底,真要它还能捡回来。

每次只上一点点。一次上线一百处改动,出事你猜不出是哪一处;一次上线一处,坏了一眼就知道退谁。发得频不是为了快,是为了出事时嫌疑犯少

一件真事

2012 年,美国一家做股票交易的公司上线新版本,八台服务器里漏了一台没更新。偏偏那台上还留着一段八九年前就停用、却一直没删的旧代码,被新版本重新唤醒了。四十五分钟,四亿多美元没了。删掉不再运行的东西,不是洁癖,是拆引信。

一句话记住

可靠性的天花板,就是你还能理解多少:分清哪些复杂是这件事本来就有的、哪些是自己加上去的,把后者一层层削掉;把代码当负债而不是功劳,敢删;每次只改一点点,出事才找得到人。诚实说一句代价:做减法几乎总是当下更费劲、更没功劳,收益要等到半年后那次故障才兑现——所以它需要被明确认可,靠个人自觉是撑不住的。

想进到具体判据、对比表和示意图? → 切到精读版