我有一个 GAE 项目,与 App Engine 队列(以前的“推送队列”)连接,它应该一次处理多个任务(目标是每个运行实例约 30 个任务)。不知何故,我面临着一个10 * [COUNT OF RUNNING INSTANCES]
我无法超越的硬性限制。由于我尝试了几种不同的设置和方法,我希望你们能对此有所了解。
TL;博士
用于长时间运行任务的 GAE / 队列设置,使用 PHP 和 Symfony 编写,使用后端实例(必需),面临每个实例仅 10 个运行任务的硬限制。有什么提示吗?
用例
我最初的用例涉及从 API 获取数据、处理并将其存储到 BigQuery 的任务处理程序。平均而言,单个任务处理程序每分钟处理约 1.500 个请求。对于规模,我希望有 10 个正在运行的实例(实例类B4_1G
)和大约 300 个并行运行的任务)。
我在 Github 上创建了一个小型存储库,在这里我简化了我的用例。为此,我从谷歌本身获取了简单的示例代码。请阅读分步指南,了解如何重现我的问题。
依赖项
这些任务运行时间相当长(每个约 15 分钟)。由于 GAE前端实例在 10 分钟内被削减的限制,我正在使用后端实例(也是为了获得更多内存容量)。
问题
一般来说,我无法运行比提到的更多的任务10 * [COUNT OF RUNNING INSTANCES]
。我尝试了很多(见下文)。
在生产环境中运行我的原始代码,每个实例的内存使用率大约为 30%(如果使用B4
)。换句话说:说到资源,一个实例将能够处理更多的任务,但它会留下多达 70% 的 RAM 未使用。
只是“某事”将我限制在 10 的硬限制。我不知道这个限制可能在哪里。也许它只是某处的一个小标志。:-(
我已经尝试过的
显然,所有这些都没有超过限制的效果。
- 在一个全新的项目(甚至帐户)中尝试了我的示例代码
- 联系了 Google Cloud 支持(大量沟通,没有真正的解决方案)
- 他们不相信这样的硬性限制
- 最可行的信息是:需要
max_concurrent_requests
为 GAE 本身定义。 basic_scaling
但这对于后端实例来说是不可能的。- 即使使用前端实例,我也无法超过限制。
- 尝试运行更多实例和/或更大的实例类型(最多
B4_1G
) - 尝试过的前端实例(不是我的生产用例,但只是作为测试)
entrypoint
使用和--workers
标志配置 GAE (请参阅文档)max_concurrent_requests: 15
尝试使用 GAE排队--workers=15
仅 1 个正在运行的实例
- 尝试了 php72 和 php73 环境
- 根据文档,玩弄了
app.yaml
and的所有参数queue.yaml
由于我真的没有想法,我很欣赏任何类型的提示。也许,您甚至可以在您身边运行和测试我的示例代码。
非常感谢您提前。