事件驱动伸缩(KEDA)

容器计算服务 ACS(Container Compute Service)提供了ack-keda来提供事件驱动弹性能力,适用于音视频离线转码、事件驱动作业、流式数据处理等场景。本文介绍事件驱动弹性的概念和原理。

事件驱动弹性概述

Kubernetes中,容器水平伸缩器HPA(Horizontal Pod Autoscaler)是最常用的应用弹性方案。容器水平伸缩的核心是基于资源利用率与预设的阈值水位之间的关系,来确认伸缩的计划。容器水平伸缩的方式具有使用简单、资源指标丰富等特点,但是它对于需要即时弹性的场景,尤其是对基于事件源进行离线作业支撑不足。

事件驱动弹性的原理

ACS通过增强版本的ack-keda来提供事件驱动弹性能力,下图是ack-keda的基本原理。原理

ack-keda会从事件源中进行数据的周期性消费。当消息出现堆积,即可秒级触发一个批次的离线任务伸缩。下一个周期到来时,会异步进行下一个批次的作业伸缩。ack-keda具有以下特性:

  • 丰富的事件源支持

    ack-keda支持例如Kafka、MySQL、PostgreSQL、RabbitMQ、MongoDB数据源

  • 离线任务的并发控制

    对于大规模的离线作业而言,底层管控的稳定性会面临比较大的挑战,需要提供资源、额度、API请求的整体控制。ack-keda提供了单批次、总批次的任务并发控制,保障系统的稳定性。

  • 结束任务后自动清理元数据

    大规模离线作业执行完毕后,会留存大量的元数据信息。元数据信息的堆积会造成API Server的稳定性下降,造成集群的性能下降、稳定性不足,甚至可能影响其他的业务。ack-keda会在任务执行结束后自动清理元数据,降低元数据的量级。