阿里云容器服务差异化 SLO 混部技术实践

简介:阿里巴巴在“差异化 SLO 混合部署”上已经有了多年的实践经验,目前已达到业界领先水平。所谓“差异化 SLO”,就是将不同类型的工作负载混合运行在同一节点,充分利用工作负载对资源 SLO 需求特征的不同,提升资源整体使用效率。本文将重点介绍相关技术细节和使用方法,让用户可以充分享受差异化 SLO 带来的技术红利。

作者:佑祎

背景介绍

阿里巴巴在“差异化 SLO 混合部署”上已经有了多年的实践经验,目前已达到业界领先水平。所谓“差异化 SLO”,就是将不同类型的工作负载混合运行在同一节点,充分利用工作负载对资源 SLO 需求特征的不同,提升资源整体使用效率。本文将重点介绍相关技术细节和使用方法,让用户可以充分享受差异化 SLO 带来的技术红利。

资源模型

作为通用的计算资源托管框架,Kubernetes 托管了多种类型的业务负载,包括在线服务、大数据、实时计算、AI 等等。从业务对资源质量需求来看,这些业务可以分为“延时敏感型”(Latency Sensitive,简称 LS)和“资源消耗型”(Best Effort,简称 BE)两类。

对于 LS 类型,为了确保资源的稳定性(能够应对突发的业务流量,能够应对机房容灾后带来的流量增长),一个可靠的服务通常会申请较大的资源 request 和 limit,这也是 Kubernetes 集群资源分配率很容易做到 80% 以上但利用率却低于 20% 的主要原因,也是 Kubernetes 引入 BestEffort QoS 类型的原因。

为了充分利用这部分已分配但未使用的资源,我们将上图中的红线定义为 usage,蓝色线到红色先预留部分资源定义为 buffered,绿色覆盖部分定义为 reclaimed,如下图所示:

这部分资源代表了可动态超卖的资源量,也就是∑reclaimed(Guaranteed/Burstable)。将这部分空闲资源分配给 BE 类型的业务,就可以充分利用工作负载对资源运行质量需求不同的特征,提升集群整体资源利用率。

阿里云容器服务 Kubernetes 版(Alibaba Cloud Container Service for Kubernetes,以下简称 ACK)差异化 SLO 扩展套件提供了将这部分超卖资源量化的能力,动态计算当前的reclaimed资源量,并以标准扩展资源的形式实时更新到 Kubernetes 的 Node 元信息中。

# Node
status:allocatable:# milli-corealibabacloud.com/reclaimed-cpu: 50000# bytesalibabacloud.com/reclaimed-memory: 50000capacity:alibabacloud.com/reclaimed-cpu: 50000alibabacloud.com/reclaimed-memory: 100000

低优的 BE 任务在使用 reclaimed 资源时,只需在 Pod 增加“qos”和“reclaimed-resource”的表述即可,其中 qos = LS 对应高优先级,qos = BE 对应低优先级;reclaimed-cpu/memory 为 BE Pod 的具体资源需求量。

# Pod
metadata:label:alibabacloud.com/qos: BE # {BE, LS}
spec:containers:- resources:limits:alibabacloud.com/reclaimed-cpu: 1000alibabacloud.com/reclaimed-memory: 2048 requests:alibabacloud.com/reclaimed-cpu: 1000alibabacloud.com/reclaimed-memory: 2048

技术内幕

CPU 资源质量

CPU Burst
Kubernetes 为容器资源管理提供了 Limit(约束)的语义描述,对于 CPU 这类分时复用型的资源,当容器指定了 CPU Limit,操作系统会按照一定的时间周期约束资源使用。例如对于 CPU Limit = 2 的容器,操作系统内核会限制容器在每 100 ms 周期内最多使用 200 ms 的 CPU 时间片。

下图展示了一台 4 核节点、某 CPU Limit = 2 的 Web 服务类容器,在收到请求(req)后各线程(Thread)的 CPU 资源分配情况。可以看出,即使容器在最近 1s 内整体的 CPU 利用率较低,受 CPU Throttled 机制的影响,Thread 2 仍需要等待下一个周期才能继续将 req 2 处理完成,进而导致请求的响应时延(RT)变大,这通常就是容器 RT 长尾现象严重的原因之一。

CPU Burst 机制可以有效解决延迟敏感性应用的 RT 长尾问题,允许容器在空闲时积累一些 CPU 时间片,用于满足突发时的资源需求,提升容器性能表现,目前阿里云容器服务 ACK 已经完成了对 CPU Burst 机制的全面支持。对于尚未支持 CPU Burst 策略的内核版本,ACK 也会通过类似的原理,监测容器 CPU Throttle 状态,并动态调节容器的 CPU Limit,实现与内核 CPU Burst 策略类似的效果。

