乐趣区

关于阿里云:甩掉容量规划炸弹用-AHPA-实现-Kubernetes-智能弹性伸缩

作者:子白

AHPA 介绍

背景

Kubernetes 中利用实例数设置有固定实例数、HPA 和 CronHPA 三种策略。应用最多的是固定实例数,然而很多业务都存在波峰浪谷,如果采纳固定实例数的形式会造成较大的资源节约。Kubernetes 中提供了 HPA 及 CronHPA 两种机制实现按需扩容实例数量,缩小资源节约。CronHPA 是用户设定定时规定,在固定工夫进行实例数伸缩。然而设定定时规定较为简单,如果定时距离设置较大就会造成资源节约。HPA 能够依据利用实时负载设置实例数量,当利用负载高时扩容,当利用负载低时则缩容实例。HPA 是基于实时负载进行扩容,只有当负载曾经比拟高时才会触发扩容,但此时业务曾经处在高负载中因而业务局部流量呈现响应慢或者超时的问题,即存在“弹性滞后”的问题。为此,咱们提出了一种智能化弹性伸缩计划 AHPA,能够依据历史时序数据进行被动预测,提前扩容,防止弹性滞后。同时,会依据实时数据动静调整被动预测后果,兼容周期变动等场景。

图 1 各种弹性伸缩策略比照图

AHPA 架构

图 2 AHPA 框架图

AHPA 整体架构如图 2 所示,分为数据采集、预测及弹性伸缩三大部分。

  • Data Collection

Data Collection 模块负责从数据源收集数据并将数据转为对立的格局传入给 Prediction 模块。数据源反对如 Prometheus、Metrics Serve、Log Service 以及其余自定义的监控平台。

指标蕴含 CPU、Memory、GPU 等资源指标,也包含 QPS、RT 等业务指标,同时也反对其余用户自定义指标。Adapter 模块负责将从多个数据源收集的各类指标转为对立的格局输出给 Prediction 模块。

  • Prediction

Prediction 模块负责依据输出指标预测所需的 Pod 数量。Preprocessing 负责数据预处理,如过滤非 Running 状态的 Pod 利用率、解决缺失数据等。实现预处理后将时序数据传递给 RobustScaler [ 1] 算法模块。该模块将在第二局部具体介绍。

Revise 模块负责对 RobustScaler 模块给出的预测 Pod 数量进行修改。RobustScaler 分为 Proactive 和 Reactive 两种模式,用户也会为利用 Pod 数量设置上上限。为保障利用安稳运行,咱们采取尽快扩,迟缓缩的策略,因而 Revise 模块会取 Proactive、Reactive 及用户设置的上上限中最大值作为预测的 Pod 数量。

  • Scaling

Scaling 模块负责执行 Pod 扩缩容。弹性伸缩策略分为两类:auto 及 observer 模式。

    • auto:依据 Prediction 给出的 Pod 数量主动调整
    • observer:dryrun 模式,不调整 Pod 数量。用户能够通过这种形式察看 AHPA 工作是否合乎预期。

AHPA 部署形式

图 3 AHPA 部署图

AHPA 在 Kubernetes 中部署图如上所示,分为 AHPA Algorithm 及 AHPA Controller 两局部。AHPA Algorithm Deployment 是负责 AHPA 中算法相干的局部,对应架构图中的 Prediction 模块。AHPA Controller 负责数据收集及弹性扩缩容的执行,对应架构图中的 Data Collection 及 Scaling 模块。

AHPA 引入 CRD(CustomResourceDefinition)资源以配置弹性伸缩策略,每个利用(Deployment)对应一个 CRD 资源。应用 CRD 的劣势在于能够透出多种算法配置,具备较强的灵活性。CRD 的配置示例如下:

apiVersion: autoscaling.alibabacloud.com/v1beta1
kind: AdvancedHorizontalPodAutoscaler
metadata:
  name: ahpa-demo
spec:
  scaleStrategy: observer
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 40
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  maxReplicas: 100
  minReplicas: 2
  prediction:
    quantile: 95
    scaleUpForward: 180
  instanceBounds:
  - startTime: "2021-12-16 00:00:00"
    endTime: "2022-12-16 24:00:00"
    bounds:
    - cron: "* 0-8 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 4
    - cron: "* 9-15 ? * MON-FRI"
      maxReplicas: 15
      minReplicas: 10
    - cron: "* 16-23 ? * MON-FRI"
      maxReplicas: 20
      minReplicas: 15

