Redis / RabbitMQ - Pub / Sub - Performances

Я написал небольшой тест для простого сценария:

Один издатель и один подписчик

Издатель отправляет 1000000 сообщений

Подписчик получает 1000000 сообщений

Первый тест с RabbitMQ, Fanout Exchange, тип узла RabbitMq Ram: 320 секунд

Второй тест с Redis, базовая версия pub / Sub: 24 секунды

Я что-то упускаю? Почему такая разница? Это проблема конфигурации или что-то в этом роде?

Первый сценарий: один процесс node.js для подписчика, один для издателя, каждый, одно соединение с rabbitmq с модулем узла amqp. Второй сценарий: один узел .js процесс для подписчика, один для издателя, каждый получил одно подключение к redis.

Любая помощь приветствуется ... Я могу поделиться кодом, если потребуется.

Я новичок во всем этом. Что мне нужно, так это высокопроизводительная система обмена сообщениями между публикациями и подписками. Я бы хотел иметь возможности кластеризации.

Чтобы запустить свой тест, я просто запускаю сервер rabbitMq (конфигурация по умолчанию) и использую следующий

Publisher.js

var sys  = require('sys');
var amqp = require('amqp');
var nb_messages = process.argv[2];
var connection  = amqp.createConnection({url: 'amqp://guest:guest@localhost: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:guest@localhost: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);
            }
        });
    });
});
9
задан Ovrz 28 September 2011 в 11:55
поделиться