前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Autopilot: workload autoscaling at Google 随笔

Autopilot: workload autoscaling at Google 随笔

作者头像
s09g
发布2022-07-06 15:33:14
7970
发布2022-07-06 15:33:14
举报
文章被收录于专栏:s09g的技术博客

感谢孟老师的推荐,发现了这篇关于Borg自动容器托管的论文📃。Borg是Google的容器编排系统,kubernetes的原型。

去年在做global / regional awareness split的时候,专门在vns上启用了这个功能。当时大致上知道这个feature的作用,但是没有深究过背后的原理。Autopilot功能在Borg完全启用之后,SRE发表了这篇论文。只能说真是太卷了,连SRE都有一群人在做data mining。最早的可溯记录是在2016年borg就有这个计划了,并且加到了kubernetes的roadmap里。kubernetes明明14年才开源,今年autopilot功能才在GKE上线……

问题来源

autopilot有两个角度的考量

1. 是用户在部署任务的时候,出于谨慎考虑,肯定会多申请一些资源。比如vns在大多数zone上平均消耗0.3~0.6个GCU (Google Compute Unit),偶尔遇上峰值会消耗1-2个GCU,过去几年只有一次因为事故消耗了5个GCU。但是因为有这种顾虑,所以在申请资源的时候一律申请15个GCU。Google Cloud总共100多个staging zone,200多个prod zone。每个zone申请15 GCU,但是平均消耗0.3 GCU,资源浪费你算算…这其实已经算少的了,因为vns承载的流量不多,以前每个cell courier要申请50个GCU。

所以资源浪费很大。这又进一步导致负载不均衡,比如两台机器提供了相等的资源,但是因为大家申请资源的时候都在拔高预算。结果看起来两台机器可能拉满了,实际情况可能一个跑了60% CPU,另一个跑了20% CPU。

2. 另外从sre的角度来看,borg或者说kubernetes,虽然不是操作系统,但是复杂度已经不下于操作系统了,人工管理已经很难了。大部分公司应该不能像谷歌一样每个team都有SRE。中小公司连devops建设都勉强,上kubernetes完全是nightmare。所以容器编排的人工管理成本很高,从Google的角度我们就应该尽量让程序管理这种自动化的工作。

解决方案

一个基本思路是,用户启动了一个任务,这个任务获得了一些资源配额。但是在整个执行过程中肯定有一些unused resources。这里借用linux quota的概念,每个任务申请的是hard quota,autopilot会去动态地调整soft quota,尽可能回收没被使用的资源。

autopilot用了两种主要算法,一个是moving window recommender。实际上是在一段时间内,如果没有持续使用申请的资源,soft quota就会按照某个衰退率下降。比如某个服务刚启动,或者遇上一个peak,这时候可能CPU或者memory一下子拉满到上限。但是运行一段时间之后,服务转向平稳运行,或者峰值过去了。这个时候再按照quota上限分配资源就没必要了,需要将soft quota慢慢降下来了,回收没有用到的算力。这里面定义了一个衰退率,每过一段时间按照这个比例降低soft quota,比如CPU的半衰期定为12小时,Memory的半衰期为48小时。moving window也不是啥新技术了,比如爬虫里面就有,但是用在这里挺合适的。论文这里还讲了一些细节,比如怎么预测峰值、均值、n分位值...对于不同类型的任务怎么做CPU/RAM的资源管理。都比较简单,但是挺有效。

另一个算法就比较牛逼了,强化学习(搞笑)。论文称之为Recommenders based on machine learning。简单来说,这个算法是用来调整上一个算法的参数的。比如CPU的soft quota每12个小时降低一半,但是不可能一到12个小时瞬间砍一半,而是在过去的12个小时里,一点点平滑下降。那么问题来了,什么时候下降。

论文表示,对于信号s,在时间t,从一组模型中计算全部可能的极值L,然后根据历史数据,计算underrun cost和overrun cost,加权之后,判断是否分配资源。用人话说,比如autopilot想要判断一下能不能收回点CPU资源,它会每隔一段时间采样一次,拿这些数据交给一堆训练好的模型跑个二分类,然后算算看自己是underrun还是overrun了。这个模型倒是也好训练,毕竟负反馈机制比较明显,CPU/RAM资源一下子衰退过多,job当场就OOM(Out of memory)了。

总结

剩下来,论文提了一些指标,表明Autopilot是多么有效,如何减少了工程量,打了一下广告,吹了吹自己。做出了总结,向所有用户强烈推荐。

我一度认为这是一篇谷歌低质量论文,自适应算法就自适应算法,非要扯强化学习,还拿自己类比多臂老虎机问题。论文还凑了一堆公式,让自己看起来确实像是机器学习的样子。第一眼看,脑阔疼;第二眼,哎有点眼熟;第三次看,害~这不就二分类么。

但是多读几遍之后,发现里面有很多细节,Autopilot的管理还挺全面。但是本篇只是个随笔,细节还是等我有空把文章翻译一下。看起来为了发论文,好像一直在蹭机器学习的热度。但是仔细读的话,会发现Autopilot的决策很重视可解释性,所以里面没有用任何花里胡哨的算法,最多也就是二分类了。就像Youtube以前发表的《深度神经网络推荐系统》,看摘要以为有什么黑科技,点开一看 embedding + normalize + ReLU然后就softmax输出了…但是人家就是效果好,且可解释。

所以关键不是用什么黑科技算法,简单的方案更便宜,只要一样能解决问题比啥都强。

最后,其实我工作之后就没有再回头看机器学习的东西了,毕竟这行里面卷的人太多,又没什么乐趣。闲置了这么久,有些知识难免忘记,如果对论文理解有什么不足的地方,欢迎补充。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 s09g的技术博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档