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

时间:2016-07-18 18:39:41

标签: google-app-engine google-cloud-datastore app-engine-ndb google-app-engine-python

我的队列任务使用select AT.ACCOUNTID, AT.TAXID, AT.COUNTRY from account_table at where AT.COUNTRY = 'USA' and (AT.TAXID IS NULL or TRANSLATE(AT.TAXID, '012345678' , '999999999' ) NOT IN ('999999999', '99- 9999999', '999-99-9999')) 从外部API获取一些数据并将其保存到ndb数据存储区实体。

这总共需要15秒。

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

可能导致此问题的原因是什么?

后台任务的概念不会影响面向请求的用户。

我偶然发现here,但我的任务需要超过1秒才能完成。我不知道这对我有什么帮助。

1 个答案:

答案 0 :(得分:3)

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

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