繁体   English   中英

为什么AWS SQS这么慢?

[英]Why is AWS SQS so slow?

我一直在测试发送消息和从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));
}

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

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

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

在使用队列时,您应该考虑围绕eventual consistency的概念来设计系统,这意味着您的消息最终将到达并处理,但是可能不会按您期望的顺序或顺序进行。

在队列实现(SQS,Kafka,RabbitMq等)之间,速度,排序,重试等功能将有所不同。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM