Skip to content
返回运维与 SRE

需求预测

从历史趋势、季节性和业务事件预测需求以预置容量。

为什么

自动扩缩是反应性 — 它在流量到后扩,意尖峰首 2-5 分钟跑不足容量(延迟尖、错误)。对可预测尖峰(黑五、产品发布、营销邮件发),预测让你预置:尖峰前 30 分钟扩,故流量到时容量就绪。预测合历史趋势(流量月增 5%)、季节性(Q4 流量翻倍)和业务事件(10 点营销邮件 1h 内 3x 流量)。这把容量从反应性抢("服务挂了,立即扩!")变计划操作("我们预期 10 点 3x 流量,9:50 预扩")。预测并预置的团队报预测事件中容量相关事件少 90%,因容量已在。

何时使用

对可预测事件:季节峰、产品发布、营销发送和已知流量模式。

如何做

1. 收集历史流量数据
   - 按服务请求率,按小时,过去 12-24 月
   - 识别季节性:日(工作時)、周(工作日 vs 周末)、年(Q4 峰)

2. 拟预测模型
   - 简单:线性增长 + 季节分解(statsmodels、Prophet)
   - 高级:带特征 ML 模型(营销花、周几、假日)
   - 别过拟;80% 对的简单模型胜错的复杂模型

3. 纳入业务事件
   - 营销:"10 点邮件发 → 预期 1h 3x 流量" → 9:50 预扩
   - 产品:"周二发布 → 预期 2 天 10x 流量" → 周一预扩
   - 销售:"黑五 → 预期 5x 流量" → 周三预扩

4. 预测尖峰前预置容量
   - 尖峰前 30m 扩(给 pod 暖、缓存填时间)
   - 尖峰退后 30m 缩(省成本)
   - 用计划扩缩(K8s HPA 带计划或调副本的 cron job)

5. 跟踪预测准确度并改
   - "预测 3x,实际 2.5x" → 超配 20%,可
   - "预测 3x,实际 5x" → 欠配,事件;改模型
   - 预测准确度是指标;季度审查

示例

# 预测(Prophet,checkout 服务):
model = Prophet(yearly_seasonality=True, weekly_seasonality=True)
model.fit(history)  # 24 月小时结账流量
future = model.make_future_dataframe(periods=168, freq='H')  # 下 7 天
forecast = model.predict(future)
# 预测:黑五(11 月 24)→ 5x 正常流量,10 点-20 点

# 预置(K8s 计划 HPA):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: checkout
spec:
  behavior:
    scaleUp:
      stabilizationWindowSeconds: 0  # 立即扩
  metrics:
    - type: Resource
      resource:
        name: cpu
        target: { type: Utilization, averageUtilization: 70 }
---
# 黑五前计划扩:
apiVersion: v1
kind: CronJob
metadata:
  name: checkout-black-friday-pre-scale
spec:
  schedule: "0 9 24 11 *"  # 11 月 24 9 点(尖峰前 1h)
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: kubectl
              command: ["kubectl", "scale", "deploy/checkout", "--replicas=50"]

# 预测准确度跟踪:
#   黑五 2025:预测 5x,实际 4.8x → 超 4%,✅
#   产品发布:预测 10x,实际 15x → 欠 33%,⚠ 改模型
#   营销邮件:预测 3x,实际 3.1x → 超 3%,✅

常见问题

  • ⚠仅靠自动扩缩 — 它反应性故尖峰首 2-5m 跑不足容量;为可预测事件预置。
  • ⚠预测模型是黑盒 — 错时无人知为什么;用简单可解释模型并跟踪准确度。
  • ⚠预扩太晚 — 10 点尖峰 10 点扩意 pod 未就绪;前 30m 扩。
  • ⚠无预测准确度跟踪 — 模型每次错但无人注意因无指标;跟踪预测 vs 实际。

最佳实践

  • ✓从历史趋势 + 季节性 + 业务事件预测;预测尖峰前 30m 预置使流量到时容量就绪。
  • ✓用简单可解释模型(线性 + 季节分解、Prophet);季度跟踪预测 vs 实际准确度。
  • ✓合预测与反应性自动扩缩:预测处理可预测尖峰,自动扩缩处理不可预测余。
  • ✓尖峰退后 30m 缩省成本;预置为尖峰非永久超配。