云技术的新变革:阿里云13年后重构全部核心调度系统

在阿里云十三年的发展历史上,重新设计调度系统算得上是一个重要的技术抉择。

云计算是一个庞大的技术工程。2009年,阿里云从0到1自建国产云计算系统“飞天”,为了确保对每一行代码都有控制力,阿里云选择了一条艰难的道路:自主研发。伏羲调度系统是“飞天”三大服务之一。调度系统作为云计算的核心技术,无论是对亚马逊、谷歌还是其他云计算企业来说,都是他们最保守的秘密,而伏羲凭借自研与优异的性能,与YARN、Mesos等技术一起成为了调度系统的典型代表之一。

这么多年发展下来,很多人认为阿里云战略上最与众不同之处,就是坚持自研核心技术。作为全球集群规模最大的云计算平台之一,阿里云在技术已然成熟、稳定运行着数量庞大的业务情况下,选择了用云原生的标准重新设计和构建云计算的调度系统,并在2021年“双十一”大促之前将全球几十个数据中心、数百万容器、数千万核的资源统统搬到了新的调度系统之上。

阿里云为什么在十三年之后重构调度系统?在不影响业务运行的情况下,阿里云是如何更换“引擎”的?这种技术思路给我们带来什么启示?新调度系统有开源计划吗?InfoQ采访了几位调度系统负责人,为大家一一解惑。

发展十三年,成绩斐然的老调度系统

资源调度系统可谓是云计算的大脑,负责在众多集群内的机器里,选择一台最合适的,以最佳的资源使用姿势,做到最少的相互干扰来运行用户提交的计算作业。云计算最终目的之一是降低IT成本,最大限度地利用单台PC的CPU处理能力,而调度系统恰恰就决定着基础设施的利用率和整体运作成本。

艰难起步,从0到1自研伏羲调度系统

2008年,阿里巴巴确定了“云计算”战略,决定自主研发大规模分布式计算操作系统“飞天”,目标是将几千台乃至上万台普通PC服务器连接到一起,使其像一台多功能的超级计算机,实现超强计算性能。

2009年2月,飞天团队在北京写下了第一行代码,“飞天”系统也从此成为阿里云的奠基技术平台。伏羲调度系统是十年前飞天成立时创建的三大服务之一,另两个是飞天分布式存储盘古和分布式计算MaxCompute。

2011年7月,阿里云作为中国第一个公有云正式对外开放。这之后的十多年里,伏羲能调度的单集群规模,也从最初的几百台物理机,发展到了10万台机器。我们知道,规模每放大十倍,就意味着很多架构设计点都需要重新调整,当横向扩展遭遇不可逾越的瓶颈,就代表着系统重构的开始,伏羲就因此经历了两次重构。

2013年,伏羲在飞天“5K”项目中对系统架构进行了第一次大重构。“5K”顾名思义,就是能让调度系统支持单集群5000节点,并解决大规模单集群下的性能、利用率、容错等问题。

不断扩大单集群的规模,到现在依然是业界不同调度系统在做的事情。

如果依靠早期的Hadoop开源调度器技术,以当时的实践经验来看,并不是容易的事情,因此伏羲团队选择了架构和代码都是自己构建的自研方式。这个项目,在阿里云历史上也是一次非常有里程碑意义的“攻坚战”。

随着阿里云的业务需求变化,伏羲的内涵也在不断扩大。最开始是作为一款对标开源YARN的单一资源调度器,而后扩展成了覆盖数据调度、资源调度、计算调度、单机调度等的核心调度系统,伏羲也于2019年经历了第二次重构,并将单集群规模扩展到了十万台。

双调度系统混部实践

伏羲是负责阿里离线业务的调度系统,而于2015年正式立项的ASI调度器则支撑着阿里搜索、电商等庞大的在线业务。

在线调度历史也比较悠久,最早起源于2011年上线的T4系统,即阿里早期基于LXC和LinuxKernel定制的容器调度器。T4的技术理念与如今云原生领域的核心技术——容器,如出一辙。在线调度最开始是一个简单的资源分配系统,而后逐渐演进为Sigma调度器、ASI调度器,在发展过程中又进一步吸收并融合了伏羲离线调度系统、搜索团队基于YARN的Hippo系统的先进经验。

