2012-12-07 14 views
16

Wenn ich ein riesiges verteiltes System entwerfen sollte, dessen Durchsatz sollte linear mit der Anzahl der Abonnenten und der Anzahl der Kanäle im System skalieren, was wäre besser?Redis Cluster vs ZeroMQ in Pub/Sub, für horizontal skalierte verteilte Systeme

1) Redis Cluster (nur für Redis 3.0 alpha, wenn es im Cluster-Modus ist, können Sie in einem Knoten veröffentlichen und in einem anderen völlig anderen Knoten abonnieren, und die Nachrichten werden propagieren und Sie erreichen). Die Komplexität von Publish ist O (N + M), wobei N die Anzahl der abonnierten Clients und M die Anzahl der abonnierten Muster im System ist, aber wie skaliert es in einem Redis-Cluster? Ich akzeptiere fundierte Vermutungen dazu.

2) ZeroMQ seit 3.x, es serverseitige Filterung, so hat es auch einige Zeit Komplexität dort, aber ich habe nichts darüber in der Dokumentation gesehen. Wenn ich es skalieren möchte, könnte ich einfach viele Server haben, die auf beliebigen Kanälen veröffentlichen, und jeder Abonnent würde sich mit allen Servern verbinden und den gewünschten Kanal abonnieren. Das scheint nett zu sein.

Also welche davon ist besser für horizontale Skalierung eines großen Publisher-System? Was sind andere Lösungen, die ich untersuchen sollte? Denken Sie daran, ich möchte die Latenz und den Durchsatz minimieren, aber horizontal skalieren können.

Antwort

14

Sie möchten die Latenz minimieren, denke ich. Die Anzahl der Kanäle ist irrelevant. Die wichtigsten Faktoren sind die Anzahl der Publisher und die Anzahl der Abonnenten, die Nachrichtengröße, die Anzahl der Nachrichten pro Sekunde pro Publisher, die Anzahl der von jedem Abonnenten empfangenen Nachrichten in etwa. ZeroMQ kann mehrere Millionen kleine Nachrichten pro Sekunde von einem Knoten zum anderen tun; Ihr Engpass wird das Netzwerk sein, lange bevor es die Software ist. Die meisten Pubsub-Architekturen mit hohem Volumen verwenden daher etwas wie PGM Multicast, das ZeroMQ unterstützt.

+0

Gibt es Daten, die Ihren Anspruch unterstützen? Kannst du meine Frage zu deinem Anspruch lesen? http://stackoverflow.com/questions/26319304/redis-of-channels-degrading-latency-how-to-prevent-degradation – ealeon

2

In Redis, wie in ZeroMQ, wird der Engpass das Netzwerk sein. Redis kann Millionen von Nachrichten pro Sekunde erreichen, mindestens genauso viel, wenn nicht mehr als ZeroMQ.

Sie sollten wissen, dass die aktuelle Implementierung von Redis Cluster PUBLISH-Nachrichten über alle Cluster-Knoten verteilt, die den Inter-Node-Bus verwenden. Dieser Ansatz geht davon aus, dass PUBLISH auf Redis extrem günstig ist (wie in dieser issue on Github erläutert).

Es gibt jedoch einen kleinen Overhead, der die Kommunikation zwischen den Knoten betrifft. Wenn Sie diesen Wert erhöhen, wird dieser Overhead signifikanter sein. Es gibt noch eine andere Redis Cluster implementation Mir ist bekannt - bitte beachten Sie, es ist eine kommerzielle - in denen Kanäle oder Muster über Cluster-Knoten in ähnlicher Weise wie die Redis-Schlüssel verteilt sind verteilt. Zumindest sollte dies nach Ansicht des Anbieters den Overhead der Kommunikation zwischen den Knoten sparen und die Leistung erhöhen, aber ich habe es selbst nicht bewertet.