javascript - 为什么 AWS SQS 这么慢?

标签 javascript node.js amazon-web-services amazon-sqs

我一直在测试发送消息和从 SQS 队列接收消息所需的时间。平均需要 800-1200 毫秒,这似乎是一个荒谬的长时间。这是我的测试代码,如果我做错了什么请告诉我。

var t0;
sendMessage('hello');

function sendMessage(message){

    var params = {
        MessageBody: message,
        QueueUrl: queueUrl
    };
    t0 = now();
    sqs.sendMessage(params, function(err,data){
        if(err){
            throw err;
        } else {
            console.log("Message Send Confirmation");
        }
    });
    unbatch();
}

async function unbatch(){

    var params = {
        QueueUrl: queueUrl,
        MaxNumberOfMessages: 10
    };
    var go = true;
    while(go){
        console.log("Polling...");
        sqs.receiveMessage(params, function(err, data){
            if(data.Messages){
                console.log("Message Received");
                console.log("Total Time: " + ((now() - t0)/1000));
                go = false;
                var deleteParams = {
                    QueueUrl: queueUrl,
                    ReceiptHandle: data.Messages[0].ReceiptHandle
                };
                sqs.deleteMessage(deleteParams, function(err, data) {
                    if (err) {
                        console.log("Delete Error", err);
                    } else {
                        console.log("Message Deleted");
                    }
                });
            }
        });
        await sleep(1);
    }
}

function sleep(ms){
    return new Promise(resolve => setTimeout(resolve, ms));
}

它发送消息并立即开始尝试每毫秒接收一条消息。一旦收到,它就会计算时间。这不应该花费更少的时间吗?

最佳答案

您使用任何队列的原因不是为了性能而是为了弹性。

队列解决了许多问题,它们在断开连接的系统之间提供异步通信,它们允许您很好地扩展系统,并提供增强的弹性确保在系统发生故障时消息不会“丢失”。

当使用队列时,您应该考虑围绕最终一致性的概念设计您的系统,这意味着您的消息最终会到达那里并得到处理,但可能不会在您期望的时间甚至按您期望的顺序进行处理。

速度、排序、重试等能力因队列实现(SQS、Kafka、RabbitMq 等)而异

如果您正在寻找超高 IOPS,那么队列可能不是您想要的。

关于javascript - 为什么 AWS SQS 这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46840264/

相关文章:

javascript - Kendo UI Grid 在 ClientTemplate 中获取 Row Id

javascript - 无法读取未定义的属性 'undefined',但我确定 var 是有效的

node.js - 运行 gulp sass 时出错

amazon-web-services - 如何获取 Amazon S3 中目录的上次修改日期?

sql - AWS RDS Postgres 最大实例和表大小

javascript - 在Loadrunner中解析json响应

javascript - JQuery 无法比较当前日期

javascript - 在nestjs中为不同位置和前缀提供多个静态文件?

node.js - 在 node/express 中找不到 View

mysql - Amazon RDS MySQL/Aurora查询有时会永远挂起。我们可以对指标和方法进行分类并防止其发生的任何2美分?