CPU 拓扑感知调度

随着宿主机硬件性能的提升,单节点的容器部署密度进一步提升,进程间的 CPU 争用,跨 NUMA 访存等问题也逐渐加剧,严重影响了应用性能表现。在多核节点下,进程在运行过程中经常会被迁移到其不同的核心,考虑到有些应用的性能对 CPU 上下文切换比较敏感,kubelet 提供了 static 策略,允许 Guarantee 类型 Pod 独占 CPU 核心。但该策略尚有以下不足之处:

  • static policy 只支持 QoS 为 Guarantee 的 Pod,其他 QoS 类型的 Pod 无法使用。
  • 策略对节点内所有 Pod 全部生效,而 CPU 绑核并不是”银弹“,需要支持 Pod 粒度的精细化策略。
  • 中心调度并不感知节点实际的 CPU 分配情况,无法在集群范围内选择到最优组合。

阿里云容器服务 ACK 基于 Scheduling framework 实现了拓扑感知调度以及灵活的绑核策略,针对 CPU 敏感型的工作负载可以提供更好的性能。ACK 拓扑感知调度可以适配所有 QoS 类型,并支持在 Pod 维度按需开启,同时可以在全集群范围内选择节点和 CPU 拓扑的最优组合。

弹性资源限制(reclaimed-resource)

如资源模型中的描述,节点 reclaimed-resource 的资源总量会跟随高优先级容器实际的资源用量动态变化,在节点侧,为了保障 LS 容器的运行质量,BE 容器实际可用 CPU 数量同样受 LS 容器负载的影响。

如上图所示,当 LS 容器资源用量上涨时,受负载水位红线的限制,BE 容器可用的 CPU 数量相应减少,在系统层面会体现在容器 cgroup 分组的 CPU 绑定范围,以及 CPU 时间片的分配限制。

内核Group Identity

Alibaba Cloud Linux 2 从内核版本 kernel-4.19.91-24.al7 开始支持 Group Identity 功能,通过为容器设置不同的身份标识,可以区分容器中进程任务的优先级。内核在调度不同优先级的任务时有以下特点:

  • 高优先级任务的唤醒延迟最小化。
  • 低优先级任务不对高优先级任务造成性能影响。主要体现在:
  • 低优先级任务的唤醒不会对高优先级任务造成性能影响。
  • 低优先级任务不会通过 SMT 调度器共享硬件 unit(超线程场景)而对高优先级任务造成性能影响。

Group Identity 功能可以对每一个容器设置身份标识,以区分容器中的任务优先级。Group Identity 核心是双红黑树设计,在 CFS(Completely Fair Scheduler)调度队列的单红黑树基础上,新增了一颗低优先级的红黑树,用于存放低优先级任务。

系统内核在调度包含具有身份标识的任务时,会根据不同的优先级做相应处理。具体说明如下表:

LLC 及 MBA 隔离

在神龙裸金属节点环境,容器可用的 CPU 缓存(Last Level Cache,LLC)及 内存带宽(Memory Bandwidth Allocation,MBA)可以被动态调整。通过对 BE 容器进程的细粒度资源限制,可以进一步避免对 LS 容器产生性能干扰。

内存资源质量

全局最低水位线分级

在 Linux 内核中,全局内存回收对系统性能影响很大。特别是时延敏感型业务(LS)和资源消耗型(BE)任务共同部署时,资源消耗型任务时常会瞬间申请大量的内存,使得系统的空闲内存触及全局最低水位线(global wmark_min),引发系统所有任务进入直接内存回收的慢速路径,进而导致延敏感型业务的性能抖动。在此场景下,无论是全局 kswapd 后台回收还是 memcg 后台回收,都将无法处理该问题。

基于上述场景下的问题,Alibaba Cloud Linux 2 新增了 memcg 全局最低水位线分级功能。在 global wmark_min 的基础上,将 BE 的 global wmark_min 上移,使其提前进入直接内存回收。将 LS 的 global wmark_min 下移,使其尽量避免直接内存回收。这样当 BE 任务瞬间申请大量内存的时候,会通过上移的global wmark_min 将其短时间抑制,避免 LS 发生直接内存回收。等待全局 kswapd 回收一定量的内存后,再解除 BE 任务的短时间抑制。

后台异步回收

