更新:未在AWS客户端上设置Keep-alive。我的修复是
var aws = require('aws-sdk');
aws.config.httpOptions.agent = new https.Agent({
keepAlive: true
});
我终于通过使用Node --prof
标志来调试它。然后使用node-tick-processor分析输出(它是在Node / V8源代码中分发的工具的打包版本)。大部分处理时间花在了SSL处理上,当我想检查是否使用keep-alive时。
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吞吐量使用不多,所以我假设限制在API请求中,但我找不到任何关于它的信息。有趣的是,日志条目的200
部分是我在hacking a bit of the SDK获得的AWS响应代码。我认为AWS应该返回429s - 他们所有的SDK都实现了指数退避。
无论如何 - 我假设我可以根据配置的吞吐量向DynamoDB发出尽可能多的请求。是对的吗? ......还是什么?