ZMQ против Redis для шаблона паб-саб

Redis поддерживает Pub -Sub
zmq также поддерживает pub-sub через брокер сообщений

Каковы будут архитектурные преимущества и недостатки выбора между ними?
Я нацеливаюсь на моменты, которые выходят за рамки очевидного конкретного теста производительности, который должен быть сделан (вот хороший пример).

Предположим использование языка высокого уровня, такого как Python.

4 ответа

Я работал с ZeroMQ и Redis с Python. Я бы сказал, что ZeroMQ более надежен, он предлагает очень простую балансировку нагрузки, а также больше, чем pub-sub, например, ответ на запрос. Но если вы только после pub-sub, redis намного проще.

В случае сбоя или прекращения работы сервера Redis все клиенты также перестают работать, а с ZeroMQ клиенты работают, даже если сервер отсутствует.

Оба сервиса доступны с любым языком программирования, Ruby, Python, C, C++ и более.

Короче, redis намного проще, очень надежен. ZeroMQ чрезвычайно надежен, но более сложен.

Если бы я делал только паб-саб, я бы выбрал redis, иначе я бы выбрал ZeroMQ. Если бы я предвидел огромные нагрузки, я бы выбрал ZeroMQ

ZeroMq Плюсы / минусы

  • Паб / подчиненные могут подключаться и отключаться независимо; сообщения сохраняются в буферах на основе настроек HWM, автоматически отправляются при доступности однорангового узла (сохранение и пересылка)
  • Если одноранговый узел терпит неудачу, буферизованные сообщения будут потеряны
  • Подписки на разделы поддерживают сопоставление только с префиксом публикации / подписки; NEWS совпадения по подписке NEWS* Сообщения

Redis Плюсы / минусы

  • Снимки AOF на диск сохраняются сообщения в случае сбоя redis
  • Клиенты Pub/ Sub зависят от Redis для подключения
  • Подстановочный знак для выборочных подписок, например news.* поддержанный

Я исследовал это сам, так как мне нужно было решить, использовать ли Redis pubsub или ZMQ pubsub для коммуникационного уровня для распределенных систем. Я думаю, что Redis и ZMQ различаются с точки зрения настройки приложения.

  1. ZMQ pubsub изначально подключен напрямую, т.е. не посредник.
    Вы можете создать экземпляр среднего уровня, такой как устройство пересылки

  2. Для публикации в Redis подписчик и издатель должны подключиться к Redis.

Отсутствие посредника в ZMQ означает, что подписчик должен каким-то образом знать, чтобы подключиться к издателю, чтобы получить сообщение. В моей системе, где приложения порождают издателей, которым необходимо отправлять информацию подписчикам, невозможно сделать это без устройства пересылки, к которому подписчики подключаются до запуска моего приложения.

Задержка имеет значение в моей системе, так как я хочу, чтобы удаленные устройства работали как можно быстрее.

Zmq (direct pubsub)
avg: 0.000235867897669
max: 0.0337719917297
min: 0.000141143798828

Zmq (w/ forwarder)
Avg: 0.00237249334653
max: 0.00536799430847
min: 0.000249862670898

Redis (8gb ram)
avg: 0.000687216520309
max: 0.0483138561249
min: 0.000313997268677

Redis (32gb ram)
avg: 0.000272458394368
max: 0.00277805328369
min: 0.000216960906982
  • если ваше приложение находится на стороне подписчика, где есть демон издателя, от которого вы хотите получить информацию, то я бы выбрал ZMQ, потому что вы можете напрямую подключиться к издателю.
  • если ваше приложение на стороне издателя, то я бы пошел в паб Subs Redis, потому что подписчики уже подключены к прослушиванию Redis.

Вот как бы я решил. Сделайте минимальные тестовые случаи, используя каждый продукт. Посмотрите, что легче построить и лучше работает. Нажмите каждый тестовый пример немного дальше, а затем отбросьте одну строку как слишком большую работу.

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