2012-12-07 9 views
16

Se dovessi progettare un enorme sistema distribuito il cui throughput dovrebbe scalare linearmente con il numero di abbonati e il numero di canali nel sistema, quale sarebbe meglio?Redis Cluster vs ZeroMQ in Pub/Sub, per sistemi distribuiti scalati orizzontalmente

1) Redis Cluster (solo per Redis 3.0 alpha, se in modalità cluster, è possibile pubblicare in un nodo e iscriversi in un altro nodo completamente diverso, ei messaggi si propaga e raggiungere voi). La complessità di Publish è O (N + M), dove N è il numero di client sottoscritti e M è il numero di pattern sottoscritti nel sistema, ma come viene ridimensionato in un cluster Redis? Accetto ipotesi plausibili su questo.

2) ZeroMQ dal 3.x, fa filtraggio sul lato server, quindi ha anche una certa complessità di tempo, ma non ho visto nulla al riguardo nella documentazione. Se volessi ridimensionarlo, potrei avere un sacco di server che pubblicano su qualunque canale, e ogni sottoscrittore si collegherebbe a tutti i server e sottoscriverebbe il canale desiderato. Sembra carino.

Quindi, quale di questi è meglio per il ridimensionamento orizzontale di un enorme sistema di pubblicazione? Quali sono le altre soluzioni che dovrei esaminare? Ricorda, voglio ridurre al minimo la latenza e il throughput, ma essere in grado di scalare orizzontalmente.

risposta

14

Si vuole minimizzare la latenza, credo. Il numero di canali è irrilevante. I fattori chiave sono il numero di editori e il numero di abbonati, la dimensione dei messaggi, il numero di messaggi al secondo per editore, il numero di messaggi ricevuti da ciascun abbonato, approssimativamente. ZeroMQ può eseguire diversi milioni di piccoli messaggi al secondo da un nodo a un altro; il tuo collo di bottiglia sarà la rete molto prima che sia il software. La maggior parte delle architetture pubub ad alto volume utilizzano quindi qualcosa come il multicast PGM, che supporta ZeroMQ.

+0

Sono presenti dati a supporto del reclamo? Potresti leggere la mia domanda in merito al tuo reclamo? http://stackoverflow.com/questions/26319304/redis-of-channels-degrading-latency-how-to-prevent-degradation – ealeon

2

In Redis, come in ZeroMQ, il collo di bottiglia sarà la rete. Redis può raggiungere milioni di messaggi al secondo, almeno tanto se non più di ZeroMQ.

È necessario tenere presente che l'attuale implementazione di Redis Cluster distribuisce i messaggi PUBLISH su tutti i nodi del cluster utilizzando il bus inter-node. Questo approccio presuppone che PUBLISH sia estremamente economico su Redis (come spiegato in questo issue on Github).

Tuttavia, è presente un piccolo sovraccarico che è la comunicazione tra nodi. Man mano che aumenti questo overhead sarà più significativo. C'è un altro Redis Cluster implementation di cui sono a conoscenza - si noti che è commerciale - in cui canali o pattern sono distribuiti tra i nodi del cluster in modo simile al modo in cui vengono distribuite le chiavi di Redis. Almeno secondo il fornitore, questo dovrebbe salvare il sovraccarico delle comunicazioni tra nodi e aumentare le prestazioni, ma non l'ho ancora messo a confronto.