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 различаются с точки зрения настройки приложения.
ZMQ pubsub изначально подключен напрямую, т.е. не посредник.
Вы можете создать экземпляр среднего уровня, такой как устройство пересылкиДля публикации в 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.
Вот как бы я решил. Сделайте минимальные тестовые случаи, используя каждый продукт. Посмотрите, что легче построить и лучше работает. Нажмите каждый тестовый пример немного дальше, а затем отбросьте одну строку как слишком большую работу.