AWS-SDK DynamoDB NodeJS性能不佳?

时间:2016-01-06 14:53:34

标签: node.js amazon-web-services amazon-dynamodb aws-sdk

我正在使用适用于NodeJS的AWS-SDK测试dynamoDB API。 但我有一些奇怪的行为,dynamoDB似乎反应较慢,我不明白为什么。

在AWS控制台中,我将“100”读取容量单位设置为“MyTable”

我做了一些基准测试:

对于10个呼叫,服务似乎在不到1秒的时间内响应; 100个电话(1.5秒),1000个电话(4,5秒),5000个电话(30秒)

请参阅下面的代码:

var http = require('http');
var https = require('https');
var AWS = require("aws-sdk");

var start = new Date();

http.globalAgent.maxSockets = 100000;
https.globalAgent.maxSockets = 100000;

AWS.config.update({
  accessKeyId: 'MyAccessKey',
  secretAccessKey: 'MySecretKey',
  region: 'MyRegion'
});

var dynamodbDoc = new AWS.DynamoDB.DocumentClient();

var startedDate = new Date()
console.log('Start');
for (var i = 0; i < 5000; i++) {
    getVolume("604275e8-17de-4582-bbc2-1b5eaf3b0a4c");
}   
console.log('Over ' + (new Date() - startedDate) + ' ms');

function getVolume(key) {
    var params = {
        TableName: "MyTable",
        KeyConditionExpression: "#id = :key",
        ExpressionAttributeNames: {
            "#id": "id"
        },
        ExpressionAttributeValues: {
            ":key": key
        }
    };
    var requestStarted = new Date()
    dynamodbDoc.query(params, function (err, data) {
        if (err) {
            console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        } else {
            console.log("DynamoDB : " + (new Date() - requestStarted));
        }
    });
}

使用5000次调用,“for”语句在3秒后结束,但第一个dynamoDB在30秒后响应,为什么?

提前谢谢你,

2 个答案:

答案 0 :(得分:0)

您几乎同时向DynamoDB发送5000个调用。首先,运行测试的计算机上可能存在一些CPU和网络瓶颈,导致无法执行此操作。其次,如果这确实是您打算测试的,那么您需要将DynamoDB的写入容量提高到更高的值。

如果您尝试一次只执行一次对DynamoDB的调用,则需要等待回调完成后再执行下一次调用。

答案 1 :(得分:0)

谢谢你的回答。

目前我有一个nodejs web服务器(带有restify),当我对它进行负载测试(超过1000 req / s)时,dynamodb似乎响应缓慢,超过60秒,当然还有一些请求超时。

使用我的代码,我想了解为什么dynamodb似乎很慢。 我正在寻找代码中的瓶颈。