据称全球服务器平均利用率不到20%,因此提升服务器的资源利用率是很多大厂不断追逐的目标。

2014年左右,阿里巴巴开始大力探索混部技术,通过将在线业务和离线大数据计算的负载混部运行在共享的集群中,以期可以显著提高数据中心资源利用率。与离线调度不一样的是,类似双十一活动中的零点峰值场景,它对在线调度CPU的集群化编排要求非常高,对延迟和抖动敏感;离线业务正好相反,平时资源使用压力较高,业务资源使用较为固定,对时延不敏感。所以,只要两类负载能跑在共享的集群中使用“分时复用”的策略,就可以达到提升利用率的目的。

作为自研的调度系统,伏羲和Sigma运行在一起,这种混部系统形式曾存在很多干扰和影响,一方面是两个系统之间节点状态不一致造成的干扰,另一方面是两个系统所分配的容器互相之间的干扰。然而“混部”带来的收益又不可忽视,因此阿里于2016年开始重点研发了Sigma1.0,基于DockerSwarm通道创建容器,并将演进中的各种语言技术栈统一为Golang,同时在实践层面做了很多隔离、协同的优化工作,也将不同等级的任务调度做得更精细化。

大船难调头,阿里的调度系统发展了十多年,成果斐然,性能优异,运行的业务规模也是数千万级别了,但2021年,阿里云还是决定将伏羲、Sigma双调度协同系统重构为基于ACK的“统一调度系统”。

基于阿里云容器服务ACK的调度系统

我们在技术上到达了一个新的临界点。

2020年6月,阿里云集结了100多位调度团队核心技术人员,开始了重构的进程。

经过一年多的研发,赶在双十一之前,将数千万量级的业务切换到了新一代的“统一调度系统”上。新框架基于阿里云容器服务Kubernetes版(简称容器服务ACK),通过一套调度协议、一套系统架构,统一管理底层的计算、存储、网络资源。ACK本身提供了一个全托管的Kubernetes集群的调度能力,对于IaaS层不同类型的计算、存储、网络等能力都可以统一调度,是统一调度大资源池化生产运行的基座。

2021年双十一,新系统打通并统一了阿里巴巴电商、搜推广、MaxCompute大数据和蚂蚁业务,全面支撑了全球数十个数据中心、数百万容器、数千万核的大规模资源调度。

为什么要重建?

Kubernetes项目始于2014年,源自谷歌内部的Borg,吸收了Borg项目多年的实践经验,它超前引入了Pod概念将容器分组,大量使用了Sidecar设计模式,为容器化应用提供了自动化的资源调度,并具备动态扩容、滚动升级、负载均衡、服务发现等功能,受到大厂的大力推崇。

在接下来的两年里,与其对应的Mesos、DockerSwarm等相比,Kubernetes作为容器编排引擎的采用缓慢却很稳定,领先的科技巨头如亚马逊、阿里巴巴、微软Azure、红帽都开始启动了基于Kubernetes的新解决方案。

2019年,Sigma全面迁移到了基于ACK的调度系统。同时,在这几年里,阿里的技术体系也逐渐全面切向云原生技术,去年9月,阿里云容器服务全面升级为ACKAnywhere。

据在线调度系统负责人智清回忆,在线调度系统最初是完全自研的,云原生兴起之后,在线调度团队于2017年决定将这套技术框架迁移到Kubernetes,消除两者之间的差异并跑在阿里云容器服务ACK上。“刚开始是比较艰难的,尝试过好多版本,包括SigmaonKubernetes、KubernetesonSigma等方式,最后还是决定用最标准、最原生的、完全基于Kubernetes的方式。”后面启动的ASI项目,它做的事情就是将整个调度框架以非常原生的标准方式搬到Kubernetes上,在Kubernetes基础上做到在线、离线调度的真正融合。而且在业务侧,阿里也专门组织了一支云原生团队来推进容器化,最终形成一个整体的云原生资源池。

云原生统一调度架构师懿川将这些年调度系统的发展过程总结为三个阶段:

