一、业务背景

整点秒杀活动背景

跨境电商独立站业务,计划在 **3月8日零点** 开启 **85折整点抢券**,预计将在 3月8日零点产生高于平日 **2倍** 的流量。这属于典型的**整点秒杀类型业务场景**。

为什么 K8S 自带的弹性扩容 HPA 无法应对爆发性流量(整点秒杀)?

  • 1. **调节滞后性**:HPA 指标采集与评估有时间间隔,决策到执行也有延迟,难以及时应对整点秒杀瞬时流量。
  • 2. **扩容速度限制**:新 Pod 创建依赖资源准备(健康检查),受资源紧张和镜像拉取等影响速度慢,且受集群资源上限制约。

    3. **预测能力不足**:HPA 不了解业务模式,无法提前预知整点秒杀流量,错过准备时机。

    HPA 更适用于**平稳的流量增长**带来的扩缩容场景,而"整点秒杀"类型的业务场景,瞬时性的突发流量直接把容器组负载打满,此刻业务的反应是 **———— 卡卡卡 ————**

    因此,整点秒杀的场景,一定要利用云计算的弹性能力**预准备计算资源**,覆盖活动周期来应对突发性流量,弥补 HPA 的不足。

    二、CronHPA 方案

    CronHPA 基于 `kubernetes-cronhpa-controller` 实现,是一个**基于时间的 Pod 水平伸缩 Controller**,按照类似 Crontab 的策略定时对集群进行扩缩容。

    CronHPA 配置示例

    ```yaml

    apiVersion: autoscaling.alibabacloud.com/v1beta1

    kind: CronHorizontalPodAutoscaler

    metadata:

    name: shopping-mall

    namespace: mall

    spec:

    jobs:

    - name: scale-up

    schedule: 0 0 23 7 3 * # 3月7日23点执行扩容任务

    targetSize: 50

    runOnce: true

    - name: scale-down

    schedule: 0 0 3 8 3 * # 3月8日凌晨3点执行缩容

    targetSize: 25

    runOnce: true

    scaleTargetRef:

    apiVersion: autoscaling/v2beta1

    kind: HorizontalPodAutoscaler

    name: shopping-mall # 以 HPA 为操作对象,实现协同

    ```

    三、效果与成本

    **Prometheus 监控流量负载**:3月7日23点 ~ 3月8日3点,期间预部署2倍动态资源,仅覆盖 **4小时**,极大程度地节约服务器成本,又应对了整点秒杀流量高峰。

  • **阿里云弹性容器实例单价**:覆盖4小时仅使用了 **12元**。
  • 四、案例总结

  • 1. 对于**平日常规性的流量峰谷场景**,普通的 HPA 就可以完成动态扩容缩容任务。
  • 2. 对于**电商整点秒杀场景**:用计划性弹性容器实例预部署,既能很好地应对已知的流量高峰,又能很好地控制用云成本。

    3. 如果应用**同时部署了 HPA 和 CronHPA**,那么必须配置两者协同,防止相互覆盖的问题。