2015-01-08 9 views
5

ABD-Doğu'da, diğer bölgelerdeki üreticilerle (İrlanda, Sydney vb.) Bir RabbitMQ düğümü kullandığımız bir durum var. Diğer bölgelerden sıraya girerken büyük performans isabetleri görüyoruz. Sydney -> ABD-Doğu sıra bir mesaj kuyruğuna 1, Sydney -> Sydney sıraya 50 ms'dir. Kanal oluşturmak ve kuyruğu ilan etmek için çok zaman harcanmış gibi görünüyor.RabbitMQ coğrafi mesafe boyunca gecikme sorunları

Performansı iyileştirmek için hangi seçeneklere sahibiz? Her bölgede düğümlü bir çeşit RabbitMQ kümesine bakabilir miyiz? Bu bize yardımcı olur mu? Eğer Federasyonu veya Kürek bakmak gerekir bu kullanım durumları için

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

Sert soruya, sen kürek eklentisi ile denedin mi:

Bu sayfa RabbitMQ sunduğu dağıtılan seçeneklerinin her birinin olumlu ve olumsuz yanlarını açıklar? Birçok yol vardır, örneğin brokerler ile arabellek toplu arasında köprü olarak yalnızca bir sıra oluşturabilir ve göndermek zorunda olduğunuz baytları azaltmak için iletileri sıkıştırabilirsiniz. – Gabriele

+1

Bir kanal oluşturmanın bayt seviyesi ayrıntılarını biliyorum. RMQ'nun sahnelerin ardında bir kuyruk oluşturma sürecinde ne olduğunu bilmediğim halde, istemciden herhangi bir girdinin gerekli olduğuna inanmıyorum. Bu yüzden bölgeler arası bağlantılarınızla başka bir şeylerin devam ettiği sonucuna varmalıyım. Bir performans sorunu yaratmak için bu süreçte neredeyse yeterli veri değişimi yoktur. – theMayer

cevap