ZeroMQ: дешевы ли подписки на темы PUB/SUB?

Проблема: у меня есть несколько загрузок файлов параллельно через HTTP (получатель загрузок). Я временно храню их на локальном диске. Другой процесс (отправитель загрузок) получает уведомление о новых загрузках и выполняет специальную обработку (анализ, извлечение метаданных, загрузка на S3 и т. Д.). После завершения загрузки я хочу, чтобы отправитель уведомлял отправителя о том, что он отправил ответ со статусом (в порядке отправки или с ошибкой) удаленному загрузчику. Используя шаблон ZeroMQ PUB/SUB, что будет лучше:

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

1 ответ

Решение

Начальное уведомление:
Об использовании разных номеров версий ZeroMQ:

Хотя более свежие версии могут использовать PUB фильтрация тем в ранних версиях ZeroMQ SUB двусторонний подход, который означает, что весь (сетевой) трафик передачи сообщений идет ко всем SUB в качестве приемлемого штрафа для распределения рабочей нагрузки, которая в противном случае была бы необходима для обработки с минимально возможной задержкой PUB -боковая сторона.

Это важно в тех случаях, когда в ассоциации с открытой распределенной системой однородность версий не применяется.

В то время как вы разрабатываете архитектуру, кажется, находится на <localhost> влияние на производительность остается нераспределенным (сконцентрированным) и может привести к некоторой ограниченной настройке задержки / приоритета, если во время масштабирования этого варианта использования появляется общее узкое место.


По диапазонам масштабируемости - пределы еще больше, чем ваш вариант использования:

Как подробно представил Мартин Сустрик (соучастник ZeroMQ), ZeroMQ был спроектирован с ожидаемыми масштабами до нескольких десятков тысяч:

(cit.:) " Эффективное соответствие подписки
В ZeroMQ простые попытки используются для хранения и сопоставления PUB/SUB Подписки. Механизм подписки был рассчитан на 10000 подписок, где хорошо работает простой три. Однако есть пользователи, которые используют до 150000000 подписок. В таких случаях требуется более эффективная структура данных. "

Дальнейшие подробности о дизайне и масштабировании могут быть найдены интересными в этом посте Мартина.


Лучший следующий шаг?

Справедливый подход заключается в том, чтобы смоделировать каждый из сомнительных подходов и сравнить их с масштабом { 1,0x, 1,5x, 2,0x, 5,0x } ожидаемых статических шкал in-vitro для количественного подтверждения данных о реальных накладных расходах, производительность и задержки, относящиеся к рассматриваемым альтернативным стратегиям.

В любом случае, Вован, наслаждайтесь миром умных сигналов / сообщений в распределенной обработке.

Другие вопросы по тегам