1

我有一个 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.yamland的所有参数queue.yaml

由于我真的没有想法,我很欣赏任何类型的提示。也许,您甚至可以在您身边运行和测试我的示例代码。

非常感谢您提前。

4

0 回答 0