basit bir senaryo için küçük bir test yazdı:Redis/RabbitMQ - - Yayınlama/Performanslar
Bir yayıncı ve bir abone
Yayınevi 1000000 mesajlar
Abone 1000000 mesajları almak göndermek
İlk test RabbitMQ, fanout Değişim, RabbitMq düğüm türü Ram: 320 saniye
Redis ile ikinci test, temel p ub/Sub: 24 saniye
Bir şey mi eksik? Neden böyle bir fark var? Bu bir yapılandırma sorunu mu yoksa bir şey mi?
İlk senaryo: abone için bir node.js işlemi, biri yayıncı için, her biri, amqp düğümü modülü ile rabbitmq'e bir bağlantı. İkinci senaryo: abone için bir tane, bir yayıncı için bir node.js işlemi, her birinin bir redis için bir bağlantısı var.
Herhangi bir yardım anlamak için bir yardımcıdır ... Gerekirse kodu paylaşabilirim.
Tüm bunlara oldukça yeni yaşıyorum. İhtiyacım olan yüksek performans pub/alt mesajlaşma sistemidir. Kümeleme yeteneklerine sahip olmak isterim.
benim Testi yapmak için, ben sadece RabbitMQ sunucusu (varsayılan yapılandırma) başlatmak ve i için aşağıdaki
Publisher.js
var sys = require('sys');
var amqp = require('amqp');
var nb_messages = process.argv[2];
var connection = amqp.createConnection({url: 'amqp://guest:[email protected]:5672'});
connection.addListener('ready', function() {
exchangeName = 'myexchange';
var start = end = null;
var exchange = connection.exchange(exchangeName, {type: 'fanout'}, function(exchange){
start = (new Date()).getTime();
for(i=1; i <= nb_messages; i++){
if (i%1000 == 0){
console.log("x");
}
exchange.publish("", "hello");
}
end = (new Date()).getTime();
console.log("Publishing duration: "+((end-start)/1000)+" sec");
process.exit(0);
});
});
Subscriber.js
var sys = require('sys');
var amqp = require('amqp');
var nb_messages = process.argv[2];
var connection = amqp.createConnection({url: 'amqp://guest:[email protected]:5672'});
connection.addListener('ready', function() {
exchangeName = 'myexchange';
queueName = 'myqueue'+Math.random();
var queue = connection.queue(queueName, function (queue) {
queue.bind(exchangeName, "");
queue.start = false;
queue.nb_messages = 0;
queue.subscribe(function (message) {
if (!queue.start){
queue.start = (new Date()).getTime();
}
queue.nb_messages++;
if (queue.nb_messages % 1000 == 0){
console.log('+');
}
if (queue.nb_messages >= nb_messages){
queue.end = (new Date()).getTime();
console.log("Ending at "+queue.end);
console.log("Receive duration: "+((queue.end - queue.start)/1000));
process.exit(0);
}
});
});
});
Buna bir cevap buldunuz mu? –