美团点评容器平台HULK的调度系统

注意到上面这些问题后,我们经过调研与测试,结合业界的实践经验,决定基于Docker容器技术来实现服务的弹性伸缩,有效应对快速扩缩容需求、提升资源利用效率。

Docker容器技术也是一类虚拟化技术,不同于虚拟机的硬件虚拟化,容器是基于操作系统内核的隔离机制实现。容器省去了模拟底层硬件、指令等操作,直接基于宿主机内核,并隔离出独立的系统环境、加以资源限制,能有效提升启动速度和性能。

美团点评基础架构团队在2015年中旬启动了公司级的容器集群管理及弹性伸缩平台——HULK项目,目标是提供Docker容器平台,推动公司的服务容器化,实现自动的弹性扩容、缩容,提升资源利用率、业务运维效率并降低IT运维成本。

HULK是美国漫威漫画旗下超级英雄“绿巨人”,拥有强大的变身能。变身后的绿巨人对各类疾病、射线、毒药及物理攻击有很高的免疫力,加上超强的再生能力使得其非常强大。

我们选择HULK作为项目名,就是希望美团点评服务在接入HULK之后可以拥有绿巨人般强大的变身能力(弹性扩缩),进而在此基础上提升服务的健壮性、稳定性及资源利用率。

在HULK所有模块中,调度系统负责对资源池进行统一的调度分配与管理。主要职责包括:

核心指标

调度系统设计难题

调度系统设计的难题,在于几个调度核心指标在实现上存在的矛盾关系,类似于CAP理论中的三要素,无法同时满足。

在CAP理论中,Consistency(一致性)、Availability(可用性)与PartitionTolerance(分区容错性)无法同时满足。如果追求可用性与分区容错性,则需要牺牲强一致性,只能保证最终一致性;而如果要保障强一致性与可用性,如果出现网络故障将无法正常工作。

类似的,在调度系统中,如果要追求极限的资源利用率,则每一次调度的结果必须是基于当前资源池状态的最优解,因此不管调度队列还是调度处理计算只能是“单行道”,效率低下是毋庸置疑的,大批量伸缩调度场景下任务堆积严重。

如果追求高效的调度能力,则所有调度请求需要并发处理。但底层资源池只有一个,很容易出现多个调度请求争抢同一份资源的情况。这种情况下,就要采取措施来保障资源层数据一致性,且调度所得的结果不能保证是全局最优解(无法最大化资源利用率)。

业界解决思路

Mesos

这种做法把上述调度设计矛盾丢给了Framework,但如果只从提供资源Offer的角度来看,这是一种并发调度的形式(同一个Mesos资源池,资源要提供给上层多个Framework)。Mesos解决并发调度、资源池数据一致性的方案是,资源Offer同时只会分派给一个Framework。这种资源分派方式是悲观的,资源被Framework独占,直到返回或超时。

显然,这种悲观锁导致了Mesos双层调度的并发粒度较小,但是在多数情况下,同个Mesos集群上层的Framework数量不会太多,有时只有一个Framework在独享资源,因此这种悲观锁的方案一般不会存在分配调度的瓶颈问题。

Omega

Omega同样采用了将资源分派给上层应用的调度方式,与Mesos的悲观锁不同,Omega采用了乐观锁(MVCC,基于多版本的并发访问控制)解决并发调度的问题,因此Omega也被称为共享状态调度器。

由于将资源层信息作为共享数据提供给上层所有应用,Omega为了解决数据一致性,会对所有应用调度的提交冲突做解决,本质上是为每个节点维护了一个状态关系数据库。从这个角度看,Omega也存在一些缺点:

Borg与Kubernetes

Borg据说现在已经逐渐演进吸收了Omega的很多设计思想,包括共享状态调度模式,然而Kubernetes默认调度plugin的做法仍然是串行处理队列中的调度任务,这也符合Kubernetes追求的简洁优雅。

HULK调度解决方案

对于调度器设计难题,我们认为针对不同的场景,指标的侧重点不同。

