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

Google 自动化的演进

Site Reliability Engineering · Ch 7 · Google · 2016

EN →

这一章讲什么?

你手机上的自动更新、公司里的自动打卡,都是「自动化」。Google 有一群叫 SRE 的工程师,专职让网站别挂;他们要照看的机器是几十万台这个量级,靠人一台台点显然不行。这一章讲的就是:他们花了十几年,怎么把「人照着清单干」一步步变成「系统自己照顾自己」——以及这条路上踩过的坑。

先说个怪事

你大概以为自动化最大的好处是省时间。Google 的答案是:不是,省时间排在最后一位。排第一的是每次都一模一样。一件事让一百个人手工做,会做出一百个略有差别的结果;让脚本做一百遍,一百遍都一样(哪怕一样地错)。规模一大,「一样」就比「快」值钱得多——因为排查故障时最贵的那笔账,往往不是「代码写错了」,而是「这台跟那台不一样,可没人知道哪不一样」。

旧世界为什么难

早年 Google 开一个新机房,SRE 得照着一份几百步的清单干上好几周:装这个、配那个、再核对那个。清单是写给人看的,人会跳步、会理解偏差、会累。更糟的是干完之后,没人说得清「正确的样子」到底长什么样——只剩那份会过期的清单,和几个老师傅的记忆。

它是怎么做到的

两步。第一步,把「检查」写成程序:不再问老师傅「这台配好了没」,而是写一堆小检查,一条条验「该有的东西在不在」,哪条不对就直接告诉你哪不对。第二步才是关键,把检查变成修复:程序既然已经知道「应该是什么样」,那就让它顺手改对。

这里有个要紧的性质,叫幂等:不管现在是什么状态,跑一遍就回到该有的样子,跑十遍和跑一遍结果一样。像自动回正的方向盘——你不用知道它现在偏了多少,松手它就归位。有了这个性质,自动化才敢反复跑、随时跑。

顺着这条路往上是一道台阶:人手干 → 某人写了个脚本 → 脚本变成大家通用的工具 → 工具被做进系统、跟着系统一起发布 → 最后一级,系统自己发现出问题、自己修好,没人被惊动。Google 的集群系统 Borg(后来的 Kubernetes 就是学它)站在最后一级:你只管说「我要这个版本的五份」,剩下的它自己盯着。

代价是什么

一句实话:自动化把人从操作里移出去的同时,也把人从理解里移出去了——等到自动化自己出错的那天,值班的人可能既没手感、也找不到手册。

一句话记住

自动化不是「省人力的工具」,是放大器:它把你做对的事放大,也把你做错的事放大,而且放大得比人快得多。所以真正该追的不是「写更多脚本」,而是「把系统做成不需要外挂脚本也能自己照顾自己」。

想看五级阶梯、幂等调谐的机制和示意图? → 切到精读版