获国际架构顶会ATC2021最佳论文!Fuxi2.0去中心化的调度架构详解

简介: 近日,在国际体系架构顶会USENIX ATC2021上,阿里云飞天伏羲团队与香港中文大学合作的一篇论文《Scaling Large Production Clusters with Partitioned Synchronization》不仅成功被大会录取,而且被大会专家组评定为三篇最佳论文之一(Best Paper Award)。

image.png

作者 | 冯亦挥、刘智、赵蕴健、金晓月、吴一迪、张杨、郑尚策、李超、关涛
来源 | 阿里技术公众号

引言

近日,在国际体系架构顶会USENIX ATC2021上,阿里云飞天伏羲团队与香港中文大学合作的一篇论文《Scaling Large Production Clusters with Partitioned Synchronization》不仅成功被大会录取,而且被大会专家组评定为三篇最佳论文之一(Best Paper Award)。

ATC在计算机系统领域极具影响力。自1992年至今,ATC已成功举办31届,吸引了普林斯顿、斯坦福、加州大学伯克利分校、康奈尔、中国清华大学、北京大学等顶级名校,以及微软、英特尔、三星等科技巨头发布研究成果。ATC 对论文要求极高,必须满足基础性贡献、前瞻性影响和坚实系统实现的要求,2021 USENIX组委会录用64篇(录取率为18%),全球仅选取3篇最佳论文(其他两篇来自Stanford University和Columbia University)。这也是ATC最佳论文首次出现中国公司的身影。

本次大会上,我们详细介绍了Fuxi 2.0项目的最新成果,超大规模分布式集群去中心化的调度架构,首次向外界披露了阿里云在超大规模集群调度上的实现细节,也是飞天操作系统核心能力的又一次成功展现。

一 论文背景

AI/大数据计算场景,随着计算需求的快速增长,云计算集群突破单集群万台规模(一个集群可能有10万台机器,每天执行数十亿个任务,特别是短时任务),以实现高利用率低成本的附加值,具有重要意义。资源调度器作为大型生产集群的核心组件,它负责将集群内的多维度资源请求与机器资源进行高效匹配,而集群规模的增长,意味着有更高的并发请求,产生”乘积“效应,使调度复杂度急剧增加。因此,如何实现集群规模的可扩展,在保持良好的调度效果的同时,做到高并发、低延时,是业内公认的非常艰巨的任务。传统的中心调度器,受限于单点调度能力,大多数无法处理生产级别的规模,也无法保证稳定性和健壮性,做到升级过程对用户透明。

二 现状分析

1 作业负载

在阿里巴巴,单个计算集群每天运行着数百万的作业。图1a(实心曲线)绘制了一个集群某个月份内每天随机处理的作业数,334万至436万,而一个作业由许多任务组成,图1a(虚线)显示每天的任务数量大概为从31亿到44亿。其中大部分任务都是短时任务,如图1b所示,87%的任务在10秒内完成。大规模集群的调度负载还是非常大的。

image.png

2 调度架构升级的必要性

在Fuxi1.0,调度器遵循典型的master-worker架构,FuxiMaster负责管理并调度集群中的所有资源,同时每台机器上有一个agent,Tubo,定期通过心跳消息向FuxiMaster同步状态。用户提交的每个作业都有其所在的quota组的信息,quota组能使用资源的最大最小值由SRE设置。我们的quota机制既能在集群高负载时保证各个quota组之间的公平性,也能在集群相对较闲时,削峰填谷,让集群资源被充分使用。

近年来,计算集群的规模在显著地增长,在可预见的将来,集群规模很可能突破十万台。面对超大规模集群,一种方法是将集群静态切分为几个小集群,但该方法有着明显的局限性。首先,一些超大规模作业的资源需求可能就超过上述单个集群的规模;其次,集群的切分也会带来资源碎片问题,局部视图无法保证全局调度结果的最优;最后是其他非技术的因素,比如project之间存在依赖关系,同一业务部门的不同project需要互相访问数据,将它们部署在同一个集群(而不是拆分成一个个小集群)会大大降低运维和管理的代价。

但单master架构无法处理十万级别的集群规模,主要有两方面原因:1)随着集群规模的扩大,受限于单调度器处理能力的上限,master和worker之间的心跳延时会增加,调度信息不能及时下发,导致集群利用率下降;2)规模的提升意味着更高的任务并发度,使调度复杂度急剧增加,最终超过单调度器的处理能力。

