更新:未在AWS客户端上设置Keep-alive . 我的修复是

var aws = require('aws-sdk');
aws.config.httpOptions.agent = new https.Agent({
  keepAlive: true
});

我终于通过使用Node --prof 标志来调试它 . 然后使用node-tick-processor来分析输出(当我想检查是否使用keep-alive时它是's a packaged version of a tool distributed in the Node/V8 source code). Most of the processing time was spent in SSL processing and that' .


TL; DR当请求数小于配置的DynamoDB吞吐量时,受AWS限制 . 所有API都有请求率限制吗?


我很难找到有关AWS API速率限制的文档 .

我正在测试的应用程序每秒向DynamoDB发出大约80个请求 . 这是PUT和GET的混合 . 我的DynamoDB表配置了吞吐量:250次读取/ 250次写入 . 在表CloudWatch指标中,读取在24处达到峰值,在测试期间读取在59处 .

这是我的响应时间的示例 . 首先,亚秒响应时间 .

2015-10-07T15:28:55.422Z 200 in 20 milliseconds in request to dynamodb.us-east-1.amazonaws.com
2015-10-07T15:28:55.423Z 200 in 22 milliseconds in request to dynamodb.us-east-1.amazonaws.com

更长,但很好......

2015-10-07T15:29:33.907Z 200 in 244 milliseconds in request to dynamodb.us-east-1.amazonaws.com
2015-10-07T15:29:33.910Z 200 in 186 milliseconds in request to dynamodb.us-east-1.amazonaws.com

请求堆积如山......

2015-10-07T15:32:41.103Z 200 in 1349 milliseconds in request to dynamodb.us-east-1.amazonaws.com
2015-10-07T15:32:41.104Z 200 in 1181 milliseconds in request to dynamodb.us-east-1.amazonaws.com

...没有...

2015-10-07T15:41:09.425Z 200 in 6596 milliseconds in request to dynamodb.us-east-1.amazonaws.com
2015-10-07T15:41:09.428Z 200 in 5902 milliseconds in request to dynamodb.us-east-1.amazonaws.com

我去喝茶了......

2015-10-07T15:44:26.463Z 200 in 13900 milliseconds in request to dynamodb.us-east-1.amazonaws.com
2015-10-07T15:44:26.464Z 200 in 12912 milliseconds in request to dynamodb.us-east-1.amazonaws.com

无论如何,我停止了测试,但这是一个Node.js应用程序,因此一堆套接字保持打开状态,等待我对AWS的请求完成 . 我的响应时间> 60秒 .

我的DynamoDB吞吐量没有't used much, so I assume that the limit is in API requests but I can't找到它的任何信息 . 有趣的是,日志条目的 200 部分是来自AWS的响应代码,我通过hacking a bit of the SDK获得了该代码 . 我认为AWS应该返回429s - 他们所有的SDK都实现了指数退避 .

无论如何 - 我假设我可以根据配置的吞吐量向DynamoDB发出尽可能多的请求 . 是对的吗? ...或者是什么?