使用 Google Cloud Platform 的简单任务队列:Google PubSub 问题

Simple task queue using Google Cloud Platform : issue with Google PubSub

我的任务:我不能公开谈论我的任务的具体内容,但这里是一个类比:每两个小时,我会收到数量可变的语音文件.有时只有 10 个,有时有 800 个或更多。假设我要对这些文件执行昂贵的 python 任务,例如自动语音识别。我有一个 Google 实例管理组,可以部署任意数量的 VM 来执行此任务。

问题: 现在,我正在使用 Google PubSub。每两个小时,一个主题就会充满音频 ID。托管组的实例可以根据队列的大小进行部署。问题是,只有一个工作人员从 PubSub 订阅中获取所有消息,而其他人则没有收到任何消息,这可能是因为队列不是那么长(最多约 1000 条消息)。在 python Google Cloud github 中报告了几个案例,目前尚不清楚这是 PubSub 的预期目的,还是只是一个错误。

我如何在 Python 和 Google Cloud 中实现一个简单的无服务器任务队列,并且可以根据给定的指标(例如队列的大小)生成实例?这是 PubSub 的预期目的吗?

提前致谢。

在 App Engine 中,您可以创建推送队列并设置 rate/concurrency 限制,Google 将为您处理剩下的事情。 App Engine 将根据需要扩展(例如增加 Python 个实例)。

如果您在 App Engine 之外(例如 GKE),pubsub Python 客户端库可能会同时提取许多消息。我们也很难控制它(对于 google-cloud-pubsub==0.34.0)所以我们最终在 google-cloud-pubsub 调用 SubscriberClient.pull 设置 max_messages)。服务器端 pubsub API 确实遵守 max_messages。