gpt4 book ai didi

performance - Redis/RabbitMQ - 发布/订阅 - 性能

转载 作者:IT王子 更新时间:2023-10-29 05:55:39 25 4
gpt4 key购买 nike

我为一个简单的场景写了一个小测试:

一个发布者和一个订阅者

发布者发送 1000000 条消息

订阅者收到 1000000 条消息

首先使用 RabbitMQ 进行测试,fanout Exchange,RabbitMq 节点类型 Ram:320 秒

Redis 的第二次测试,基本的发布/订阅:24 秒

我错过了什么吗?为什么会有这样的差异?这是配置问题还是什么?

第一种情况:一个 node.js 进程用于订阅者,一个用于发布者,每一个,一个连接到带有 amqp 节点模块的 rabbitmq。第二种情况:订阅者一个 node.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);
});
});

订阅者.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);
}
});
});
});

最佳答案

检查以确保:

  • 您的 RabbitMQ 队列未配置为持久队列(因为这需要为每条消息写入磁盘)
  • 订阅者端的预取计数为 0
  • 您没有使用交易或出版商确认

还有其他可以调整的东西,但在不知道测试细节的情况下很难猜测。我只想确保您是在比较“同类”。

在牺牲各种保证(如交付保证等)的情况下,大多数消息传递产品都可以尽可能快地运行,因此请确保您首先了解应用程序的要求。如果您唯一的要求是将数据从 A 点铲到 B 点,并且您可以容忍丢失一些消息,那么几乎所有消息系统都可以做到这一点,而且做得很好。更难的部分是弄清楚除了原始速度之外您还需要什么,并进行调整以满足这些要求。

关于performance - Redis/RabbitMQ - 发布/订阅 - 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7505264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com