spec.scaleTargetRef 用于指定这个 CRD 资源关联的利用,spec.metrics 用于指定采集的时序指标,spec.scaleStrategy 用于设置弹性策略,包含 auto、observer 模式。spec.prediction 字段用于设置算法相干指标。spec.maxReplicas 及 spec.minReplicas 设定了利用的 Pod 数量的上下界。有些利用存在显著的波峰浪谷,因而须要针对不同时段设置不同的上下界。因而,咱们提供了 spec.instanceBounds 能够设置不同时段边界爱护,也能够起到定时弹性的作用。具体参数及阐明如表 1 所示。

表 1 AHPA CRD 外围参数列表及阐明

  • 高可用性

异样在简单零碎中不可避免,因而咱们在部署时采纳了高可用性架构。Algorithm 与 Controller 组件都采纳 Deployment 形式部署,当 Pod 产生异样时会主动杀死异样 Pod 并创立新的 Pod,保障业务安稳运行。当接入的业务利用较多时,Algorithm 及 Controller 均可程度扩大以满足高并发需要。

为了保障 AHPA 组件降级过中业务无感知,Algorithm 和 Controller 组件基于 Service 进行通信,Algorithm 及 Controller 能够独立降级。降级时采纳滚动降级形式,即先创立新的 Pod,期待新的 Pod 能够对外提供服务后再杀死旧 Pod。

  • 可观测性

咱们提供了 Kubernetes Event、Prothemetheus、Dashboard 等多种形式透出 AHPA 组件运行状态,不便客户监控 AHPA 运行状态及定位问题。

如设置 observer 模式后,用户能够通过查看 Dashboard 预估 AHPA 失效后果。

  • Predict CPU Oberserver:蓝色示意 HPA 理论的 CPU 使用量,绿色示意 AHPA 预测进去的 CPU 使用量。绿色曲线大于蓝色,表明预测的 CPU 容量短缺。
  • Predict POD Oberserver:蓝色示意应用 HPA 理论的扩缩容 Pod 数,绿色示意 AHPA 预测进去的扩缩容 Pod 数,绿色曲线小于蓝色,表明预测的 Pod 数量更少。

AHPA Algorithm-RobustScaler 算法

时序预测是 AHPA 算法的外围能力。现有的工夫序列预测算法大抵能够分为两大类:统计学算法如 ARIMA、ETS、GARCH 等;机器学习算法和深度学习算法如狭义线性模型、XGBoost、LSTM、CNN、RNN 等。

Kubernetes 中 metrics 数据个别采纳 Prometheus 存储,综合效率老本等因素,个别业务数据存储周期为 7 天。7 天数据量作为训练集过小,训练出的机器 / 深度学习模型准确性较差。AHPA 用于实时弹性扩容,对于预测时延要求较高,统计学算法配置参数少、计算复杂度低、延时低。综合思考,咱们采纳了统计学算法进行时序预测。

Framework

图 4  RobustScaler Framework

RobustScaler 算法框架如图 4 所示。实时指标数据 (Real-time metric data) 为过来分钟内的数据,用于被动预测 (Proactive Planning);历史指标数据(Historical metric data) 为过来天数据,用于被动预测(Reactive Planning)。

  • Forecasting

首先利用 RobustPeriod [2 ] 算法检测数据是否有周期,有几重周期以及每个周期重量的长度。如果数据存在周期性,则调用 RobustSTL [3 ] 算法合成出数据的趋势、周期及残差项;如果数据没有周期性,则调用 RobustTrend [4] 算法合成出趋势和残差项。

图 5 Forecasing 模块框架图

RobustPeriod 利用非凡的小波变换 MODWT 来断绝多周期之间的互相烦扰,从而检测出时序数据中的多周期。RobustSTL 针对周期性数据,首先从时序数据中合成出趋势项,而后合成出周期项,最初依据残差项修改,以上过程屡次迭代直至收敛。RobustTrend 算法针对非周期性数据,从时序数据中合成出趋势及残差。

  • Resource Model

ResourceModel 模块用于构建资源模型,该模型的输出为指标时序数据,输入为 Pod 数量。模型选用了统计学中的排队论 [5 ] 模型。具体的模型与输出的指标无关,单指标个别采纳线性模型,多指标时往往采纳非线性模型。

  • Proactive planning

Forecasting 模块应用 RobustSTL 算法将时序数据合成为趋势项 Tt,周期项 S​i,t 及残差项 r​t, 下一时刻的指标值计算形式如下。

