IT 论文精读 · PAPER 61

Autopilot:Google 的工作负载自动伸缩

Rzadca 等 · 华沙大学 & Google · EuroSys 2020

EN →

这篇论文干了什么?

2020 年,Google 公开了 Autopilot——一个替工程师自动决定「每个程序该分多少内存、多少 CPU」的系统。论文写作时它已管着 Google 全球机群里超过 48% 的资源用量,把「被预定了却一直没用上」的那部分从 46% 压到 23%——按机器数折算是上万台的量级。

先说个怪事

云上最大的浪费,往往不是机器闲着,而是被人预定了、却一直没被用掉。

你上线一个服务,平台让你填一张表:这东西要多少内存、多少 CPU?说实话,没人真的知道。而填错的两种后果完全不对等:填少了,内存一超程序当场被杀、CPU 一超被卡到爬,半夜被叫醒的是你;填多了,只是账单上多一笔,当场没人骂你。

于是每个人都往大了填——单独看谁都理性又无辜,加起来却是天文数字的空转。云上的浪费主要不是「机器伸缩得不够快」,而是「人不会填这张表」。

点子

Autopilot 的点子朴素得几乎无聊:别再让人猜了。系统天天看着每个程序真实用了多少,自己把这个数填上、并随时改。就像水电公司不会让你申报下个月要用多少度电,而是照着你过去的用量给你定档。

它到底怎么定这个档

三步,每一步都很像人的常识。

第一步记账:给每个程序记一本「过去用了多少」的账本,而且越旧的记录颜色越淡——上个月某天的一次偶发高峰,不该永远绑架今天的配额。

第二步两种资源、两种胆量:内存看历史最高值,因为内存一超就是当场被杀,这个赌打不起;CPU 看「绝大多数时候都不超过的那条线」,因为 CPU 超了只是慢一点、能忍,不必按最高峰买单。定完档再往上留一点安全余量。

第三步拿不准就开个会:定档的规则不止一套(账本褪色的快慢、余量留多留少都可以不同)。Autopilot 干脆让好几套规则一起上,各自把过去几周重新推演一遍——「要是当初听你的,会闯几次祸?又白留多少?」谁的账最好看就多听谁的。而且改主意本身也要记一笔代价,免得它今天听 A、明天听 B 地来回横跳。

真正的难处不在算法

「照着历史用量定配额」谁都想得到。这篇论文值钱的地方,是它在十万台机器量级的真实环境里跑通了,而且让工程师肯把手松开。

秘诀是把那份「不对等」明明白白写进规则:省过头的代价,被算得比浪费重得多——这架天平从设计上就是歪的。再配上「先离线推演 → 再空跑不生效 → 再小范围对照 → 最后灰度铺开、随时能一键退出」的上线节奏。结果它不但没多杀程序,反而让被内存超限严重折腾的程序少了约十倍——很多人当初拍脑袋填的数,还不如机器估的准。

也说句诚实的:它只会照着历史往下推。第一次上线、或形态突变的程序没有历史可抄,只能先按保守的默认值来。

一句话记住

云上的浪费大头不是「伸缩不及时」,而是「人填不准资源申请」——填少了挨打、填多了没人管。Autopilot 把这张表交给机器:看会褪色的历史用量,内存按峰值、CPU 按高分位,再留一点安全边际,还让好几套规则回放历史比谁代价更小。Google 靠它管住了近半个机群,浪费从 46% 降到 23%,而程序被内存杀掉的情况反而更少。

想看衰减直方图的算法、多模型推荐器的代价函数和完整实验数字? → 切到精读版