Redis Cluster vs ZeroMQ в Pub/Sub, для распределенных систем с горизонтальным масштабированием - программирование
Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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