3 调度的目标和挑战

除了规模可扩展性上的挑战,调度器还应在以下多个调度目标间进行权衡,我们关注的目标主要包括:

  • 调度效率(或者延时),即一个任务需要在资源上等待多长时间,一个好的调度器应该让资源快速流转。
  • 调度质量,资源的约束是否都被满足,比如data locality,更大体积的内存,更快的CPU型号等。
  • 公平性和优先级,在多租户共享的生产环境,需要保证租户间资源使用的公平性,同时提供高优先级作业的保障机制。
  • 资源利用率,一个极其重要的目标,集群利用率低会面临很多挑战,尤其是财务上的挑战。

但上述几个目标之间通常是互相冲突的,比如,更好的调度效果往往意味更长的调度延时,绝对的公平性有时会导致资源未能被充分使用,从而导致集群利用率下降。

经过十几年的积累,伏羲的资源调度器通过各种策略在上述几大目标间实现了很好的权衡,但考虑资源调度周边还有其他兄弟团队开发的应用组件,我们在设计新的调度器时,也应该做到尽量少改动,以保持系统的健壮性和向前兼容性。调度器架构调整引入的系统升级应该对用户是透明的,不管是内部用户还是外部用户。

三 理论概述

针对调度器的规模可扩展问题,我们对业内现有的调度模型做了广泛的调研(详见论文),并选取了其中一个最适合我们场景的方案(Omega)进行进一步的分析。以Omega为代表的shared-state的多调度器架构能满足我们之前说的那两个约束条件,向后兼容和对用户透明。但是share-state方案不可避免的会带来调度冲突,我们希望能清楚如下几个问题:

  1. 有哪些因素会影响冲突,它们各自的权重是多少?
  2. 调度延迟会恶化到什么程度?
  3. 如何才能够避免或减缓冲突?

我们首先对冲突进行建模,得出冲突(Conflict)的期望为(推导过程详见论文):

image.png

在上述公式中,Yi是多调度器在某个slot上冲突的期望, N是调度器的数量,K是单个调度器的处理能力,S是机器可调度的槽位数。可见,如果想减少冲突的概率,可以通过增加S或者N来实现。增加S是一种很符合直觉的方式,通过额外的资源供给来降低冲突概率。增加N的方式有些反直觉,因为调度器越多,越容易增加冲突,然而虽然在一轮调度过程中冲突变多了,但每个调度器一开始分到的task调度压力也等比例地减小了,所以就有了更多的时间来解决冲突,最终反而起到了降低冲突概率的效果。总结起来,增加N是在整体压力不变的情况下,通过降低每个调度器的调度压力来实现冲突的减少的。

此外我们也通过公式证明了,在调度器数量>1的情况下,无法彻底消除冲突。

下面的实验反映了不同的冲突因素对冲突的影响:

image.png

  • 图a考量的是任务压力变化对冲突产生的影响。R表示调度器收到的task速率,可以看到在调度器数量相同的情况下,随着R的增大,为了保持冲突数量不发生明显的变化,需要额外补充的slot数目就越多;反过来,在R不变的情况下,随着调度器数量的增加,每个调度器承受的调度压力下降,需要额外补充的slot数目就越少。
  • 图b反映的是资源视图同步频率变化对冲突的影响。G表示同步的延迟,可以看到在调度器数量相同的情况下,随着G的增大,为了保持冲突数量不发生明显的变化,需要额外补充的slot数目就越多;反过来,在G不变的情况下,随着调度器数量的增加,每个调度器承受的调度压力下降,需要额外补充的slot数目就越少。
  • 图c反映的是机器分数(比如更好的硬件性能)对冲突的影响,V表示机器分数的方差,可以看到在调度器数量相同的情况下,随着V的增大,为了保持冲突不发生明显的变化,需要额外补充的slot数目就越多;反过来,在V不变的情况下,随着调度器数量的增加,每个调度器承受的调度压力下降,需要额外补充的slot数目就越少。
  • 图d反映的是机器partition数量对冲突的影响,可以看到这个因素对冲突几乎没有影响。因为不管机器partition的数量是多少,调度器总是以自己内部的视图状态进行调度,即使有些视图的状态已经不够新了,所以partition数量并不会对冲突产生明显的影响。