被动预测:将历史周期项间接向右平移作为将来周期项的预测,将趋势项用指数平滑等经典的时序模型预测失去将来趋势重量的预测,残差局部利用分位数回归森林失去将来残差的上界预测。

  • Reactive planning

Forecasting 模块应用 RobustTrend 算法将无周期数据合成为趋势项 T​t,残差项 rt。以后时刻的指标能够示意为 y​t=Tt+rt,下一时刻的指标值由最近 h 分钟指标计算得出,公式如下。

其中示意时刻的指标权重,该值由时刻的指标值及与时刻与以后时刻差独特决定。

模型训练及预测

算法应用过程如下。

  • 被动预测
  1. 获取最近 Tday 天数据
  2. 对数据进行剖析,基于 Forecasting 模块合成出数据周期、趋势及残差。Proactive Planning 模块依据 Forecasting 模块合成出的信息进行预测。预测后果为接下来 Thour 小时的指标值。
  3. 依据最近 Tday 数据构建 Resource Estimation 模型。该模型的输出为第二步预测出的指标值,输入为预期 Pod 数量。
  • 被动预测
  1. 获取最近 Tmin 分钟数据
  2. 对数据进行剖析,基于 Forecasting 模块合成出数据趋势及残差。Reactive Planning 模块依据 Forecasting 模块合成出的趋势及残差信息预测下一时刻的指标值。
  3. 将第二步预测出的指标值输出被动预测构建出的 Resource Estimation 模型中,计算下一时刻 Pod 数量。
  • 利用扩缩容

最终 pod 数量取被动及被动预测的最大值,计算公式如下。

算法成果评估

  • AHPA 算法能够帮忙客户辨认业务是否存在周期性
  • 当数据存在周期性时,AHPA 对数据缺失、毛刺以及业务变更引发的数据周期变动等有很强的鲁棒性
  • 当数据不存在周期性时,AHPA 因具备肯定的预测能力,能够提前感知数据趋势变动;对数据失落、乐音等有很强的鲁棒性

论断

极致弹性是云外围劣势之一,在云原生时代用户对弹性的诉求也越发强烈。很多用户配置了 HPA 和 CronHPA 策略。HPA 能够依据利用负载更改实例数量,当利用负载较高时扩容更多的实例。CronHPA 是定时 HPA,在固定工夫进行实例数伸缩。CronHPA 配置规定简单,且存在资源节约,HPA 存在弹性触发滞后的问题,会导致业务稳定性降落。

为此,咱们提出了一种智能化弹性伸缩组件 AHPA,外围算法应用达摩院决策智能时序团队提供的 RobustScaler,该算法已被数据库顶会 ICDE 2022 录用。RobustScaler 能够自动识别指标数据是否具备周期性,并且在周期变更、毛刺、数据缺失等场景下都具备很强的鲁棒性。AHPA 组件能够在容器服务 ACK 的组件中心里一键装置,装置胜利后即可通过 CRD 资源为利用配置弹性伸缩策略,具体请参考官网帮忙文档《AHPA 弹性预测》[ 6]

Reference

[1] Qian, H. ,  Wen, Q. ,  Sun, L. ,  Gu, J. ,  Niu, Q. , &  Tang, Z. . (2022). Robustscaler: qos-aware autoscaling for complex workloads.  The 38th IEEE International Conference on Data Engineering (ICDE 2022)

[2] Qingsong Wen, Kai He, Liang Sun, Yingying Zhang, Min Ke, and Huan Xu. 2021. RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection. In Proceedings of the 2021 International Conference on Management of Data (SIGMOD ’21).

[3] Qingsong Wen, Jingkun Gao, Xiaomin Song, Liang Sun, Huan Xu, Shenghuo Zhu. (2019). RobustSTL: A Robust Seasonal-Trend Decomposition Algorithm for Long ​Time Series. Proceedings of the AAAI Conference on Artificial Intelligence, 33(01), 5409-5416.

[4] Qingsong Wen, Jingkun Gao, Xiaomin Song, Liang Sun, Jian Tan. RobustTrend: A Huber Loss with a Combined First and Second Order Difference Regularization for Time Series Trend Filtering. IJCAI 2019

[5]《运筹学》教材编写组. 运筹学(第三版)[M]. 清华大学出版社, 2005.

[6]《AHPA 弹性预测》

https://help.aliyun.com/docum…

退出移动版