问题描述
我有一个与App Engine队列(以前称为“推送队列”)连接的GAE项目,该项目应一次处理多个任务(每个运行实例的目标是约30个任务)。不知何故,我面临着10 * [COUNT OF RUNNING INSTANCES]
的硬极限,无法超越。由于我尝试了几种不同的设置和方法,所以希望你们能对此有所了解。
TL; DR
GAE /长时间运行任务的队列设置,使用Symfony用PHP编写,使用后端实例(必需),每个实例仅面临10个正在运行的任务的硬限制。有提示吗?
用例
我最初的用例涉及任务处理程序,该任务处理程序从API提取数据,处理并将其存储到BigQuery。平均而言,单个任务处理程序每分钟执行约1.500个请求。对于规模,我希望有10个正在运行的实例(实例类B4_1G
)与并行的300多个运行任务。
我创建了一个小型存储库,可以在Github上使用here,在此我简化了用例。为此,我从Google本身获取了简单的示例代码。 请阅读有关how to reproduce我的问题的分步指南。
依赖项
任务运行时间很长(每个〜15分钟)。由于GAE Frontend 实例在10分钟内被剪切的限制,我使用了 Backend实例(也是为了获得更多的内存容量)。
问题
通常来说,我无法运行比提到的10 * [COUNT OF RUNNING INSTANCES]
更多的任务。我做了很多尝试(见下文)。
在生产环境中运行原始代码,每个实例的内存使用量约为30%(如果使用B4
)。换句话说:说到资源,一个实例将能够处理更多任务,但它最多可保留70%的RAM。
“某事”将我限制在这个硬限制10。我不知道这个限制可能在哪里。也许只是某个地方的一个小标志。 :-(
我已经尝试过的东西
所有这些显然都没有克服限制的影响。
- 在全新项目(甚至帐户)中试用了示例代码
- 已与Google Cloud支持人员联系(进行了大量沟通,没有真正的解决方案)
- 他们不相信如此严格的限制
- 最可行的信息是:需要为GAE本身定义
max_concurrent_requests
。 - 但这对于
basic_scaling
来说是不可能的,因此对于后端实例来说是不可能的。 - 即使有 Frontend 实例,我也无法超过限制。
- 尝试运行更多实例和/或更大实例类型(最多
B4_1G
) - 尝试了前端实例(不是我的生产用例,而是作为测试用例)
- 使用
entrypoint
和--workers
标志配置的GAE(请参阅docs)- 仅对1个正在运行的实例尝试了具有GAE
max_concurrent_requests: 15
的队列--workers=15
- 仅对1个正在运行的实例尝试了具有GAE
- 尝试了PHP72和PHP73环境
- 根据文档,使用
app.yaml
和queue.yaml
的所有参数
由于我真的很烦恼,所以我很乐意看到任何类型的提示。也许,您甚至可以一边运行并测试我的示例代码。
非常感谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)