由以上分析不难发现,在shared-state架构下,如果我们想尽可能的降低冲突,可以采取增加额外资源或者增加调度器数量的方式来降低冲突,但在实际的生产环境中,增加额外资源是不可能的,一方面是集群大小是相对固定的,此外新引入slot也会大幅增加集群的成本;而增加调度器则会显著带来维护\升级的代价。

四 方案实现

由于我们的目标是为了减少冲突,所以我们先简单介绍下一种能够完全消除冲突的策略,悲观锁策略。悲观锁策略是每个调度器能够调度的机器是“静态排他\静态划分”的,这样显然能够消除冲突,但是对利用率是非常不利的,因为会产生资源浪费(其他调度器本来可以调度)。还有一种策略是通过类似于zookeeper等组件实现的基于锁抢占的调度策略,当一批机器被某一个调度器锁住时,其他机器是由于拿不到机器锁从而暂时无法调度,当持锁的调度器放锁时,其他调度器可以通过锁竞争来尝试进行调度,但是在大规模高并发的调度场景下,这种高频的交互会对调度效率产生很大的负作用。

由前面的分析可以知道,降低资源同步的延迟能够有效降低冲突,由此我们提出了一种基于“分区同步”(下称ParSync)的策略:首先将集群的机器分为P个partition,同时要求P>N。通过round robin策略,每个调度器在同一个时刻去同步不同partition的资源视图,这样做能够保证在每个round内每个调度器都能够更新完所有partition的资源,而P>N保证了同一时刻不同的调度器不会同步相同的patition资源。

根据前文所述,在大规模高并发的调度场景下,调度器最优先的目标往往不是locality prefer而是speed prefer,所以调度器会优先在最新同步的partition机器内进行资源调度,在该策略下多调度器间是不会产生资源冲突的。ParSync其实是变相降低了每个patition对其当前同步调度器的同步延迟,因为站在当前更新的调度器的视角,这个partiton的同步延迟其实是低于其他未同步的调度器的,这也是能够有效降低冲突的理论原因。

我们提供三种调度策略:latency-first, quality-first, adaptive。latency-first是在优先在最新的partition上调度资源, quality-first是优先在score最好的机器上调度资源,而adaptvie是先采取quality-first的调度策略,当资源等待时间超过阈值时再采取latency-first的策略。我们通过一组实验来验证3种调度策略的调度效果:我们将调度器分为2类,A\B类调度器在阶段1都收到自身调度能力的2/3调度请求;阶段2,A类调度器收到等同于自身调度能力的调度请求,而B类调度器不变;阶段3,A\B类调度器都收到等同于自身调度能力的调度请求。

image.png

  • 从(a)(b)可以看出,在阶段1\2\3, 调度quality的表现都是很好的,但是在阶段2\3随着调度压力的增加,调度latency出现了直线上升的情况,这是符合直觉预期的。
  • 从(c)(d)可以看到,在阶段1调度器压力只有2/3的时候,调度latency和quality都是表现比较好的。随着调度压力的增加,quality质量开始出现了下降,但是latency的增加却非常有限,这也符合直觉预期。
  • 从(e)(f)可以看到,在阶段2,由于B类调度器的调度压力仍只有2/3,所以还停留在quality-first策略,而A类调度器由于调度latency的增加进入到了latency-first策略。通过仔细观察可以看到在quality的图里B类调度器的quality质量(浅灰色)是优于latency-first策略的。在阶段3,A\B类调度器同时将调度latency约束在了门限值(1.5s),符合设计预期。

五 实验分析

我们通过“风洞”系统来验证整个调度框架。在风洞环境下,除了调度器是真实的,单机节点和am都是程序模拟出来的,它们和调度器进行真实的资源交互,通过sleep来模拟作业的执行,这样在一个node上就可以进行1:500的模拟。

测试环境:

  1. 20个调度器,2个resource manager
  2. 集群总共有20w个槽位
  3. 调度器调度能力为40k task/s
  4. 调度分为3个阶段,调度压力分别调度器能力的50%,80%, 95%,80%, 50%

image.png