在全局最低水位线分级后,LS 容器的内存资源不会被全局内存回收影响,但当容器内部紧张时会触发直接内存回收,直接内存回收是发生在内存分配上下文的同步回收,因此会影响当前容器中运行进程的性能。

为了解决这个问题,Alibaba Cloud Linux 2 增加了容器粒度的后台异步回收功能。该功能的实现不同于全局 kswapd 内核线程的实现,并没有创建对应的 memcg kswapd 内核线程,而是采用了 workqueue 机制来实现,并在 cgroup v1 和 cgroup v2 两个接口中,均新增了控制接口(memory.wmark_ratio)。

当容器内存使用超过 memory.wmark_ratio 时,内核将自动启用异步内存回收机制,提前于直接内存回收,改善服务的运行质量。

基于单机资源水位的驱逐

CPU 资源满足度

前文介绍了多种针对低优先级离线容器的 CPU 资源压制能力,可以有效保障 LS 类型业务的资源使用。然而在 CPU 被持续压制的情况下,BE 任务自身的性能也会受到影响,将其驱逐重调度到其他空闲节点反而可以使任务更快完成。此外,若 BE 任务在受压制时持有了内核全局锁这类资源,CPU 持续无法满足可能会导致优先级反转,影响 LS 应用的性能。

因此,差异化 SLO 套件提供了基于 CPU 资源满足度的驱逐能力,当 BE 类型容器的资源满足度持续低于一定水位时,使用 reclaimed 资源的容器会按从低到高的优先级被依次驱逐。

内存阈值水位

对于混部场景的内存资源,即便可以通过多种手段促使内核提前回收 page cache,优先保障 LS 容器的资源需求。但在内存资源超卖情况下,依然存在整机 RSS 内存用满导致 OOM 的风险。ACK 差异化 SLO 套件提供了基于内存阈值的驱逐能力,当整机 Memory 使用率水位超过阈值时,按优先级依次对容器进行 kill 驱逐,避免触发整机 OOM,影响高优容器的正常运行。

案例实践

使用 CPU Brust 提升应用性能

我们使用 Apache HTTP Server 作为延迟敏感型在线应用,通过模拟请求流量,评估 CPU Burst 能力对响应时间(RT)的提升效果。以下数据分别展示了 Alibaba Cloud Linux 2、CentOS 7 在 CPU Burst 策略开启前后的表现情况:

对比以上数据可得知:

  • 在开启 CPU Burst 能力后,应用的 RT 指标的 p99 分位值得到了明显的优化。
  • 对比 CPU Throttled 及利用率指标,可以看到开启 CPU Burst 能力后,CPU Throttled 情况得到了消除,同时 Pod 整体利用率基本保持不变。

通过应用混部提升集群利用率

我们以“Web服务+大数据”场景为例,选择了 nginx 作为 Web 服务(LS),与 spark benchmark 应用(BE)混部在 ACK 集群的同一节点,介绍 ACK 差异化 SLO 套件在实际场景下的混部效果。

对比非混部场景下的基线,以及差异化 SLO 混部场景下的数据,可以看出 ACK 差异化 SLO 套件可以在保障在线应用服务质量的同时(性能干扰 < 5%),提升集群利用率(30%)

  • 对比“nginx 独立运行”与“差异化 SLO 混部”的 nginx 时延数据,RT-p99 只有4.4%左右的性能下降。
  • 对比“spark 独立运行”与“差异化 SLO 混部”的 BE 任务运行时长,即便在 BE 任务频繁受到压制的情况下,总运行时间只上升了 11.6%。

大数据集群提升资源利用率

相较于延时敏感型的在线服务,大数据类型应用对资源质量的要求并不敏感,“差异化 SLO 混部”可以进一步提升大数据集群的容器部署密度,提高集群资源利用率,缩短作业平均运行时间。我们以 Spark  TPC-DS 评测集为例,介绍 ACK 差异化 SLO 套件对集群资源利用率的提升效果。

以下数据展示了“差异化 SLO”功能在开启前后,各项数据指标的对比情况:

  • “差异化 SLO”功能开启后,通过集群 reclaimed-resource 资源超卖模型,集群内可以运行更多的 Spark 容器。
  • 集群 CPU 平均利用率由 49% 提升至 58%;资源的充分利用使得评测集作业的总运行时间下降了 8%。

总结

阿里云容器服务 ACK 支持差异化 SLO 的相关功能将在官网陆续发布,各项功能可独立用于保障应用的服务质量,也可在混部场景下共同使用。实践表明,差异化 SLO 技术可以有效提升应用性能表现。特别是在混部场景下,ACK 差异化 SLO 混部技术可以将集群资源利用率提升至相当可观的水平;同时,针对在线时延敏感型服务,该技术可以将混部引入的性能干扰控制在 5% 以内。

