AHPA:开启 Kubernetes 弹性预测之门

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 在云原生容器时代,用户需要面对不同的业务场景:周期性的业务,Serverless 按需使用等。在使用自动弹性中, 会发现这样或那样的问题,其中最需要关注的是弹性滞后、冷启动问题。阿里巴巴云原生团队和阿里达摩院决策智能时序团队合作开发 AHPA 弹性预测产品,该产品主要出发点是基于检测到的周期做“定时规划”,通过规划实现提前扩容的目的,在保证业务稳定的情况下,让你真正实现按需使用。

背景

用户对云弹性能力的期望越来越高,这个期望主要来自两方面。一是云原生概念的崛起,从 VM 时代到了容器时代,云的使用模式正在发生变化。而是新型业务模式的崛起,这些崛起的新型业务模式在设计之初就是基于云来建构的,天然就有对弹性的诉求。

有了云用户不再需要自己从物理机、机房开始搭建基础设施,云给用户提供了非常弹性的基础设施。云的最大优势就是可以给用户提供弹性的资源供给,特别是到了云原生时代用户对弹性的诉求也越来越强烈。弹性需求强度在 VM 时代还是人工操作分钟级别的,在容器时代已经到了秒级的要求,用户面对不同的业务场景,对云的期望和要求也正在发生变化:

  • 周期性的业务场景:新型业务比如直播、在线教育和游戏这些业务有一个很大的共同点就是有非常明显的周期性,这种周期性促使客户思考面向弹性的业务架构。再加上云原生的理念很自然的就想到按需弹起一批服务起来,用完就释放。
  • Serverless 的到来:Serverless 的核心理念是按需使用,自动弹性。用户不需要容量规划。但当你真正开始使用 Serverless 的时候,会发现这样或那样的问题,其中最需要关注的是弹性滞后、冷启动问题。对于响应时延敏感的业务,这是不可接受的。

那么面对上面的场景,当前 Kubernetes 中现有的弹性方案是否可以解呢?

传统弹性方案面临的问题

一般在Kubernetes中管理应用实例数三种方式:固定实例数、HPA 和 CronHPA 。使用最多的是固定实例数,固定实例数最大的问题就是在业务波谷的时候有很明显的资源浪费。为了解决资源浪费的问题所以有了 HPA,但 HPA 的弹性触发是滞后的,这就导致资源的供给也会滞后,资源不能及时供给可能会导致业务稳定性下降。CronHPA 是可以定时伸缩,看起来可以解决弹性滞后的问题,但具体定时粒度有多细、业务量有变化的时候需要频繁的手动调节定时弹性策略吗?如果这样做,这就会带来非常繁重的运维复杂度,而且也很容易出错。


AHPA 弹性预测

AHPA 弹性预测主要出发点是基于检测到的周期做“定时规划”,通过规划实现提前扩容的目的。但既然是规划就会有疏漏,所以需要对规划的实例数有一个实时调整的能力。所以本方案有两个弹性策略:主动预测和被动预测。主动预测基于达摩院RobustPeriod算法[1]识别周期长度然后利用RobustSTL 算法[2]提起出周期性趋势,主动预测下个周期应用的实例数量;被动预测基于应用实时数据设定实例数量,可以很好的应对突发流量。此外,AHPA还增加了兜底保护策略,用户可以设置实例数量的上下界。AHPA算法中最终生效的实例数是主动预测、被动预测及兜底策略中的最大值。


架构

弹性首先是要在业务稳定的情况下进行的,弹性伸缩的核心目的不仅是帮用户节省成本,更是增强业务的整体稳定性、免运维能力和构建核心竞争力。AHPA架构设计的基本原则:

  • 稳定性: 保证用户服务稳定的情况下进行弹性伸缩
  • 免运维: 不给用户增加额外的运维负担,包括: 不在用户侧增加新的 Controller、Autoscaler 配置语义比 HPA 更清晰
  • 面向 Serverless: 提供以用户应用为中心面向应用 Pod 维度的设计,不考虑 K8s 节点的利用率情况。可以假设用户使用的都是 ECI Pod,考虑在 Serverless 场景(没有Node)下的弹性最佳实践,增强 ASK 运行 LongRun 的能力

