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

本文涉及的产品
应用实时监控服务-用户体验监控,每月100OCU免费额度
应用实时监控服务-应用监控,每月50GB免费额度
可观测监控 Prometheus 版,每月50GB免费额度
简介: 阿里巴巴在“差异化 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 类型的原因。


1.png

image.gif

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


2.png

image.gif

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


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


# Node
status:
  allocatable:
    # milli-core
    alibabacloud.com/reclaimed-cpu: 50000
    # bytes
    alibabacloud.com/reclaimed-memory: 50000
  capacity:
    alibabacloud.com/reclaimed-cpu: 50000
    alibabacloud.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: 1000
        alibabacloud.com/reclaimed-memory: 2048 
      requests:
        alibabacloud.com/reclaimed-cpu: 1000
        alibabacloud.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 长尾现象严重的原因之一。


3.png


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


4.png

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 容器负载的影响。


5.png

image.gif

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


内核Group Identity


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


  • 高优先级任务的唤醒延迟最小化。


  • 低优先级任务不对高优先级任务造成性能影响。主要体现在:


  • 低优先级任务的唤醒不会对高优先级任务造成性能影响。

  • 低优先级任务不会通过 SMT 调度器共享硬件 unit(超线程场景)而对高优先级任务造成性能影响。


6.png

image.gif

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


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

7.png


更多关于内核 Group Identity 能力的详细描述,可参见官网文档:https://help.aliyun.com/document_detail/338407.html


LLC 及 MBA 隔离


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


内存资源质量

全局最低水位线分级


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


8.png

image.gif

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


更多关于内核全局内存最低水位线分级能力的详细描述,可参见官网文档:https://help.aliyun.com/document_detail/169537.htm


后台异步回收


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


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


9.png


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


更多关于容器内存后台异步回收能力的描述,可参见官网文档:https://help.aliyun.com/document_detail/169535.html


基于单机资源水位的驱逐

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 策略开启前后的表现情况:


10.png11.png

比以上数据可得知:


  • 在开启 CPU Burst 能力后,应用的 RT 指标的 p99 分位值得到了明显的优化。


  • 对比 CPU Throttled 及利用率指标,可以看到开启 CPU Burst 能力后,CPU Throttled 情况得到了消除,同时 Pod 整体利用率基本保持不变。


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

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


12.png


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


  • 对比“nginx 独立运行”与“差异化 SLO 混部”的 nginx 时延数据,RT-p99 只有4.4%左右的性能下降。


  • 对比“spark 独立运行”与“差异化 SLO 混部”的 BE 任务运行时长,即便在 BE 任务频繁受到压制的情况下,总运行时间只上升了 11.6%。


13.png


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


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


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


  • “差异化 SLO”功能开启后,通过集群 reclaimed-resource 资源超卖模型,集群内可以运行更多的 Spark 容器。


  • 集群 CPU 平均利用率由 49% 提升至 58%;资源的充分利用使得评测集作业的总运行时间下降了 8%。


14.pngimage.gif


总结


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


点击此处,即可查看阿里云容器服务 ACK 支持差异化 SLO 各项功能的详细介绍!

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
3天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
17天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
5天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
24 4
|
17天前
|
人工智能 Cloud Native 调度
阿里云容器服务在AI智算场景的创新与实践
本文源自张凯在2024云栖大会的演讲,介绍了阿里云容器服务在AI智算领域的创新与实践。从2018年推出首个开源GPU容器共享调度方案至今,阿里云容器服务不断推进云原生AI的发展,包括增强GPU可观测性、实现多集群跨地域统一调度、优化大模型推理引擎部署、提供灵活的弹性伸缩策略等,旨在为客户提供高效、低成本的云原生AI解决方案。
|
17天前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
17天前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,智算时代云原生操作系统
2024云栖大会,阿里巴巴研究员易立分享了阿里云容器服务的最新进展。容器技术已成为云原生操作系统的基石,支持多样化的应用场景,如自动驾驶、AI训练等。阿里云容器服务覆盖公共云、边缘云、IDC,提供统一的基础设施,助力客户实现数字化转型和技术创新。今年,阿里云在弹性计算、网络优化、存储解决方案等方面进行了多项重要升级,进一步提升了性能和可靠性。
|
17天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
17天前
|
人工智能 运维 Kubernetes
拥抱智算时代:阿里云容器服务智能、托管、弹性新体验
本文总结了2024云栖大会容器计算专场的演讲内容,重点介绍了阿里云容器服务的新产品体验,包括智能、托管、弹性的特点,以及如何助力客户拥抱智算时代。文中还分享了多项实际案例和技术细节,展示了阿里云容器服务在提升用户体验和解决实际问题方面的努力。
|
3月前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
3月前
|
人工智能 Kubernetes Cloud Native
阿里云容器服务,全面助力云上体育盛会
本文讲述了阿里云容器服务,通过安全稳定的产品能力和成熟的稳定性保障体系,全面助力云上体育赛场,促进科技之光与五环之光交相辉映。

相关产品

  • 容器计算服务