第一个阶段是非容器阶段,仅有调度的需求,并且基础设施还没有完善,属于调度的最初期阶段。在这个阶段,无论是伏羲还是T4,基本都是借助一些比较简单的隔离概念,以及一些内核的能力,靠自身的演进来实现对调度的最朴素的需求。

第二个阶段是开始进入容器阶段。容器技术使用场景变多,规模变大,Sigma以容器为主进行了改造。在这个阶段,需要调度系统既能承接业务的需求,又能同时深耕容器技术。

第三个阶段是云原生化,调度系统完全基于新一代的容器技术,包含阿里自己的安全容器、RunC以及其他的虚拟化技术,同时调度器的实现框架上也需适应整个Kubernetes生态。也就是将电商、搜索和大促这种创造洪峰型的业务,以及十多年调度系统技术积累,再结合Kubernetes开源架构的优势,整合到一起进行大规模应用。

总而言之,阿里重建调度系统的决策,是基于业务演进的需要,也是希望能有一个全局资源池,统一支撑所有业务形态。

云计算的本质,是将小的计算碎片变成更大的资源池,充分削峰填谷,提供极致的能效比。混部技术打破了多资源池的割裂,不同计算领域的多调度大脑协同共用资源,让业务间峰谷互补的优势发挥到最大,但两个调度器,由于彼此间无法高效地交互细粒度信息,阻碍了混部效果的进一步提升。

另外调度成本、资源的调度效率和业务独占资源池有很大的关系。从过去的调度系统演进经验来推断,建设统一资源池是最好的提升效率的方法:业务上有很多共同性的调度需求是可以互相配合和优化借鉴的,各自演进并不利于发展。无论是搜索还是电商,在线还是离线,如果作业类型越来越相近的话,就可以通过合作和共建,作为同一种调度类型去建设和演进,集中力量将云原生终态方案一起做到极致,并希望最后能做到自研、商用、开源三位一体。

“反倒是做成一个统一的调度系统是比较难的,做成多种调度系统相对来讲更容易。而且类似谷歌的Borg或微软的Apollo系统一开始也不是所有的调度策略、逻辑以及场景都能支持,也有一个在演进过程中逐步增加功能的过程。”

新调度系统对Kubernetes的改进和增强

新调度系统需要支持在线离线、低频高频各种调度类型和众多业务种类,且要完全兼容Kubernetes生态,还需要是模块化、组件化,形成一个可插拔式的机制。

统一调度团队针对Kubernetes社区版在Pod和资源安全上做了很多优化,围绕APIServer、ETCD、Kubelet做了不少功能优化和代码修改。统一调度在Pod和接口调用上也做了很多安全防御方面的事情,例如ETCD错配或出现其它问题时如何进行防护,从而保证底座平台的安全。但最重要的两方面改造在单集群规模、调度频次性能上。

Kubernetes早期版本仅支持几百节点的单集群规模,与Mesos支持的节点数量相去甚远,各大厂集合力量一起大幅提升了Kubernetes的集群管理规模,到1.9版本就已可以稳定支持5000个节点,但远达不到阿里原来调度系统单集群上万节点的性能要求。并且Kubernetes以APIServer为中心的消息同步机制,更适用于调度频度较低的在线服务场景,对于阿里系统中的大数据计算场景,可达每秒10万次的调度频度。所以“尽管Kubernetes已经演进很久了,但是在我们的调度器上仍然需要投入大量的工作来改造,才能够满足我们的要求。”

如果要问哪些历史经验有助于新系统重构的话,集群管理规模的突破必定是其中之一。

2013年的飞天5K项目,已经早早突破了单集群5000节点的规模。在后面的演进中,伏羲再次经历了第二次重构,据伏羲分布式调度负责人李超回忆说,当时主要考虑到“现在集群的规模可能动不动就过万台,不光是物理节点在增加,CPU的处理能力也在不断增强。5年前一台物理机上一般二三十个CPUcore,现在一台物理机节点里已经变成了一百多个CPUcore了。相当于即便物理机节点不增加,可调度的总资源扩大了五六倍,甚至扩大了一个数量级,这对调度的挑战是很大的。”

“如果规模无限扩展下去,在架构和设计上也要有一个应对的方案。随着规模继续变大,我们也要Hold得住。”