原文链接

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

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

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

相关文章

鸿蒙系统被烧毁,华为鸿蒙操作系统再次被质疑 国产是原罪

国产是原罪&#xff0c;国际驰名双标现象严重&#xff0c;为何对待国产的东西要格外刻薄&#xff1f;华为手机版鸿蒙系统正式发布&#xff0c;但却引来一片嘲讽&#xff0c;这些人简直是刷新三观。如果一个产品是相同的价格&#xff0c;国产的用料更足但是还不够成熟&#xff1…

云原生落地大爆发,企业和开发者如何把握先机?

简介&#xff1a;回顾 2021 年&#xff0c;云原生有哪些重大技术突破&#xff1f;云原生时代下开发模式、技术标准等不断变化&#xff0c;企业应该如何落地云原生&#xff1f;开发者应掌握哪些能力&#xff1f;本文将为你一一解说。 作者&#xff1a;伍杏玲 随着云计算产业走…

Gartner发布中国人工智能软件市场指南,激烈竞争下走向差异化

作者 | Gartner高级研究总监 方琦 供稿 | Gartner 人工智能&#xff08;AI&#xff09;软件是中国企业投资和关注的重点。中国的AI软件市场在持续快速增长&#xff0c;竞争非常激烈。AI软件企业使用一种或多种AI技术&#xff08;见图1&#xff09;&#xff0c;帮助企业解读事件…

华为Mate是鸿蒙系统,华为mate30概念新机:4500mAh+5G网络+“鸿蒙”系统 这才是华为...

对于现在的华为手机来说&#xff0c;很多消费者的态度不一样&#xff0c;有的觉得华为手机性价比不高&#xff0c;有的则觉得华为手机质量很好&#xff0c;配置也非常的高。而我觉得&#xff0c;华为手机最值得敬佩&#xff0c;敬佩的是华为不屈的精神&#xff0c;敬佩的是远见…

平安保险基于 SPI 机制的 RocketMQ 定制化应用

简介&#xff1a;本文讲讲述平安保险为何选择 RocketMQ&#xff0c;以及在确定使用消息中间件后&#xff0c;又是如何去选择哪款消息中间件的。 作者&#xff1a;孙园园&#xff5c;平安人寿资深开发 为什么选用 RocketMQ 首先跟大家聊聊我们为什么会选用 RocketMQ&#xff…

Redis 内存优化神技,小内存保存大数据

作者 | 码哥呀来源 | 码哥字节这次跟大家分享一些优化神技&#xff0c;当你面试或者工作中你遇到如下问题&#xff0c;那就使出今天学到的绝招&#xff0c;一招定乾坤&#xff01;❝如何用更少的内存保存更多的数据&#xff1f;我们应该从 Redis 是如何保存数据的原理展开&…

SchedulerX 如何帮助用户解决分布式任务调度难题?

简介&#xff1a;本文分别对任务调度平台的资源定义、可视化管控能力、分布式批处理能力进行了简述&#xff0c;并基于 SchedulerX 的能力结合实际业务场景提供了一些基础参考案例。希望通过上述内容能让大家方便地熟悉任务调度平台接入使用概况&#xff0c;对于现有用户也可结…

如何做“健康码”的性能压测

简介&#xff1a;随着无线设备的普及和 5G 的大力建设&#xff0c;越来越多的线上系统、小程序成为了人们生活中必不可少的工具。对于这些工具&#xff0c;都会面对一个问题&#xff1a;系统能承受多少用户同时访问&#xff0c;面对突发的流量洪峰&#xff0c;能否保证系统无故…

对话 MySQL 之父:一个优秀程序员可抵5个普通程序员

【CSDN 编者按】MySQL之父Monty有着四十多年的编程经验&#xff0c;从儿时的兴趣到长大后的深耕&#xff0c;他在编程领域不断钻研&#xff0c;最终成为编程大师。《新程序员004》带你走进Monty的程序人生&#xff0c;谈谈他在编程方面的最新感悟以及对未来的预测。作者 | 郭露…

服务网格 ASM 年终总结:最终用户如何使用服务网格?

简介&#xff1a;本文不打算回顾 Istio 或是阿里云服务网格 ASM 的变化或趋势&#xff0c;我们来聊一聊阿里云 ASM 服务网格&#xff0c;它的最终用户是如何使用服务网格的。 作者&#xff1a;叶剑宏 背景 阿里云服务网格 ASM 于 2020 年 2 月公测&#xff0c;近 2 年的时间…

