Простая очередь задач с использованием Google Cloud Platform: проблема с Google PubSub - PullRequest
0 голосов
/ 23 мая 2018

Моя задача: Я не могу открыто говорить о специфике своей задачи, но вот аналогия: каждые два часа я получаю переменное количество произносимых аудио файлов.Иногда только 10, иногда 800 или больше.Допустим, у меня есть дорогостоящая задача Python для этих файлов, например, автоматическое распознавание речи.У меня есть управляемая группа Google Intance, которая может развернуть любое количество виртуальных машин для выполнения этой задачи.

Проблема: , сейчас я использую Google PubSub.Каждые два часа тема заполняется аудио идентификаторами.Экземпляры управляемой группы могут быть развернуты в зависимости от размера очереди.Проблема в том, что только один работник получает все сообщения из подписки PubSub, а остальные не получают никаких, возможно, из-за того, что очередь не такая длинная (максимум ~ 1000 сообщений).Эта проблема сообщается в нескольких случаях в github Python Google Cloud, и неясно, является ли это целью PubSub или просто ошибкой.

Как я могу реализовать эквивалент простого бессерверного сервера?очередь задач в Python и Google Cloud, и могут ли экземпляры появляться на основе заданной метрики, например, размера очереди?Является ли это целью PubSub?

Заранее спасибо.

1 Ответ

0 голосов
/ 23 мая 2018

В App Engine вы можете создавать push-очереди и устанавливать ограничения скорости / параллелизма, а Google позаботится обо всем остальном.App Engine будет масштабироваться по мере необходимости (например, увеличивать количество экземпляров Python).

Если вы находитесь за пределами App Engine (например, GKE), клиентская библиотека pubsub Python может извлекать много сообщений одновременно.Нам было трудно это контролировать (для google-cloud-pubsub == 0.34.0), поэтому мы закончили писать небольшую настройку поверх google-cloud-pubsub, вызвав SubscriberClient.pull с установленным max_messages).API на стороне сервера pubsub придерживается max_messages.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...