云原生混部最后一道防线:节点水位线设计

引言

在阿里集团,在离线混部技术从 2014 年开始,经历了七年的双十一检验,内部已经大规模落地推广,每年为阿里集团节省数十亿的资源成本,整体资源利用率达到 70% 左右,达到业界领先。这两年,我们开始把集团内的混部技术通过产品化的方式输出给业界,通过插件化的方式无缝安装在标准原生的k8s集群上,配合混部管控和运维能力,提升集群的资源利用率和产品的综合用户体验。

今天我们要关注的是混部在单机运行时的最后一道防线——单机水位线设计。

为什么需要单机水位线

如上图所示,Pod 的运行时的三个生命周期阶段,在经过配额检查和调度后,终于,不同 Qos 等级的 Pod 运行在同一个节点上了,这个时候,高优和中优的 Pod 使用的是节点上的容器分配总量,而低优 Pod,则是基于高中优实际的资源用量,然后被调度器调度到节点上面去运行。从下图可以看到,当一个节点上还有较多的空余资源时,完全可以提供给低优资源使用,而当高/中优 Pod 实际资源用量高过一定的值之后,资源竞争非常激烈时,节点上再跑低优 Pod 只会导致高/中优 Pod 的服务质量受损,所以这个时候,我们将不再允许低优 Pod 在这个节点上运行。为了标识或者说判断节点资源的竞争激烈程度,那么非常顺理成章的一个设计就是,看这个节点上的资源使用率是否过高。如果超过一定使用率,那么我们就需要对低优 Pod 做相应的操作。这个判断的临界阈值,就是单机的水位线。

这里另外能看到的一点是,水位线仅仅是为低优 Pod 所设置的,高/中优 Pod 并不会感知到水位线,他们可以自由地使用整机的所有资源,所有的系统行为都和没有打开混部是一样的。

水位线的分级

对于一个资源趋向于饱和的节点来说,我们对于低优 Pod 可以有各种操作的手段,如果仅仅是简单的杀掉低优 Pod 的话,整个混部系统也可以工作,这个动作我们称为“驱逐”。

但如果在一定时间后,机器上的资源竞争又降低的话,那么低优 Pod 被杀死并在别的机器上重新启动,这里会大大延长低优 Pod 的单个任务的执行时间,所以在设计单机水位线时,需要尽可能的让低优 Pod 也要在可以允许的时间范围内能够“降级”运行。所以,我们有对低优 Pod 的第 2 种操作,就是降低对它的 CPU 供给量,这个操作我们称为“压制”。

同时,如果一个节点上的资源趋于饱和,另外还比较顺理成章的系统行为就是不让新的低优 Pod 被调度进来。

于是我们对于节点上低优 Pod 的行为就有 3 种:压制、驱逐和禁止调度,由此就有三条水位线,同时,对于 CPU 这类的可压缩资源和内存这类不可压缩资源,行为还有区别。

注:可压缩资源(例如 CPU 循环,disk I/O 带宽)都是速率性的可以被回收的,对于一个 task 可以降低这些资源的量而不去杀掉 task;和不可压缩资源(例如内存、硬盘空间)这些一般来说不杀掉 task 就没法回收的。来自文章《在 Google 使用 Borg 进行大规模集群的管理 5-6》- 6.2 性能隔离[1]

这些水位线总体列表如下:

这些水位线的合理配置值,应该是 驱逐>压制>禁止调度。

不过在实际的混部生产中,我们一般会把禁止调度水位线和压制水位线使用同一个配置值,来降低系统运维同学的理解成本,以及配置工作量。这样合并后就会存在 CPU 的 2 条水位线,内存的一条水位线。

驱逐条件:基于满足度的驱逐模式

这张图展示了单机上实际的系统运行例子

  • 在 t1 时间,总资源利用率达到压制水位线的时候,对低优先级的任务进行压制,保证整体资源利用率在压制水位线之下,此时低优任务不会再被调度进来
  • 在 t3 时间,总资源利用率开始进一步上升,达到驱逐水位线时,会对低优任务进行删除和驱逐的处理,保证高/中优的资源使用