使用 nginx 轻松管理 kubernetes 资源文件

作者 | 江小南来源 | 江小南和他的小伙伴们引言nginx在传统的使用中&#xff0c;一般是作为反向代理或者负载均衡。但是它还有一个很优秀的能力常被人们所忽略。在kubernetes部署应用的过程中&#xff0c;会有大量的yaml等资源需要维护。集群内部维护起来不太方便&#xff0c;特…

Dubbo-go 优雅上下线设计与实践

简介&#xff1a;在分布式场景下&#xff0c;微服务进程都是以容器的形式存在&#xff0c;在容器调度系统例如 k8s 的支持下运行&#xff0c;容器组 Pod 是 K8S 的最小资源单位。随着服务的迭代和更新&#xff0c;当新版本上线后&#xff0c;需要针对线上正在运行的服务进行替换…

华为鸿蒙网络,这回真翻脸了?被谷歌“除名”,官宣鸿蒙手机版,华为:走着瞧...

与电脑系统类似&#xff0c;手机操作系统如今也已经被安卓和苹果的iOS瓜分殆尽&#xff0c;根据数据&#xff0c;安卓和iOS已经占据了手机操作系统99%以上的市场份额。不过由于iOS是苹果自研的封闭系统&#xff0c;所以在智能手机这么多年发展下来&#xff0c;也就自然地形成了…

SaaS服务的私有化部署,这样做最高效|云效工程师指北

简介&#xff1a;为了能够有效且高效地同时管理SaaS版本和私有化版本的发布过程&#xff0c;云效团队也结合云原生的基础设施和标准化工具&#xff08;比如helm&#xff09;进行了一系列的探索和实践&#xff0c;并将其中一些通能的能力进行了产品化。本文从问题本身出发&#…

阿里 BladeDISC 深度学习编译器正式开源

简介&#xff1a;随着深度学习的不断发展&#xff0c;AI模型结构在快速演化&#xff0c;底层计算硬件技术更是层出不穷&#xff0c;对于广大开发者来说不仅要考虑如何在复杂多变的场景下有效的将算力发挥出来&#xff0c;还要应对计算框架的持续迭代。深度编译器就成了应对以上…

浪潮“源”AI大模型如何求解数学应用题

编辑 | 宋慧 供稿 | 浪潮 “源1.0”大模型是浪潮信息发布的中文巨量模型&#xff0c;参数量高达2457亿&#xff0c;在中文语言能力理解和生成评测基准CUGE总榜中取得榜首&#xff0c;并获得语言理解&#xff08;篇章级&#xff09;、语言生成、对话交互、多语言、数学推理等5…

Quick BI产品核心功能大图(五)移动端:让数据在更多业务场景中流通

简介&#xff1a;将数据更好的融入日常工作中&#xff0c;一个重要的前提条件就是多端多渠道的数据触达和办公协同能力。 Quick BI凭借移动端交互体验&#xff0c;帮助用户随时随地便捷查看报表&#xff0c;并通过在线协同方式&#xff0c;追踪策略的执行落地。让数据在企业中流…

html5点击切换选项卡,简单纯js实现点击切换TAB标签实例

一个不需要jQuery实现的tab选项卡切换效果&#xff0c;代码简洁易用。默认是鼠标悬停显示tab效果&#xff0c;可将其中的onmouseover 修改为 onclick 点击效果使用方法&#xff1a;1、将附件中的index.html中的css样式以及代码部分拷贝到你需要的地方即可相关链接&#xff1a;几…

Dataphin产品核心功能大图(六)发布中心:生产和开发隔离模式下的保护伞

简介&#xff1a;Dataphin&#xff0c;用中台方法论打造企业级好数据。Dataphin是阿里巴巴集团OneData数据治理方法论内部实践的云化输出&#xff0c;一站式提供数据采、建、管、用全生命周期的大数据能力&#xff0c;以助力企业显著提升数据治理水平&#xff0c;构建质量可靠、…

当英特尔 OpenVINO 遇上微软 Azure,AI在边云协同的新方案

作者 | 宋慧 出品 | CSDN云计算 数字化浪潮下&#xff0c;越来越多的终端 IoT 设备接入网络&#xff0c;边缘的数据量与分析需求也随之增加。根据 Eclipse 对边缘负载的分析显示&#xff0c;人工智能是边缘计算中占比最高的负载之一&#xff0c;高于控制逻辑、数据分析等负载所…