2015-01-08 9 views
5

Wir haben eine Situation, wo wir einen einzigen RabbitMQ-Knoten in US-Ost haben, mit Produzenten in anderen Zonen (Irland, Sydney usw.). Wir sehen enorme Leistungseinbußen, wenn wir aus anderen Zonen kommen. Sydney -> US-East-Warteschlange ist 1s, um eine Nachricht in die Warteschlange, während Schlange Sydney -> Sydney ist 50ms. Es scheint, dass viel Zeit damit verbracht wird, den Kanal zu erstellen und die Warteschlange zu deklarieren.RabbitMQ Latenz Probleme über geographische Entfernung

Welche Möglichkeiten haben wir, die Leistung zu verbessern? Könnten wir uns einen verteilten RabbitMQ-Cluster mit einem Knoten in jeder Region ansehen? Würde uns das helfen?

Hier ist der Code, den wir zu Test verwenden:

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

Schwierige Frage, Haben Sie versucht, mit der Schaufel Plug-in? Es gibt viele Möglichkeiten, zum Beispiel könnten Sie nur eine Warteschlange als Brücke zwischen den Brokern und dem Puffer-Aggregat erstellen und die Nachrichten komprimieren, um die zu sendenden Bytes zu reduzieren. – Gabriele

+1

Ich bin vertraut mit den Byte-Level-Details zum Erstellen eines Kanals. Obwohl mir RMQ beim Erstellen einer Warteschlange im Hintergrund nicht so vertraut ist, glaube ich nicht, dass vom Client Eingaben benötigt werden. Daher muss ich feststellen, dass mit Ihren interregionalen Verbindungen etwas anderes im Gange ist. In diesem Prozess werden nicht genug Daten ausgetauscht, um ein Leistungsproblem zu erzeugen. – theMayer

Antwort

1

Für diese Anwendungsfälle Sie bei Föderation oder Schaufel aussehen sollte.

Diese Seite erklärt die Vor- und Nachteile jeder der verteilten Optionen von RabbitMQ angeboten: http://www.rabbitmq.com/distributed.html