从图(a)可以看出,随着调度压力的变化,latency-first在调度latency上优于adaptive, 而quality-first优于StateSync(以Omega为代表的视图同步策略,调度器每次同步整个视图信息),latency-first策略能够将latency控制在一个非常好的水准,而StateSync的latency已经不受控制了,这也很好地证明了ParSync策略对冲突控制的有效性。对于quality-first策略,其latency也出现了不受控制的情况,这是调度器一直尝试在分数最高的机器上进行调度所带来的副作用。而adaptive策略对latency-first和quality-first进行了一个良好的折中。

从图(b)中可以看出,随着调度压力的变化,latency-first和adaptive策略在quality上表现都有一个明显的下降,这个符合预期。而quality-first的表现基本和StateSync持平。

综上,ParSync在quality与StateSync表现持平的情况下,latency表现远优于StateSync。其他更多的详细的数据分析详见论文。

六 总结

论文首先介绍了分布式调度器领域在解决规模问题时的常见做法:多调度器联合调度,其次介绍了多调度器的一种常见的资源供给模型StateSync。在StateSync模式下,不同调度器间会产生严重的调度冲突,进而影响集群的调度效率和利用率。针对上述问题,论文通过理论分析,给出了缓解冲突方法:增加可调度资源或扩充调度器,但是在实际中这2种方法都是不可接受的。

本文提出了一种新的资源供给模式:ParSync。在ParSync模式下,不同的调度器通过round robin的方式来分时更新机器资源。同时ParSync提供了三种调度策略:latency-first, quality-first, adaptive,用来满足不同场景下调度器对于latency\quality的要求。大规模实验表明,ParSync在调度质量上与其他调度器持平,但在调度延时上远优于其他调度器。

附录

image.png

生产集群资源调度架构图

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

svg入门经典pdf_机器学习最好的入门课程是什么?

最近老胡不太忙了,项目告一段落,摸鱼时间多了一些。昨天我翻译了一个思维导图《超详细的人工智能专家路线图》强烈建议没有看的同学看一看,查漏补缺必备机器学习从 入 门 到 精 通 路 线 图翻完之后自己也有很大的收获,所以准备干…

MaxCompute跨境访问加速解决方案

简介: MaxCompute联合全球加速服务,为有跨境访问需求的MaxCompute客户提供一套高效稳定的跨境访问加速方案。 MaxCompute联合全球加速服务,为有跨境访问需求的MaxCompute客户提供一套高效稳定的跨境访问加速方案。 背景信息 MaxCompute的大…

借助钉钉宜搭,奶茶店开始用黑科技管理门店了

简介: 投诉处理的速度变快了——这是7分甜消费者在这个初夏最直观的感受,借助钉钉宜搭的低代码能力实现的数字化管理,过去7分甜的许多管理痛点,现在正被一一攻克。 一方小小的奶茶零售门店,内里乾坤万千。7分甜成立于2…

爬虫爬到的网页源代码不是真正的源代码_Python爬虫经常爬不到数据?你可以看一下这篇文章...

近期,通过做了一些小的项目,觉得对于Python爬虫有了一定的了解,于是,就对于Python爬虫爬取数据做了一个小小的总结,希望大家喜欢!1.最简单的Python爬虫最简单的Python爬虫莫过于直接使用urllib.request.url…

德勤发布2021年度企业AI应用现状报告,AI驱动已成竞争必需品

1、报告显示,与全球企业相比,中国企业对AI的负面影响,表现出了更多恐惧和担忧。 2、战略上,报告鼓励企业抓住机会,相信一切皆有可能,不要让“成本支出”的目标导致错失良机。 3、报告显示尽管真正意义上的“…

试着读懂你的心——闲鱼聊天小助手的探索之路

简介: 读懂你的心 作者:闲鱼技术——有攸 一、背景: 卡耐基在《人性的弱点》一书中说:“世界上唯一能影响他人的方法,就是谈论他所要的,而且还要告诉他,如何才能得到他所要的”。由此可见&am…

python 闭包_Python中的闭包

一、什么是闭包在谈之前,我们先来说说作用域,变量的作用域无非就两种:全局变量和局部变量。函数内部可以直接读取全局变量,但是在函数外部无法读取函数内部的局部变量。出于种种原因,我们有时候需要获取到函数内部的局…

Flink 在爱奇艺广告业务的实践

简介: 5 月 22 日北京站 Flink Meetup 分享的议题。 本文整理自爱奇艺技术经理韩红根在 5 月 22 日北京站 Flink Meetup 分享的议题《Flink 在爱奇艺广告业务的实践》,内容包括: 业务场景业务实践Flink 使用过程中的问题及解决未来规划一、业…