架构如下:

  • 丰富的数据指标:支持包括CPU、Memory、QPS、RT以及外部指标等
  • 稳定性保障:AHPA的弹性逻辑基于主动预热、被动兜底的策略,并结合降级保护,保证了资源稳定。
  • 主动预测:根据历史预测出未来一段时间的趋势结果,适用于周期性的应用。
  • 被动预测:实时预测。针对突发流量场景,通过被动预测实时准备资源。
  • 降级保护:支持配置多个时间区间范围最大、最小实例。
  • 多种伸缩方式:AHPA 支持伸缩方式包括Knative、HPA以及Deployment:
  • Knative:解决 Serverless 应用场景下,基于并发数/QPS/RT弹性冷启动的问题
  • HPA:简化HPA弹性策略配置,降低用户使用弹性的门槛,解决使用HPA面临的冷启动的问题
  • Deployment:直接使用 Deployment,自动扩缩容

适应场景

AHPA 适应场景包括:

  • 有明显周期性场景
  • 固定实例数+弹性兜底场景
  • 推荐实例数配置场景

预测效果

开启 AHPA 弹性后,我们提供可视化页面,用于查看 AHPA 效果。下面是一个基于CPU指标进行预测的示例(与使用 HPA 比较):

说明:

  • Predict CPU Oberserver:蓝色表示HPA实际的CPU使用量,绿色表示预测出来的CPU使用量。绿色曲线大于蓝色,表明通过预测给出的容量是足够的。

  • Predict POD Oberserver:蓝色表示使用HPA实际的扩所容Pod数,绿色表示预测出来的扩所容Pod数,绿色曲线小于蓝色,表明通过预测弹性的Pod数更低。
  • 周期性:根据历史 7 天的数据,通过预测算法检测到该应用具备周期性。

结论:通过预测结果表明,弹性预测趋势符合预期。

邀测试用

AHPA目前向用户开放邀测,点击申请白名单,欢迎大家试用并提宝贵意见。

参考文献

[1] (阿里达摩院决策智能时序团队) Qingsong Wen, Kai He, Liang Sun, Yingying Zhang, Min Ke, and Huan Xu. RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection,  in Proc. of 2021 ACM SIGMOD/PODS International Conference on Management of Data (SIGMOD 2021), Xi'an, China, Jun. 2021.

[2] (阿里达摩院决策智能时序团队) Qingsong Wen, Jingkun Gao, Xiaomin Song, Liang Sun, Huan Xu, Shenghuo Zhu. RobustSTL: A Robust Seasonal-Trend Decomposition Algorithm for Long Time Series, in Proc. of the 33rd AAAI Conference on Artificial Intelligence (AAAI 2019), 2019, pp. 5409-5416, Honolulu, Hawaii, Jan. 2019.

