为什么我们在一个自动缩放的 Google App Engine 实例上遇到巨大的延迟,而其他几个实例可用?

Why are we experiencing huge latency on one autoscaled Google App Engine instance when several others are available?

我们在app.yaml中的自动缩放参数如下:

automatic_scaling: min_idle_instances: 3 max_idle_instances: automatic max_pending_latency: 30ms max_concurrent_requests: 20

结果是 3 个常驻实例和通常 2-6 个动态实例(取决于流量),但实例之间的负载分配似乎效率低下。在下面的屏幕截图中,我们看到 1 个实例包含绝大多数请求和 21 秒的巨大延迟(在最后一分钟)。

对我来说,这表明我们的设置一定有问题来解释这些高延迟。

有没有人在使用 GCP 或 App Engine 时遇到过这样的问题?

空闲实例不用于平衡当前负载。他们在新的动态实例旋转时弥合了差距。在您的设置中,可能值得尝试一两个空闲实例和 fiddle 具有最小和最大挂起延迟。

待定延迟是通过实例处理请求之前在队列中停留的时间来衡量的。您在屏幕截图中看到的延迟是请求和响应之间的时间。如果任何单个请求需要 21 秒,它将看起来像这样。不过,挂起的延迟可能仍低于 30 毫秒。

您应该检查您的日志,看看哪个请求花费了这么长时间,并可能将它们分解成更小的工作块。许多小型工作的规模要比大型工作好得多。挂起的延迟也会随着许多小作业而增加,并会导致您的应用程序正常扩展。