您可以在基于 Cloud Pub/Sub 队列的 Google App Engine 中触发自动缩放吗?
Posted
技术标签:
【中文标题】您可以在基于 Cloud Pub/Sub 队列的 Google App Engine 中触发自动缩放吗?【英文标题】:Can you trigger autoscaling in Google App Engine based on Cloud Pub/Sub queue? 【发布时间】:2018-12-11 05:00:43 【问题描述】:我知道您可以在扩展 Compute Engine 实例组时根据队列大小配置自动扩展,但我不确定如何在基于 App Engine 的灵活环境中复制此行为。这可能吗?
我希望能够将前端服务与后端分离并允许它们异步工作,但我不确定如何使用可能变得非常大的 pub/sub 队列大小来扩展后端。我在app.yaml
的autoscaling
部分看到的唯一缩放选项与CPU 利用率有关。
【问题讨论】:
大型发布/订阅队列不会自动提高正在运行的后端实例的 CPU 利用率,从而(间接)充当 GAE flex 自动缩放触发器吗? @DanCornilescu 我在想可能是这种情况,但不一定保证 CPU 利用率会随着队列大小的增加而增加。 API 调用或任何其他导致主线程空闲的任务可能会导致较长的延迟,但 CPU 利用率仍然很低。也许我需要在后端实现多线程来处理额外的消息以提高利用率,但这似乎没有必要? @DanCornilescu 如果间接缩放在所有用例中都令人满意,为什么 GCE 的 pub/sub 自动缩放存在? GCE 没有 GAE 自动缩放... @DanCornilescu GCE 可以自动缩放 Cloud Pub/Sub 的堆栈驱动程序指标 【参考方案1】:App Engine 柔性环境目前仅支持基于目标 CPU 利用率的自动扩缩(有关扩缩设置,请参阅 doc)。
另请注意,您无法设置具有自动缩放功能的运行实例的实际数量,而只能设置“max_num_instances”值。您可以通过 App Engine Admin API 的 apps.services.versions.patch 方法以编程方式将其更新为更高的值,但自动扩缩器仍将仅根据 cpu 利用率决定实际生成新实例。
您提到的最佳选择是允许并发请求和多线程,以便最大限度地利用每个实例。然后,您可以调整 cpu 的 target_utilization 值,以便在需要时生成新实例。
【讨论】:
以上是关于您可以在基于 Cloud Pub/Sub 队列的 Google App Engine 中触发自动缩放吗?的主要内容,如果未能解决你的问题,请参考以下文章
Google Cloud 上使用 Pub/Sub 的主/从模式
重新部署时 Google Cloud Pub Sub 内存泄漏(基于 Netty)
Google Cloud Functions 无法使用 Pub/Sub 死信主题