[3] (阿里达摩院决策智能时序团队) Qingsong Wen, Zhe Zhang, Yan Li and Liang Sun. Fast RobustSTL: Efficient and Robust Seasonal-Trend Decomposition for Time Series with Complex Patterns, in Proc. of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining (KDD 2020), San Diego, CA, Aug. 2020.

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
4月前
|
弹性计算 Kubernetes 算法
AHPA:Kubernetes弹性伸缩的预言家,揭秘未来资源使用的神秘面纱!
【8月更文挑战第8天】在云原生应用中,Kubernetes已成为部署标准。面对不断扩大的集群与应用规模,有效资源管理和弹性伸缩成为关键。AHPA(自适应历史感知预测算法)作为先进的预测技术,通过分析历史数据预测资源需求并自动调整Kubernetes资源分配。以一个在线零售平台为例,通过AHPA识别流量周期性变化,在节假日高峰期前自动增加Pod数量,保证服务稳定;而在平峰期减少Pod数量,节省资源。AHPA为Kubernetes提供了智能化的弹性伸缩方案,提高了应用稳定性和资源利用率。
84 7
|
7月前
|
人工智能 Cloud Native PyTorch
阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践
阿里云 ACK 云原生 AI 套件中的分布式弹性训练实践
148858 4
|
Kubernetes Cloud Native 测试技术
在云计算平台上部署Kubernetes:无缝管理和弹性扩展
Kubernetes已成为云计算平台上部署和管理容器化应用程序的首选解决方案。无论您选择使用Google Cloud Platform(GCP)、Amazon Web Services(AWS)、Microsoft Azure或其他云计算提供商,Kubernetes都为您提供了一种灵活、可移植且可扩展的方式来管理容器化应用程序。本文将深入探讨如何在云计算平台上部署Kubernetes,并为您提供一些实际的示例。
165 1
|
弹性计算 人工智能 Kubernetes
应对突发流量,如何快速为自建 K8s 添加云上弹性能力
应对突发流量,如何快速为自建 K8s 添加云上弹性能力
|
机器学习/深度学习 数据采集 弹性计算
甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
我们提出了一种智能化弹性伸缩方案 AHPA,可以根据历史时序数据进行主动预测,提前扩容,避免弹性滞后。同时,会根据实时数据动态调整主动预测结果,兼容周期变动等场景。
298 6
甩掉容量规划炸弹:用 AHPA 实现 Kubernetes 智能弹性伸缩
|
弹性计算 运维 Kubernetes
微服务应用视角解读如何选择K8S的弹性策略
微服务架构的出现,拆分了庞大的单体应用,让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时,往往需要对一些应用组件进行扩容。K8S在应用层面提供了HPA,围绕HPA开源社区延伸出了KEDA这样的弹性组件,为微服务应用以业务指标执行弹性策略提供了实现的可能性。但HPA正常工作的一个大前提是需要保证集群资源充足,为此用户必须提前对集群扩容或时常保持集群资源冗余。本文中就会详细的为你解读一下。
529 1
微服务应用视角解读如何选择K8S的弹性策略
|
弹性计算 运维 Kubernetes
微服务应用视角解读如何选择K8S的弹性策略
微服务架构的出现,拆分了庞大的单体应用,让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时,往往需要对一些应用组件进行扩容。K8S在应用层面提供了HPA,围绕HPA开源社区延伸出了KEDA这样的弹性组件,为微服务应用以业务指标执行弹性策略提供了实现的可能性。但HPA正常工作的一个大前提是需要保证集群资源充足,为此用户必须提前对集群扩容或时常保持集群资源冗余。 对于集群资源弹性这一命题,K8S社区给出了Cluster Autoscaler(CA)和Virtual Kubelet(VK)两种解决方案。本文围绕着微服务应用的形态与特点,剖析了CA与VK各自适用的场景,并总结了微服务架构下
微服务应用视角解读如何选择K8S的弹性策略
|
弹性计算 运维 Kubernetes
微服务应用视角解读如何选择 K8s 的弹性策略
本文围绕着微服务应用的形态与特点,剖析了 CA 与 VK 各自适用的场景,并总结了微服务架构下应用该如何选择集群资源弹性。
微服务应用视角解读如何选择 K8s 的弹性策略
|
消息中间件 监控 Cloud Native
容器弹性—使用 Knative on ACK 实现基于请求的自动弹性|学习笔记
快速学习容器弹性—使用 Knative on ACK 实现基于请求的自动弹性
容器弹性—使用 Knative on ACK 实现基于请求的自动弹性|学习笔记
|
达摩院 Kubernetes Cloud Native
直播预告 | 容器服务 ACK 弹性预测最佳实践
阿里巴巴云原生团队和阿里达摩院决策智能时序团队合作开发了 AHPA (Advanced Horizontal Pod Autoscaler)弹性预测产品,该产品主要出发点是基于检测到的周期做“定时规划”,通过规划实现提前扩容的目的,在保证业务稳定的情况下,让你真正实现按需使用。
直播预告 | 容器服务 ACK 弹性预测最佳实践

相关产品

  • 容器服务Kubernetes版
  • 下一篇
    DataWorks