美团点评容器平台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.在线/离线规划机器之心在线/离线规划 简介 规划问题是希望在运动期间在线计算目标的轨迹,以允许机器人对移动目标的环境变化和运动过程中遇到的误差作出反应。然而,解决这些问题,是一定困难的。这源于搜索空间的高维度,障碍物的几何性质,优化的成本函数,和机器人的运动学和动力学模型。来在给定的合理的计算资源里,这些问题都会妨碍它足够快的https://www.jiqizhixin.com/graph/technologies/6b18674f-9092-4262-8f6e-b6c5db69b8a3
2.知识库下面简要说明’工作经理‘软件离线和在线模式之间的区别。 离线模式无需互联网即可工作,因此也称为“离线”。“您离线输入’工作经理‘器的所有业务数据都保存在移动设备上。由于数据是本地保存在设备上的,因此一次只能有一个用户访问该信息。 在线模式需要随时连接到互联网,并允许您在多个设备和网络上同时运行管理。https://jobmanagerapp.com/cn/%E7%A6%BB%E7%BA%BF%E5%92%8C%E5%9C%A8%E7%BA%BF%E6%A8%A1%E5%BC%8F%E7%9A%84%E5%8C%BA%E5%88%AB
3.机器学习中的在线学习与离线学习onlinelearning在线学习算法这种理解方式在国外论文中出现比较多,国外称为online and batch learning.离线就是对应batch learning.这两种方式各有优点,在线学习比较快,但是有比较高的残差,离线(batch)学习能降低残差。 理解方式二: 在离线学习中,所有的训练数据在模型训练期间必须是可用的。只有训练完成了之后,模型才能被拿来用。简而言之,先训练https://blog.csdn.net/a133521741/article/details/79221015
4.什么是在线模式离线模式爱问知识人在线模式离线模式:在计算机控制系统中,生产过程和计算机直接连接,并受计算机控制的方式。 离线方式:生产过程不和计算机相连且不受计算机控制,而是靠人进行联系并作相应操作的方式。杨***2023-10-09 00:00:050 0 评论 分享 生活 相关知识 生活 日常生活 https://iask.sina.com.cn/b/newraE474IaqLJ.html
5.在Android应用中实现离线数据同步的步骤详解Android在构建 Android 应用时,离线数据同步是一个不可或缺的环节,无论是网络状况不佳,还是用户处于飞行模式,离线数据同步都能让用户在无网络的情况下继续使用应用,本文将详细介绍如何在 Android 应用中实现离线数据同步,需要的朋友可以参考下https://www.jb51.net/program/326642iau.htm
6.BoardMix和Notion哪个好有什么区别优缺点boardmix作为数字化多人在线实时协作平台,集思维导图、流程图、多种创意表达绘图工具于一体,打通协作成员之间的可视化捕捉灵感、创意表达、实时演示、高效协作整条链路,以“自由创作”“社区驱动”“实时协作”“开放”为核心设计理念,聚焦多人协作下的场景解决方案,加快团队之间的信息流转,降低协作成本,提高业务效率。https://www.36dianping.com/vs/njao.html
7.离线AOI在线AOI明锐理想科技有限公司(https://jonnywang1688.gys.cn)主营产品包括离线AOI、在线AOI等,明锐理想科技有限公司负责人王先生,明锐理想科技有限公司希望能与您成为合作伙伴https://jonnywang1688.cn.china.cn/
8.在对齐AI时,为什么在线方法总是优于离线方法?澎湃号·湃客根据人类反馈的强化学习(RLHF)随着大型语言模型(LLM)发展而日渐成为一种用于 AI 对齐的常用框架。不过近段时间,直接偏好优化(DPO)等离线方法异军突起 —— 无需主动式的在线交互,使用离线数据集就能直接对齐 LLM。这类方法的效率很高,也已经得到实证研究的证明。但这也引出了一个关键问题: https://www.thepaper.cn/newsDetail_forward_27434433
9.《英雄传说:零之轨迹》在线激活与离线激活【游侠导读】下面为大家带来《英雄传说:零之轨迹》在线激活与离线激活指南,一起去看看吧。 一.在线激活 如果您有互联网环境,可选择“在线激活”直接输入产品序列号,进行线上自动激活。(强烈建议)。 产品序列号您可以选择从官方网站线上购买或从各地零售店购买实体点卡。 https://www.ali213.net/news/html/2011-8/22238.html
10.《中土世界战争之影》在线攻城及离线守城攻略攻城守城思路解析《中土世界战争之影》通过线上模式让玩家之间可以相互攻守城池,虽然与真正的实时对拼相差甚远,但也使不少玩家沉迷其中更无法自拔。接下来小编就为大家带来《中土世界战争之影》在线攻城及离线守城攻略,刚兴趣的小伙伴一起来看看吧! 《中土世界:战争之影》精华文章推荐 https://www.gamersky.com/handbook/201710/970136.shtml
11.qq在线状态怎么设置离线离线在线状态设置方法qq的在线状态是可以设置成离线的,但是有的小伙伴却没有找到这个在线状态在哪里,一直设置不了。那么qq在线状态怎么设置离线呢?下面小编就为大家带来了具体的设置方法介绍,我们一起来看看吧! qq在线状态怎么设置离线? 1、打开手机QQ,点击头像,然后点击侧边栏下方的“设置”。 https://app.3dmgame.com/mip/gl/257356.html
12.设备在线/离线状态的缓存方案业务系统从表格存储/Redis中快速查询设备当前在线/离线状态 1.设备在线/离线状态变更消息 当设备连接到IoT物联网平台,设备离线,在线状态变更会生成特定topic的消息,我们服务端可以通过订阅这个topic获得设备状态变更信息。 ** 设备的在线/离线状态流转的Topic格式: https://developer.aliyun.com/article/728646
13.设备在线/离线状态的缓存方案——实践类业务系统从表格存储/Redis中快速查询设备当前在线/离线状态 1.设备在线/离线状态变更消息 当设备连接到IoT物联网平台,设备离线,在线状态变更会生成特定topic的消息,我们服务端可以通过订阅这个topic获得设备状态变更信息。 ** 设备的在线/离线状态流转的Topic格式: https://blog.itpub.net/70017009/viewspace-2937803/
14.谷歌浏览器插件Lucidchart离线图表在线和离线绘制流程图、实体模型、UML、思维导图与更多图表的最便捷方式。 Lucidchart 是一种可视化协作工具,可使图表的绘制快速而轻松。在您安装完毕后,即可轻松在线或离线创建和编辑图表!在线时可轻松与他人分享图表,以便体验实时协作,所作更改瞬间即可合并和同步完毕。 https://www.chajian5.com/lucidchart.html
15.如何在《悟空分身》中设置分身的在线和离线状态?5. 点击“离线状态”选项,同样有三种选项可供选择:始终离线、仅在工作时间内在线离线和自定义离线时间。用户可以根据自己的需求选择合适的离线时间安排。 6. 确认选择后,分身的在线和离线状态将会生效,并应用到所有分身中。 三、使用技巧 1. 合理设置在线状态:根据实际需求,选择合适的在线状态可以避免不必要的打扰和https://www.sousou.com/bk/220619.html
16.Centos8安装在线及离线K8S集群搭建Centos8安装在线及离线K8S集群搭建 1. 配 置 OS:centos8 kernel:4.18.0-147.8.1.el8_1.x86_64 IP: 192.168.37.128 k8s1 192.168.37.130 k8s2 192.168.37.131 k8s3 注意:安装K8S需要Linux内核3.10以上,不然会安装失败 2.使用kubeadm部署kubernetes集群方法https://www.ucloud.cn/yun/130035.html