一个容易考虑到的设计是,驱逐低优任务前去设定一个延迟时间,这样可以让低优 Pod 有更多的机会等到系统有足够的资源,继续运行,然而这个设计,会造成几个问题:

  1. 内存的驱逐必须是实时的,因为节点上内存不足,会导致高/中优任务内存不足而 OOM
  2. 这个延迟时间并不好配置,配的短了没有效果,配了长了反而会引起低优 Pod 长期“饥饿”而造成低优 Pod 运行时间更长
  3. 如果在一个节点上,有多个低优 Pod 都在运行,是否要驱逐所有的低优 Pod?是否可能尽量的少驱逐 Pod?

因此,我们发明了基于满足度的低优 Pod 的 CPU 资源驱逐方式,定义了以下几个概念:

  • 窗口期:获取 CPU 利用率的时间窗口(例如 5 分钟),在窗口时间的平均 CPU 利用率超过驱逐水位线,则开始驱逐,可以避免抖动
  • 低优 Pod 资源满足率:= 低优 Pod 实际资源使用量/低优 Pod Request 资源量
  • 低优 Pod 满足率下限:一个百分比值,低于这个值的认为低优 Pod 的资源供给不足

这样,低优 Pod 的驱逐条件就变为了:

  1. 窗口期内:平均低优 Pod 资源满足率 < 低优 Pod 满足率下限
  2. 窗口期内:低优 Pod 平均 CPU 利用率接近 100%(如 90% 或者 80%)
  3. 当前时间:平均低优 Pod 资源满足率 < 低优 Pod 满足率下限
  4. 最近时间:BE CPU 利用率接近100%(如 90% 或者 80%)

而驱逐低优 Pod 的排序为:

  • 优先驱逐调度优先级 Priority 低的 Pod(是的,即使是低优 Pod,我们还是可以按照数值来细分不同的调度优先级)
  • 如果 2 个 Pod 调度优先级一致,则计算驱逐哪一个 Pod 带来的资源释放更多,优先驱逐能释放更多资源的

内存的驱逐方式和 CPU 基本类似,但没有满足率,到了驱逐水位线按照优先级和内存大小来进行驱逐。

注:低优 Pod 的在别的节点上重建,还是依赖于低优 Pod 的管控系统(例如,离线计算的框架 Spark/Flink 等),这个重建过程往往涉及到临时缓存的文件或者数据的迁移和一致性的校验,这个重建操作并不适合在 K8s 层主动的去做操作,而是交给上层管控系统或者 operator 更加合适。

展望:是否有更好的设计?

在本文的开始,提到了衡量系统资源的竞争激烈程度,最简单和直观的就是看资源利用率。当然,在实际的大规模集群运行过程中,我们也看到了资源利用率高和资源竞争激烈并不是完全的一一对应关系,甚至有些应用在 CPU 利用率非常高的情况下,依然稳定运行,而另外一些应用,在一个低的 CPU 利用情况下,就会非常的“卡”。

这就意味着如果我们有新的、更好的指标来衡量系统的利用率,那么我们对相应的 Workload 就能有更“微操”的操作,在保证应用 SLO 的同时,提升集群的资源利用率。

相关解决方案介绍

进入了 2022 年,混部在阿里内部已经成为了一个非常成熟的技术,为阿里每年节省数十亿的成本,是阿里数据中心的基本能力。而阿里云也把这些成熟的技术经过两年的时间,沉淀成为混部产品,开始服务于各行各业。云原生混部相关能力已经申请了多项独立的知识产权。

在阿里云的产品族里面,我们会把混部的能力通过 ACK 敏捷版,以及 CNStack(CloudNative Stack)产品家族,对外进行透出,并结合龙蜥操作系统(OpenAnolis),形成完整的云原生数据中心混部的一体化解决方案,输出给我们的客户。

参考文档:

[1]《在Google使用Borg进行大规模集群的管理 5-6》:https://my.oschina.net/HardySimpson/blog/517283

作者:南异

原文链接

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

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

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

相关文章

为什么 ChatGPT 会引起 Google 的恐慌?