在伏羲2.0资源调度的重构里,伏羲团队提出了一些比较新颖的观点,在混部中引入去中心化的多调度器架构,基于悲观锁这种Partition策略,解决调度之间的冲突,保证调度latency性能达到与小规模下的系统相同的水平。

但Kubernetes单集群规模有限,远不能满足今天的诉求。统一调度团队通过对APIServer和ETCD的算法优化、在服务端进行数据压缩以及链路治理的方式,将集群规模从8千台(2020年)扩展到1.2万台(2021年)节点,而业界一般达到8千台就已经是超大规模。

统一调度团队参考了Kubernetes社区schedulerframework插件化和多调度机制,通过灵活的调度框架让不同的调度团队可以定制各自的调度需求,从而让Kubernetes能够很好的去支持一些场景下的大规模高并发的调度需求。比如在阿里大数据场景下,对调度系统的要求是每秒钟能发生十万次调度。

飞行中更换引擎

2021年双十一之前,伏羲和ASI调度系统中的机器和计算资源已迁移到了统一调度系统,仅伏羲就包含几万台机器、数百万核计算资源,迁移过程需全程对业务和用户透明无感。

同时这个系统本身是一个涉及非常多人的协同项目,中间涉及到一次完整的系统重新设计和实现,还要将原有积累的伏羲、Sigma、ASI以及Hippo的设计经验融合进来,且保持对业务的兼容性和对开源框架的兼容性。

可以说,整体设计非常复杂,代码开发涉及的耦合也很高,各个系统之间还存在各种对接。

以伏羲为例,在阿里MaxCompute技术体系中,伏羲一方面是分布式系统的资源管理和调度组件,需要与上层作业执行引擎进行资源交互,另一方面也是各种运维管控的数据源,复杂的模块依赖决定了系统升级是一件非常艰巨的事情。如果将MaxCompute比作一架高速飞行的飞机,统一调度升级就是要给这架飞行中的飞机更换引擎,难度可想而知。

在这种情况下,要让新系统在“双十一”大促中表现得更有保障,李超表示主要有两大技术举措:

第一是灰度上线之前,有专门的风洞测试机制,它能把历史上真实生产的一些需求、请求在测试环境去做回放(Replay),从而验证经过新一轮的修改或者新的功能后系统是否能稳定上线。

第二是在稳定性上,在状态的可恢复上,传统的方式是基于KubernetesETCD的持久化机制,但是因为大数据的调度频率达到每秒十万次的调度,这种状态要做持久化保障是比较困难的。新系统引入了软硬状态failover机制,简单来说是基于这个状态的重新收集,而不是完全依赖于状态的持久化。在不同的角色上去收集状态,重建调度器当时的状态。

另外在工程上也需要一套很严格的实施和上线机制:

未来规划

每个技术都有自己的生命周期,十多年前大家很难想到Kubernetes会成为当今技术界的扛把子,而技术演进过程中,开发者的使命就是用最合适的技术来构建我们的系统。使用新技术不代表过去的经验和成果不再有价值,统一调度系统也是吸取了伏羲和Sigma系统构建中的精华。

开源技术影响着调度系统的演进,而部署在大型企业生产环境中的系统,无论是谷歌的Borg、微软的Apollo还是脸书的Twine,反过来也在影响开源项目的系统演进。统一调度团队表示,未来会进一步提升和完善整个调度器的功能和能力,继续往2.0推进;另一方面,要完成自研、商用、开源三位一体的目标,作为战略计划推进项目的开源,包括开源核心代码和关键能力。建设这样一个超级系统,投入和挑战都非常大,而开源能够将更多的人聚集起来,一起把这套系统做得更好。

延伸阅读:

采访嘉宾简介:

懿川,阿里巴巴研究员,云原生统一调度架构师。全面负责统一调度项目,在分布式领域和资源管理领域有多年的经验积累。

李超,阿里云智能计算平台事业部资深技术专家,飞天平台伏羲分布式调度负责人,拥有十多年分布式系统与大数据研发经验。

智清,阿里云智能容器服务资深技术专家,ASI调度系统负责人,负责了阿里巴巴在线调度从Sigma、ASI、到全面统一调度的迭代演进。

