专业书籍精读 · Google SRE · 第 17 章

为可靠性做测试

Site Reliability Engineering · Ch 17 · Google · 2016

EN →

这一章讲什么?

你手机里的 App 几乎每周都更新,淘宝、微信背后的服务甚至一天要改几十次。奇怪的是,它们很少「一更新就全崩」。Google 的《SRE》第 17 章讲的就是这件事:改动是躲不掉的,那怎么让改动别把系统弄坏?答案是一整套「先尝一口再端上桌」的规矩。

先打个比方

把上线新版本想成餐厅上新菜。菜谱改了,你不会直接端给满堂客人。你会:先在后厨自己尝一口(咸不咸);再把整道菜连摆盘带上菜流程走一遍;然后先只端给靠窗那一桌,看他们吃完什么反应;确认没事才全店推。而且不管有没有上新菜,你每天都会派个自己人假装点一份,确认厨房还活着。这几步,正好对应这一章讲的几种检查。

旧世界为什么难

不改代码最安全,但也等于不做生意。真正的难处是:翻车往往不在「改错了一行」,而在只有生产环境才有的那些东西——真实的用户流量、真实的配置、真实的机器数量。后厨里怎么尝都好好的,一端进大堂就乱套。更糟的是,很多团队上线之后只剩一招:盯着监控祈祷,等用户替自己先发现问题。

核心的那个想法:不是为了抓虫,是让抓虫变便宜

这一章最反直觉的一句是:测试真正的价值不在「找到毛病」,而在决定这个毛病会在哪一步被找到。同一道菜咸了,在后厨尝出来,代价是重做一份;端上桌被客人吃出来,代价是道歉、退单、丢口碑。软件一模一样:被自动检查拦在上线之前,修复几乎不花钱;漏到线上,就是半夜告警、排查、回滚、写复盘,一晚上没了。

所以它教的不是「多写点测试」,而是把关卡摆在代价最低的那个位置,并且认清每道关各自漏什么——后厨尝不出大堂的拥挤,靠窗那一桌也代表不了所有客人。

该怎么选

小系统、出事一分钟能撤回的,关卡可以松一点,靠「不对就立刻回退」;大系统、一旦出事要折腾几个小时的,就必须把关卡往前挪、在上线之前拦住。代价也很诚实:关卡越多发布越慢,而且一个「时灵时不灵」的检查比没有检查更糟——它会教会所有人无视红灯。

一句话记住

测试不是为了证明「没毛病」,是为了让毛病在最便宜的地方被发现。上线前尝一口、上线后先给一小桌、平时还派人假装点单——三道关各管一段,缺一不可。

想进到具体机制、示意图和真实系统? → 切到精读版