2015-01-08 8 views
5

Abbiamo una situazione in cui abbiamo un singolo nodo RabbitMQ in USA-Est, con produttori in altre zone (Irlanda, Sydney ecc.). Stiamo riscontrando enormi risultati in termini di prestazioni durante l'accodamento da altre zone. Sydney -> La coda USA-Est è 1s per accodare un messaggio, mentre la coda Sydney -> Sydney è 50ms. Sembra che si impieghi molto tempo per creare il canale e dichiarare la coda.Problemi di latenza RabbitMQ attraverso la distanza geografica

Quali opzioni abbiamo per migliorare le prestazioni? Potremmo guardare una sorta di cluster RabbitMQ distribuito, con un nodo in ogni regione? Ci aiuterebbe?

Ecco il codice che stiamo usando a prova:

var queueConnection = amqp.connect("OUR amqp servers in each region") 
var queueName = "test-queue" 

var queueMessage = function(message) { 
    return queueConnection.then(function(conn) { 
    return conn.createChannel() 
    }).then(function(ch) { 
    var queue = ch.assertQueue(queueName, { durable: false }); 
    return queue.then(function() { 
     ch.sendToQueue(queueName, new Buffer(JSON.stringify(message)), { deliveryMode: true }); 
     return ch.close() 
    }); 
    }) 
}; 

Promise.map(_.range(0, 10), function(item) { 
    var timedQueueMessage = timely.promise(queueMessage) 
    return timedQueueMessage({ name: "Dom" }).then(function(res) { 
    console.log("Completed in " + timedQueueMessage.time + "ms") 
    }) 
}, { concurrency: 10 }).done(process.exit) 
+0

Domanda difficile, Avete provato con il plug-in pala? Ci sono molti modi, ad esempio è possibile creare solo una coda come ponte tra i broker e il buffer-aggregato e comprimere i messaggi per ridurre i byte che si devono inviare. – Gabriele

+1

Ho familiarità con i dettagli del livello di byte della creazione di un canale. Anche se non ho familiarità con ciò che RMQ fa nel processo di creazione di una coda dietro le quinte, non credo che sia richiesto alcun input dal client. Pertanto, devo concludere che sta succedendo qualcos'altro con le vostre connessioni interregionali. Non ci sono abbastanza dati scambiati in questo processo per creare un problema di prestazioni. – theMayer

risposta

1

Per questi casi di utilizzo che si dovrebbe guardare Federazione o pala.

Questa pagina spiega i pro ei contro di ciascuna delle opzioni distribuite offerte da RabbitMQ: http://www.rabbitmq.com/distributed.html

Problemi correlati