Обработка подписчиков pubsub для распределенных долгосрочных задач - PullRequest
0 голосов
/ 15 ноября 2018

Я оцениваю использование использования pubsub для длительных задач, таких как транскодирование видео, где конкретный транскод может занять от 2 до 10 минут.Является ли pubsub хорошим подходом для такого распределения задач?Например, скажем, у меня есть пять серверов:

- publisher1
- publisher2
- publisher3
- publisher4
- publisher5

и тема под названием «видео».Можно ли было равномерно распределить сообщения между этими пятью серверами?Как насчет того, когда серверы добавляются или удаляются?Каков будет хороший подход к этому, или pubsub не является подходящим инструментом для чего-то подобного?

1 Ответ

0 голосов
/ 15 ноября 2018

Это звучит как разумный вариант использования pubsub. В частности, если вы используете pull-подписчика, вы можете настроить параметры управления потоком так, чтобы на вашем сервере было не более одного ожидающего сообщения, и настроить максимальный период расширения ack (в java), чтобы он был разумной верхней границей вашего времени обработки. Этот API описан здесь http://googleapis.github.io/google-cloud-java/google-cloud-clients/apidocs/index.html?com/google/cloud/pubsub/v1/package-summary.html

Это должно эффективно распределять нагрузку на серверы по умолчанию, если вы используете один и тот же идентификатор подписчика для всех заданий. Если сервер добавлен и существует отставание, он получит новую запись. Если сервер удален, ему больше не будут отправляться сообщения. Если он был удален во время обработки или аварийно завершил работу, сообщение, над которым он работал, будет повторно отправлено на другой сервер.

Однако одной из проблем является то, что pubsub имеет ограничение в 10 МБ на сообщение. Вы можете вместо этого поместить сами данные в облачное хранилище Google. Облачное хранилище может публиковать местоположение файла в теме pubsub после завершения загрузки. https://cloud.google.com/storage/docs/pubsub-notifications

...