在 ChatGPT 尚未全面开放使用之际&#xff0c;它散发的巨大威力&#xff0c;似乎已经让行业内的竞争对手感到了威胁。整理 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;距离 ChatGPT 上线不足一个月的时间&#xff0c;其已经成为各行各业智囊团中的“网红…

阿里云中间件开源往事

分布式架构和云原生重塑了中间件的游戏规则&#xff0c;这给国内开发者提供了重新定义中间件的历史机遇。 在分布式架构流行前&#xff0c;国外 IT 厂商引领着中间件市场的发展&#xff0c;且以闭源、重商业的服务形式为主&#xff1b;随着云计算和互联网的普及&#xff0c;阿…

一个开发者自述:我是如何设计针对冷热读写场景的 RocketMQ 存储系统

悸动 32 岁&#xff0c;码农的倒数第二个本命年&#xff0c;平淡无奇的生活总觉得缺少了点什么。 想要去创业&#xff0c;却害怕家庭承受不住再次失败的挫折&#xff0c;想要生二胎&#xff0c;带娃的压力让我想着还不如去创业&#xff1b;所以我只好在生活中寻找一些小感动&…

Serverless实战 - 2分钟,教你用Serverless每天给女朋友自动发土味情话

一、Serverless简介 Serverless&#xff0c;中文意思是“无服务器”&#xff0c;所谓的无服务器并非是说不需要依靠服务器等资源&#xff0c;而是说开发者再也不用过多考虑服务器的问题&#xff0c;可以更专注在产品代码上&#xff0c;同时计算资源也开始作为服务出现&#xf…

如何实现一个 Paxos

Paxos 作为一个经典的分布式一致性算法(Consensus Algorithm)&#xff0c;在各种教材中也被当做范例来讲解。但由于其抽象性&#xff0c;很少有人基于朴素 Paxos 开发一致性库&#xff0c;而 RAFT 则是工业界里实现较多的一致性算法&#xff0c;RAFT 的论文可以在下面参考资料中…

比 Bloom Filter 节省25%空间!Ribbon Filter 在 Lindorm 中的应用

1 前言 Lindorm是一个低成本高吞吐的多模数据库&#xff0c;目前&#xff0c;Lindorm是阿里内部数据体量最大&#xff0c;覆盖业务最广的数据库产品。超高的性能和低RT一直是Lindorm追求的目标&#xff0c;因此Lindorm也在不断地优化和迭代&#xff0c;争取在每个小点上都做到…

阿里云云原生一体化数仓 — 数据治理新能力解读

一、数据治理中心产品简介 阿里云DataWorks&#xff1a;一站式大数据开发与治理平台 架构大图 阿里云 DataWorks定位于一站式的大数据开发和治理平台&#xff0c;从下图可以看出&#xff0c;DataWorks 与 MaxCompute、Hologres 等大数据引擎紧密配合&#xff0c;在数据的 采、…

入门即享受!coolbpf 硬核提升 BPF 开发效率

编者按&#xff1a;BPF 技术还在如火如荼的发展着&#xff0c;本文先通过对 BPF 知识的介绍&#xff0c;带领大家入门 BPF&#xff0c;然后介绍 coolbpf 的远程编译&#xff08;原名 LCC&#xff0c;LibbpfCompilerCollection&#xff09;&#xff0c;意为酷玩 BPF&#xff0c;…

拥抱开放,Serverless 时代的下一征程

Serverless 作为云计算的最佳实践和未来演进趋势&#xff0c;其全托管免运维的使用体验和按量付费的成本优势使得它在云原生时代备受推崇。Serverless 的使用场景也由事件驱动&#xff0c;数据处理等部分特定场景转向更为广泛通用化的 WEB&#xff0c;微服务&#xff0c;AI&…

云原生混部系统 Koordinator 架构详解

混部技术的介绍和发展 混部的概念可以从两个角度来理解&#xff0c;从节点维度来看&#xff0c;混部就是将多个容器部署在同一个节点上&#xff0c;这些容器内的应用既包括在线类型&#xff0c;也包括离线类型&#xff1b;从集群维度来看&#xff0c;混部是将多种应用在一个集…

全链路灰度在数据库上我们是怎么做的?

