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

数据处理管线

Site Reliability Engineering · Ch 25 · Google · 2016

EN →

这一章讲什么?

你手机里的「猜你喜欢」、月底的账单、搜索结果的排序,都不是你点开的那一刻才算出来的。半夜里有一条流水线,正把海量原始记录加工成这些成品。Google SRE 这本书的第 25 章讲的就是:这条流水线为什么老出事,以及该怎么改

打个比方

把它想成一家中央厨房:每天凌晨三点闹钟一响,全体开工,把当天的食材洗、切、炒、装盒,天亮前送出去。听着井井有条,可规模一大,麻烦就全来了。

半夜开工的四种翻车

一口锅拖住全场。活儿分给一百个厨师,九十九个十分钟做完,剩下那个分到的是一整头牛,要三小时。因为下一道工序必须等所有人都好,整条线就干等这一个——而且再招一百个厨师也没用,问题不是人手少,是活儿分得不均。

开工瞬间挤爆仓库。闹钟一响,一千个厨师同时冲向仓库,把门口堵死。不光自己进不去,隔壁餐厅也被堵在了外面。

偶尔撞车。楼上还有另一条流水线,一个每三小时开工、一个每四小时。大多数时候错开,但每隔十二小时会撞在同一刻,那一次准出事——事后去查,两条线单看都很正常。

看不出死活。远远望着后厨灯亮着、有人影在动,你根本分不清是在炒菜还是在发呆。等你知道出事了,通常是外面的客人先发现菜没来。

Google 的解法:别按闹钟开工

换个活法:流水线不再定点开工收工,而是一直开着。活儿一到就有人接,中间摆一张派工台,记着每件活儿归谁、做到哪一步。这样高峰被摊平了,仓库不再被瞬间挤爆;也终于看得出「活儿到底卡在哪一步」。

号码牌是怎么防止上错菜的

还有个细节很妙。厨师领活儿时,顺手领一块号码牌。假如他中途失联了半分钟,派工台以为他不行了,把这道菜改派给了别人——等他回过神端着菜要交,号码牌已经作废,派工台不收。这样同一道菜不会被端上桌两次。派工台自己也在好几个厂区各放一份,一个厂区停电,另一份接着派工。

代价也得说清楚:这套「一直开着 + 号码牌」比「一个闹钟加一段脚本」复杂得多;如果活儿本来就不大、每天跑一次也够用,老办法反而更省心。

一句话记住

数据流水线的敌人往往不是数据太多,而是「按点开工」这件事本身——它必然带来空转的谷、挤爆的峰,和看不出死活的中间态。规模大到一定程度,就该让流水线一直开着,并给每件活儿发一块号码牌。

想进到具体机制、示意图和选型对比表? → 切到精读版