App Engine TaskQueue 任务影响面向用户的处理程序性能

App engine TaskQueue task impacting user facing handlers performance

我的队列任务使用 urlfetch 从外部 API 获取一些数据并将其保存到 ndb 数据存储实体。

这总共需要大约 15 秒。

不知何故,当任务运行时,所有其他处理程序(简单 json 响应处理程序)变得更慢。 (较慢意味着 +500 毫秒)

可能是什么原因造成的?

后台任务的想法不影响用户面临的请求。

我偶然发现了 this blogpost,但我的任务需要超过 1 秒才能完成。我看不出这对我有什么帮助。

默认情况下,您的任务由处理用户请求的相同实例执行。不管背景与否,它们共享相同的 CPU、内存和带宽。 运行 将这些任务放在不同的模块上是个好主意,这意味着不同的实例。您可以通过为任务队列指定一个目标来实现。

请注意,当当前实例的响应变慢时,自动 App Engine 调度程序通常会启动一个新实例。但是,您的情况变慢不是由标准请求量增加引起的,而是一个不寻常的请求需要更长的时间。这可以防止自动调度程序对增加的延迟做出反应。您可以切换到手动或基本计划,这使您可以更好地控制容量(实例总数)和旋转新实例的规则,但为后台任务创建不同的模块是更好的解决方案。