比如对于分布式系统的CAP,大多数互联网场景下都会保证AP而舍弃C(只保证最终一致性),因为在互联网分布式集群规模大、网络故障频发的场景下,要保证服务高可用只能牺牲强一致;而对于金融等涉及钱财的领域,则一般保证CA、舍弃P,即使遇到网络故障时只读不写,也必须保证强一致性。

同理对于调度器资源层设计,在互联网高并发、弹性伸缩频发的场景下,可以牺牲部分资源利用率从而提高并发调度能力。

HULK调度系统模型如下:

如图,HULK调度系统分为调度请求队列、调度计算模块、调度资源池这三个模块。工作流程如下:

调度计算模块(资源调度算法)

HULK调度系统的调度计算方式与诸多业界调度系统类似,通过过滤+打分的方式筛选出“最优部署位置”:

超售

不管是在传统虚拟机时代还是容器时代,超售始终是一个让人又爱又恨的机制。

超售在一定程度上提高了集群的资源利用率,因为机器在申请之时往往提高对真实资源消耗的预估,也就是在服务运行中,绝大多数情况用不到申请的所有资源。然而正因为超售,常常会带来各种因资源争用引发的服务异常,严重的情况下会导致宿主机上所有实例的不可用。

HULK容器调度同样采用了超售机制,我们和IaaS层对资源进行了分类,可压缩资源(如CPU、I/O等)使用超售机制,而不可压缩资源(如Memory、Disk)只允许在一些测试环境超售。

相比于是否开启超售,超售系数才是更为棘手的难题,它直接关系到资源利用率和服务稳定性。我们采用了超售上限+动态系数的机制,从IaaS层设置的超售上限固定了资源超售的上限比例,超过上限的实例创建将会失败,而HULK调度系统会根据具体场景决定超售系数:

业务实例打散

随着物理集群规模的扩大,宿主机故障频次也会响应提高。如果一个在线服务的所有实例都部署在同一个宿主机上,很可能出现宿主机宕机后服务整体不可用,这是我们不能接受的。

业务用户在HULK上配置不同的伸缩组,每个组对应了一个机房(数据中心),同个机房调度过程中会把同个服务的实例打散到不同的宿主机上,并优先在不同的交换机(机架)下。此外,针对数据库/缓存类的实例还有更严格的容灾策略,比如Redis实例调度部署时,不允许同一个交换机下部署超过该Redis集群25%的实例数量。

在线离线混布

Borg系统中对prod与non-prod实例的一类处理方式是,根据宿主机上实例运行状况,实时调整实例的资源配置。比如当在线服务迎来流量高峰、宿主机内存告急时,Borg会调整宿主机上non-prod任务的内存配额,以保证在线服务的稳定性。

但这种方案对Google中的部分C/C++服务适用,在美团点评Java服务的场景下,实例内存配额调整可能会导致OOM,而重启服务非我们所愿。

宿主机负载均衡

在调度计算的打分过程中,还会参考当前宿主机的负载情况。

HULK会从监控系统中获取宿主机的系统监控数据,包括了CPU、Load、Memory、IO等指标。针对负载较低的宿主机我们给予较高的权重,而负载较高的宿主机,即使物理资源较为空闲,也不会优先选择部署。

调度资源池(资源申请算法)

当调度计算过程决策出一个根据调度rank权重排序好的资源可部署位置列表后,调度任务会取列表前n个元素,依次向对应的宿主机Actor申请资源,直到宿主机Actor返回批准(调度成功);如果取出的前n个均被拒绝,调度任务需要根据新的全局资源池共享状态再次调度计算。

如果两个调度任务基于共享资源状态同时申请某个宿主机上同一块资源,则宿主机Actor会根据mailbox中消息的顺序来处理,资源先到先得,后者调度任务会继续向下一个备选资源的宿主机Actor尝试申请。

这种资源调度的架构下,调度的并发度相比串行调度有了显著的提高,即使出现提交冲突,重试机制也是非常轻量的,一般都可以在前n次之内完成。