THE END
1.强化学习ReinforcementLearning在航空航天领域的应用与挑战强化学习,Reinforcement Learning,航空航天,应用,挑战,控制,优化,决策 1. 背景介绍 航空航天领域一直以来都是科技发展的前沿阵地,其复杂性、安全性要求极高,对智能控制和决策的需求日益迫切。传统控制方法往往依赖于预先设定的规则和模型,难以应对复杂、动态变化的环境。而强化学习(Reinforcement Learning,RL)作为一种机器https://blog.csdn.net/2301_76268839/article/details/144429525
2.自然语言强化学习:一个可处理语言反馈的强化学习框架这种困境促使研究团队开始探索一个更具突破性的方向:能否设计一个框架,让 AI 系统完全通过与环境的交互来学习,而不依赖任何人类标注数据?传统强化学习为这个问题提供了灵感,但其单一数值奖励的机制难以满足复杂场景的需求。团队意识到需要一个新范式,既要继承强化学习的数学严谨性,又要具备自然语言的表达丰富性。这个https://hub.baai.ac.cn/view/41851
3.大数据上云存算分离演进思考与实践大数据阿里技术异构计算的资源负载混部:在统一存储平台提供面向异构计算的工作资源负载下的多维度查询分析服务。在线与离线计算共用计算和存储资源。解决资源波峰波谷问题,实现资源动态削峰填谷 存储降本: 存储利用率+冷热分层。支持基于分布式存储系统上的多层存储(热存储/标准存储/冷存储等)。举例来说,存储降本优化主要依赖于归档与冷https://xie.infoq.cn/article/de0971c840628b7b467a110dc
4.Volcano:在离线作业混部管理平台,实现智能资源管理和作业调度节点可观测性增强,对在离线任务资源布局动态优化,识别在线业务是否受到干扰,对干扰进行定位和控制。 集群可观测性增强,对集群任务布局动态优化,减少集群资源使用不均衡问题。 基于Volcano混合部署解决方案如下图所示: 图3 基于Volcano混合部署架构 Volcano混部调度能力 https://developer.huawei.com/consumer/cn/forum/topic/0202841185168780412
5.云计算:ChatGPT的“中枢神经”云原生离混部技术实现离散训练,在线微调 ChatGPT基于大量优质的数据语料训练,实现对话意图识别和内容生成能力的突破,这主要由于ChatGPT具有强大的智能算法学习和记忆调用基础,通过云原生离线混部和极致弹性调用机制,离线训练千亿级别的超大规模参数,形成了ChatGPT的存储记忆资源池,通过在线补充完成人类反馈强化学习(RLHF)的微调https://m.thepaper.cn/newsDetail_forward_22342649
6.在离线混部云容器引擎最佳实践调度在离线混部的核心目标是通过将在线应用和离线应用混合部署到同一个集群中,最大程度地提高集群的资源利用率,进而降低企业的运营成本。值得注意的是,在线应用和离线应用这两种不通类型的应用对服务质量的要求是不一样,在线应用往往是延时高度敏感,对资源质量要求也更高。而离线应用则对延迟要求相对宽松,有更好的重试容错https://www.ctyun.cn/document/10083472/10172926
7.阿里决战双11核心技术揭秘——混部调度助力云化战略再次突破在大家如丝般顺滑地完成一次次秒杀、抢购和付款过程的背后,是阿里巴巴技术团队经历数年时间的系统打磨,技术架构优化所做出的努力。而底层基础设施服务质量不断提升、IT 成本增加逐年递减的演进历程,都由一个名为「云化战略」的技术梦想所贯穿起来。 特别是 2017 年双 11,阿里巴巴首次混合部署了在线服务、离线计算以及https://www.leiphone.com/category/ai/HHa8Y9tPeVgB1Kt8.html
8.Kubernetes资源拓扑感知调度优化腾讯云开发者社区基于离线虚拟机的混部方案导致的节点实际可用 CPU 核心数变化 面对运行在线业务的云主机平均利用率较低的现实,为充分利用空闲资源,可将离线虚拟机和在线虚拟机混合部署,解决公司离线计算需求,提升自研上云资源平均利用率。在保证离线不干扰在线业务的情况下,腾讯星辰算力基于自研内核调度器 VMF 的支持,可以将一台机器上https://cloud.tencent.com/developer/article/2029446
9.浪潮云海首席科学家张东:面向一云多芯的系统设计云海云操作系统(InCloud OS)、Apsara Stack、EasyStack等通过单一资源池实现异构资源的统一调度和互联互通,但当前阶段主要解决“多芯”的混部问题,距离以应用为中心的跨架构运行和低成本切换尚有较大差距。为满足多芯共存条件下业务的稳定运行、平滑切换和弹性伸缩,如下科学问题和技术难题亟待解决。 https://www.cet.com.cn/itpd/itxw/3465583.shtml
10.便宜云服务器容器服务在AI智算嘲的创新与实践容器服务也在积极推动上游开源社区,在Kubernetes体系下,定义支持各类计算框架和任务类型的云原生任务标准API和生命周期。帮助用户可以在Kubernetes集群上以统一的标准和接口,管理调度各类数据计算类工作负载。 ACK扩展了Kube-scheduler framework,与Slurm调度系统打通,即支持节点池维度的分节点调度,也支持共享节点资源的混部调度http://zhanzhang.ceden.cn/?article/1644909
11.腾讯云专有云TCS容器平台企业级云容器平台云原生容器腾讯云专有云TCS容器平台,适配丰富异构IAAS设备,满足利旧需求,广泛适配兼容信创CPU/指令集/操作系统。自研高性能负载均衡;基于eBPF的高性能网络;跨集群统一服务发现;高性能Ingress;平台高可用和部署方案,运维运营能力。 立即咨询 传统企业信息化体系存在的问题 https://www.yun88.com/product/3926.html
12.华为云UCS华为云与本地IDC协同,实现弹性上云 构筑本地集群极速弹性上云,流量高峰,业务云上秒级扩容 结合Volcano以及HCE OS 2.0能力,构建本地集群在线、离线混部能力,资源利用率提升40% 在AI训练和AI推理场景下,通过GPU虚拟化技术实现GPU隔离以及资源利用率提升 云原生应用全景观测,大幅提升运维效率 https://www.huaweicloud.com/product/ucs.html
13.阿里云异构计算类云服务器介绍(GPU云服务器FPGA云服务器等神龙AI加速引擎AIACC是基于阿里云IaaS资源推出的AI加速引擎,用于优化基于AI主流计算框架搭建的模型,能显著提升深度学习场景下的训练和推理性能。配合集群极速部署工具FastGPU快速构建AI计算任务,全面提升研发效率和GPU利用率,缩短计算时间并降低AI的推理延迟。 2、神龙AI加速引擎AIACC产品优势 https://www.jianshu.com/p/d4c370053533
14.深入硬件层内核态与用户态,一文看懂火山引擎云原生操作系统近日,在2020全球分布式云大会上,火山引擎解决方案总监于鸿磊以“多云环境下的云原生操作系统”为主题,从云原生操作系统出发,分享了火山引擎敏捷高效的基础设施与技术,为企业追求业务持续增长的提供了一种创新技术思路。 激发创造,释放潜能 字节跳动具有长期沉淀、服务于数亿用户的大数据技术、人工智能等基础技术服务能力,拥https://www.volcengine.com/docs/6316/66821
15.小红书近线服务统一调度平台建设实践对于服务,我们目前将服务划分为强隔离要求在线服务、普通在线服务、近线服务、离线服务4个QoS级别。 服务QoS 资源保障模型,本质上就是按照服务的 QoS 级别,给予不同的算力保障。 对于近线服务,调度优先级为:独占资源池机器 > 在线集群闲置算力 > 混部算力 > 公有云容器实例服务。目前公有云容器实例服务,只是作为一https://blog.itpub.net/70016482/viewspace-2927565/
16.成立3年,云服务厂商火山引擎全景扫描该服务属于实时计算方面,完全基于云原生构建:脱胎于抖音内部超大规模实践,日常峰值 QPS 达100亿,稳定性提升51%;通过Serverless,实现弹性扩缩容和在离线业务混部,资源利用率提升40%;并且能够统一调度,满足流批一体等多种计算模态。通过LAS和Serverless Flink,企业可以更加高效、经济的建设自身的数据底座。https://www.eefocus.com/article/1512934.html