首页 > 解决方案 > 使用 Google Cloud Platform 的简单任务队列:Google PubSub 的问题

问题描述

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

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

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

提前致谢。

标签: python-2.7google-cloud-platformgoogle-cloud-pubsub

解决方案


在 App Engine 中,您可以创建推送队列并设置速率/并发限制,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。


推荐阅读