这里另一个核心问题在于n取值的权衡。如果n取值1,则每次失败后就需要根据当前的集群资源状态重新调度计算,这种情况下调度资源利用率较高,但效率较低;而若n取值大于1,则重试后的调度位置往往并非当前最佳调度位置,且n越大这里的最优调度偏差就越大。我们考虑的是根据当前整个系统中的调度请求数量来确定这个动态的n变量取值,当调度任务较少时n取较小值,当调度任务较多、弹性伸缩频繁时,n的取值会相应调大。

调度模式总结

总的来看,HULK调度系统的共享状态资源调度模式与Omega比较相似,不同的是Omega采用MVCC为每个节点维护一个状态关系数据库,而HULK使用Actor模型来解决提交冲突。另外,HULK调度任务的n次最优重试机制,在互联网的弹性伸缩场景下可以带来更高效的调度能力。

弹性调度系统作为HULK平台的核心模块之一,有着下接美团云IaaS平台、抽象化资源层,上承弹性伸缩系统、处理调度请求的职责。我们从美团点评的服务特殊性出发,打造适用于大规模容器化场景的调度体系,后续还会在大数据离线任务场景下做更优化的深层智能调度。

此外,我们对Kubernetes等开源解决方案同样抱有极大的兴趣,从Kubernetes近年来的发展上能看到未来容器平台的标准雏形,我们也在积极参与和回馈开源社区。

思宇,2015年加入美团点评,目前是美团点评基础架构团队高级工程师,负责容器集群管理与弹性调度平台的设计开发工作,主攻调度、容器研发、集群管理等方向。