使用 Flomesh 强化 Spring Cloud 服务治理

作者 | Addo Zhang来源 | 云原生指北写在最前这篇是关于如何使用 Flomesh[1] 服务网格来强化 Spring Cloud 的服务治理能力,降低 Spring Cloud 微服务架构落地服务网格的门槛,实现“自主可控”。架构Architect环境搭建搭建 Kubernetes 环境,可…

如何避免JS内存泄漏?

简介: 很多开发者可能平时并不关心自己维护的页面是否存在内存泄漏,原因可能是刚开始简单的页面内存泄漏的速度很缓慢,在造成严重卡顿之前可能就被用户刷新了,问题也就被隐藏了,但是随着页面越来越复杂,尤其…

java传递实例_Java方法的参数传递机制实例详解

本文实例讲述了Java方法的参数传递机制。分享给大家供大家参考,具体如下:参数传递机制对于程序设计语言来说,一般方法(函数)的参数传递有两种:按值传递和按引用传递。按值传递意味着当将一个参数传递给一个方法时,方法…

低代码发展专访系列之六:低代码平台能解决业务重构的问题么?

编辑 | 曹芊芊 话题:低代码发展系列专访 前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展…

在 Dubbo3.0 上服务治理的实践

简介: Dubbo 3.0 是在云原生背景下诞生的,使用 Dubbo 构建的微服务遵循云原生思想,能更好的复用底层云原生基础设施、贴合云原生微服务架构。 Dubbo3.0 介绍 作者 | 十眠 自从 Apache Dubbo 在 2011 年开源以来,经过多年一众大…

redis 可视化工具_自荐一个有情怀的跨平台Redis可视化客户端工具——RedisViewer...

介绍在以往的文章中曾经介绍过几款Redis的可视化工具,在笔者的印象中,Redis至今没有一款非常专业的可视化管理客户端,就算之前介绍过的几款也是差强人意,有些时候满足不了我们的需求,而今天本文要介绍的是另一款值得推…

内核热补丁,真的安全么?

简介: Linux 内核函数的热替换“撞上”函数调用约定还靠谱吗? Linux 内核热补丁可以修复正在运行的 linux 内核,是一种维持线上稳定性不可缺少的措施,现在比较常见的比如 kpatch 和 livepatch。内核热补丁可以修复内核中正在运行的…

谁是 2021「IT 圈」年度 C 位?快来报名,彰显你的影响力!

2021年,数字化转型正磅礴兴起,大批传统企业正在拥抱数字化,云计算、大数据、AI、5G应用能力正在变成企业的核心竞争力;核心技术正在崛起,在操作系统、数据库,依靠开源的力量,众多开发者背后的行…

当Java遇上机密计算,又一段奇幻之旅开始了!

简介: 汪少军:如何为Java业务提供机密计算保护? 写在前面 在信息世界里,数据存在三种状态: 存储态、传输态和计算态。存储在数据库或磁盘中的数据属于存储状态,在网络中传输的数据属于传输状态&#xff0c…

电脑桌面归纳小窗口_电脑一分钟小技巧:如何将电脑设置为定时关机?

关注公众号,发现好教程如何设置电脑设置定时关机呢?哈哈哈,可能这个教程用处不大,不过每个教程都有它的用处,这个也算是教程哈!有些小伙伴可能需要这个教程!至于什么用处,我就不多说…

时序数据库永远的难关 — 时间线膨胀(高基数 Cardinality)问题的解决方案

简介: 本文主要讨论 influxdb 在遇到写入的数据出现高基数 Cardinality 问题时,一些可行的解决方案。 作者 | 徐建伟 (竹影) 前序 随着移动端发展走向饱和,现在整个 IT 行业都期待着“万物互联”的物联网时代。在物…

中文巨量模型“源1.0”:模型结构与生成效果解析

浪潮人工智能研究院 “源 1.0”自 2021 年 9 月底发布以来收获了广泛的关注。其参数量达 2457 亿,超越美国 OpenAI 组织研发的 GPT-3。“源 1.0”在语言智能方面表现优异,获得中文语言理解评测基准 CLUE 榜单的零样本学习(zero-shot&#xff…