Кластер Redis против ZeroMQ в Pub/ Sub, для горизонтально масштабируемых распределенных систем

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

1) Redis Cluster (только для Redis 3.0 alpha, если он находится в режиме кластера, вы можете публиковать в одном узле и подписываться на другом совершенно другом узле, и сообщения будут распространяться и доходить до вас). Сложность публикации -O (N+M), где N-число подписанные клиенты и M-это количество подписанных шаблонов в системе, но как он масштабируется, когда в кластере Redis ? Я принимаю обоснованные предположения на этот счет.

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

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

2 ответов


вы хотите минимизировать задержку, я думаю. Количество каналов не имеет значения. Ключевыми факторами являются количество издателей и число подписчиков, размер сообщения, количество сообщений в секунду на одного издателя, количество сообщений, полученных каждым подписчиком, грубо. ZeroMQ может сделать несколько миллионов небольших сообщений в секунду от одного узла к другому; узким местом будет сеть задолго до его программное обеспечение. Поэтому большинство высокообъемных архитектур pubsub используют что-то вроде PGM многоадресная рассылка, которую поддерживает ZeroMQ.


в Redis, как и в ZeroMQ, узким местом будет сеть. Redis может достигать миллионов сообщений в секунду, по крайней мере, столько же, если не больше, чем ZeroMQ.

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

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