THE END
1.机器学习:在线学习和离线学习区别机器学习中的在线学习(Online Learning)和离线学习(Offline Learning)是两种不同的学习方式,它们在数据处理和模型更新方面有着明显的区别。以下是它们的主要区别: 数据获取方式: 在线学习:在在线学习中,模型是不断地从数据流中接收新的样本并进行学习。这意味着模型会随着时间的推移不断更新,以适应新的数据。 https://blog.csdn.net/weixin_41194129/article/details/132998721
2.由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用新建的程序文件,里面没程序的,正在组态,用的博图V15的,除了主CPU1511正常的,其他的所有模块包括PS模块都显示由于当前在线组态数据与离线组态数据不同,因此无诊断数据可用,请教一下什么原因 【方案】服务智能物流,华北工控RPC-610M整机支持自动分拣系统应用 只看该作者 | 赞[0] | 踩[1] | 引用 | 回复 | http://bbs.gkong.com/archive.aspx?id=477495
3.离线与在线LowE玻璃的区别?昨天,小鹰为大家介绍了什么是离线和在线Low-E玻璃,而这两个玻璃既有在线和离线之分,便一定是有区别的,那么他们区别又是什么呢? 根据两种Low-E玻璃膜层和工艺的不同,我们可以这样理解他们的区别: ①离线Low-E玻璃 离线Low-E是银膜,而我们日常常听说的单银、双银、三银Low-E玻璃,一般都是离线Low-E玻璃。 https://m.zhuxiaobang.com/weitoutiao/1749702716089347?channel_source=baidu_biji
4.案例9:使用计算—离线和在线使用的主要区别在离线仿真与在线仿真中递归计算(计算中某个输出位号作为自身的函数)的行为是不一样的。行为的不同是因为嵌入离线仿真和嵌入在线系统的设计差异导致的。本教程的目的是着重介绍这一差异。 ?在离线仿真器中,k时刻的值被用于初始化k+1时刻的仿真。如果你有计算[A] =[A]+1且[A]=0,那么开始时产生的顺序是1https://www.jianshu.com/p/28da66d9eafb
5.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客该团队采用了与 Gao et al. (2023) 类似的设置,基于一组开源数据集进行了实验,结果表明:在同等的优化预算(相对于 SFT 策略的 KL 散度)下,在线算法的性能表现通常优于离线算法。 图1 给出了在线和离线算法在四个不同的开源数据集上表现出的 KL 散度与策略性能之间的权衡。图中的每个数据点代表了在训练过程https://www.thepaper.cn/newsDetail_forward_27434433
6.微信在线不在线的区别是什么?有什么方法知道好友是否在线?几年前,我们常用的聊天软件是qq,而现在,微信的风头几乎已经改过了qq。微信在很多功能方面和qq类似,不过,也有些不一样的功能。比如,微信在线与不在线,很多人都不知道这两者有什么区别,下面,我们来看看具体的情况。 其实微信是不能看好友在不在线的,这是微信的一个特点,就是没有在线与离线。也就是说,在线与不https://www.kaitao.cn/article/20180906115708.htm
7.在线设备与离线设备的区别在线设备与离线设备的区别 04月22日 一、设备状态 在线设备指的是能够在任何时刻通过网络进行连接的设备,它通常需要依赖网络进行设备的控制和管理。而离线设备则指那些不能随时进行网络连接的设备,通常是一些独立应用的设备,如手机、电脑等。 二、数据处理 在线设备具有实时性,能够实时处理和传输数https://b2b.baidu.com/q/aland?q=1D130616002178711A2209220616002178717C0D0E317839&id=qid50cf7396802e9c034832fe078d066429&answer=2521268275454283123&utype=2
8.《诛仙鬼王传》离线在线经验哪家强?诛仙鬼王传再来是在线和离线挂机经验的计算方式不一样。官方的解释是:在线是根据你实时的所得计算。而离线则是按照理论杀怪数值计算。 PK结果,在官方的一些数据帮助下,得出的结论是。 如果你杀怪的时间在5秒以下,那在线挂机所获得的经验会更多。反之如果高于5秒,那离线获得的经验会更多。但并不代表我离线时间越长,获得的经https://a.9game.cn/zxgwc/709605.html
9.生物发酵展资讯发酵工艺:毕赤酵母工程菌高密度发酵及其影响离线检测包括气象色谱法、高效液相色谱法等,由于其检测的滞后性无法准确的控制甲醇的流加速率,从而导致外源蛋白表达不完全或菌体中毒死亡。在线检测法通常是针对甲醇挥发性的检测,常用的检测方法是通过分析发酵过程中所排出的尾气,同时结合甲醇在气液两相中的平衡系数得出发酵液中甲醇的浓度,有学者发明了一种自动化连续https://www.biozl.cn/3226.html
10.在线互动式UPS在线式UPS离线式UPS三种UPS原理与对比在线交互式 UPS 与在线 UPS 与离线 UPS:应用 这三种不同运行原理的拓扑结构的应用从小型住宅到大型数据中心都有所不同。 离线式UPS因其较高的能源效率和经济性,最常用于家庭、小型办公室,电源设计预算较低,以及一些对供电质量要求相对较低的领域,个人电脑的最佳价值,也适用于打印机、扫描仪、应急电源和 EPABX。https://cloud.tencent.com/developer/article/2239093
11.双人成行离线和在线有什么区别双人成行二号玩家加入方法1、玩法不同。双人成行离线的玩法为线下玩法,需要玩家在线下相聚才可以一起游戏。双人成行在线可以通过网络直接游戏,不需要线下相聚。 2、网络要求不同。双人成行离线不需要网络连接,也就是说玩家在没有网络的情况下也可以正常游戏。而双人成行在线需要有比较好的网络环境才可以进行游戏。 https://gl.ali213.net/html/2022-6/860745.html
12.离线LowE玻璃与在线LowE玻璃的优缺点离线Low-E玻璃一般采用真空磁控溅射镀膜工艺,在玻璃表面镀制多层复合膜,实现Low-E功能。最主要的优点是颜色丰富多彩,纯度、热学性能均优于在线Low-E玻璃。离线Low—E玻璃品种多样,根据不同气候特点可以制作高、中、低多种透过率产品,并且颜色上有银灰、浅灰、浅蓝和无色透明等,用着色玻璃还可制作绿色等其他多种颜色https://www.yoojia.com/ask/3-9742006234974497042.html