Google 云托管实例组:基于 pub-sub 的自动缩放缓慢 num_undelivered_messages

Google Cloud Managed Instances Group: Slow autoscaling based on pub-sub num_undelivered_messages

我已根据发布-订阅队列大小为 MIG 设置自动缩放:

gcloud compute instance-groups managed set-autoscaling my-group \
  --zone=us-central1-a \
  --max-num-replicas=10 \
  --min-num-replicas=0 \
  --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
  --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.labels.subscription_id = my_subscription" \
  --stackdriver-metric-single-instance-assignment=10

我注意到在 num_undelivered_messages 达到 0 后缩小需要很长时间。我上次检查它花了 16 分钟,因为最后一条消息在 MIG 最终被 acked 之后缩小到 0.

如何将它减少到 ~60 秒?

如果我们查看以下文章 link,我们会发现在导致缩小的信号在 10 分钟前停止之前,不会发生缩小(默认情况下)。我读为:

If at 9:00am your signal (pub/sub) was breached then assuming the condition is no longer present immediately, scale in won't happen until at least 9:10am.

我似乎看到缩放在寻找最近 10 分钟的信号 window。还考虑到您正在查看 GCP 监控指标,并且这些指标不会实时更新,而是有延迟,即使触发器可能不再立即存在,也可能是 9:05am 在监控报告之前出色地。这意味着在缩减发生之前可能需要 9:15am(9:05am + 10 分钟)。

再次查看文档,我们似乎看到我们可以使用 gcloud--scale-in-control 标志更改 scale-in 策略。请参阅 scale-in-control 标志文档。仔细观察,它有一个名为 time-window 的参数,记录为:

How long back autoscaling should look when computing recommendations. The autoscaler will not resize below the maximum allowed deduction subtracted from the peak size observed in this period. Measured in seconds.

这似乎允许我们over-ride默认的 10 分钟时间段。