什么是全链路灰度&#xff1f; 微服务体系架构中&#xff0c;服务之间的依赖关系错综复杂&#xff0c;有时某个功能发版依赖多个服务同时升级上线。我们希望可以对这些服务的新版本同时进行小流量灰度验证&#xff0c;这就是微服务架构中特有的全链路灰度场景&#xff0c;通过…

InnoDB 之 UNDO LOG 介绍

undo log的组织形式 此部分是关于Undo log的组织形式的一个介绍&#xff1b;主要分为两部分来对undo log的组织形式进行介绍&#xff1a;文件结构和内存结构。在介绍这两部分时&#xff0c;先从局部出发&#xff0c;最后再给出各个部分的联系。 1. 文件结构 首先&#xff0c…

Spark 如何对源端数据做切分?

引言 典型的Spark作业读取位于OSS的Parquet外表时&#xff0c;源端的并发度&#xff08;task/partition&#xff09;如何确定&#xff1f;特别是在做TPCH测试时有一些疑问&#xff0c;如源端扫描文件的并发度是如何确定的&#xff1f;是否一个parquet文件对应一个partition&am…

数据库事务隔离发展历史

事务隔离是数据库系统设计中根本的组成部分&#xff0c;本文主要从标准层面来讨论隔离级别的发展历史&#xff0c;首先明确隔离级别划分的目标&#xff1b;之后概述其否定之否定的发展历程&#xff1b;进而引出 Adya给出的比较合理的隔离级别定义&#xff0c;最终总结隔离标准一…

为什么游戏行业喜欢用PolarDB

为什么游戏行业喜欢用PolarDB 游戏行业痛点 在我看来, 不同行业对数据库使用有巨大的差别. 比如游戏行业没有复杂的事务交易场景, 他有一个非常大的blob 字段用于存储角色的装备信息, 那么大Blob 字段的更新就会成为数据库的瓶颈, 比如在线教育行业需要有抢课的需求, 因此会有…

从业务开发中学习和理解架构设计

前言 在软件开发领域经常会接触到架构这个词汇&#xff0c;在我最初的印象中&#xff0c;架构是一个很高级的词汇。它似乎代表了复杂的工程结构、高层次的抽象设计、最新的开发语言特性等等。对于当时只专注于写业务逻辑的我来说&#xff0c;不免心生对架构的敬畏。工作中对架…

腾讯云联合中国联通打造下一代IDC数字化运营应用

近日&#xff0c;腾讯云联合中国联通智网创新中心打造的下一代IDC数字化运营应用&#xff0c;正式亮相2022中国联通合作伙伴大会。立足双方资源和经验优势&#xff0c;该数字化应用可实现对数据中心电力系统、制冷环境、安全防范等全方位智慧化运营&#xff0c;助力中国联通推进…

研发效能的思考总结

前言 在谈效能之前&#xff0c;我想先谈谈作为一个技术人或者技术TL&#xff0c;研发的核心价值是什么&#xff1f; 之前看了一篇文章&#xff0c;比较有意思&#xff0c;分享一下观念&#xff1a; T外包公司&#xff1a;最核心的竞争力不是技术&#xff0c;而是快速响应、资…

以“升舱”之名,谈谈云原生数据仓库 AnalyticDB 的核心技术

背景 说到升舱&#xff0c;我们首先想到的是飞机经济舱升级到商务舱、头等舱。阿里云企业级云原生数据仓库AnalyticDB&#xff08;以下简称ADB&#xff09;[1]在帮助以金融机构为主的行业数字化转型和传统数仓升级项目中&#xff0c;也引用了“升舱&#xff08;仓&#xff09;…

阿里云联合平行云推出云XR平台,支持沉浸式体验应用快速落地

近日&#xff0c;阿里云与平行云联合发布云XR平台&#xff0c;降低云端视觉计算应用的开发门槛&#xff0c;加速数字孪生、虚拟人、虚拟现实、沉浸式体验与虚拟仿真平台等XR应用落地&#xff0c;帮助互联网、新零售、社交、工业、交通、城市管理等行业探索创新业务形态。 阿里…