Node.js DynamoDB REST API可能的写入吞吐量

Node.js DynamoDB REST API可能的写入吞吐量,node.js,rest,amazon-ec2,amazon-web-services,amazon-dynamodb,Node.js,Rest,Amazon Ec2,Amazon Web Services,Amazon Dynamodb,我目前正在使用NodeJS和DynamoDB运行一些性能测试。 我特别感兴趣的是一个NodeJS进程可能的写吞吐量,它将项目持久化到DynamoDB 我在EC2M1.medium实例上运行了测试。 要访问DynamoDB,我使用dynamo NodeJS模块。 在测试期间,我为DynamoDB表提供了1000个写容量单元。 我保存了大约700字节大小的项目 这些测试的结果是,该系统的最大写入吞吐量约为300项/秒。在这个吞吐量下,EC2实例的虚拟CPU接近100% 记住,调用API基本上就是调用

我目前正在使用NodeJS和DynamoDB运行一些性能测试。 我特别感兴趣的是一个NodeJS进程可能的写吞吐量,它将项目持久化到DynamoDB

我在EC2M1.medium实例上运行了测试。 要访问DynamoDB,我使用dynamo NodeJS模块。 在测试期间,我为DynamoDB表提供了1000个写容量单元。 我保存了大约700字节大小的项目

这些测试的结果是,该系统的最大写入吞吐量约为300项/秒。在这个吞吐量下,EC2实例的虚拟CPU接近100%

记住,调用API基本上就是调用HTTP REST服务,与本文相比,结果看起来有点现实:

有人能确认我的测试结果吗?或者你是否经历过不同的测试结果? 有人测试过AWS DynamoDB JAVA或C#SDK吗?你在那里有什么表演


更新:300项/秒已启用。如果没有这一限制,则限制为每秒780个项目,这将推送到DynamoDB REST API。

似乎您的瓶颈是m1.medium实例。由于没有太多地使用node.js,我不能说另一个选项是否会表现得更好,但从我的观点来看,node.js是您可以使用的更轻量级的选项之一。请记住,对像DynamoDB这样的AWS服务的REST调用不仅仅是简单的REST调用,它们需要为每个请求创建一个签名,这需要一些基本的散列和加密,这可能是CPU的行为方式的原因。对一个小字符串进行散列可能看起来不是很多,但是当你必须每秒执行300次时,它很容易杀死CPU


我的建议是使用另一种实例类型,例如,c1.medium将比m1.medium提供150%以上的能力。除此之外,您还可以尝试用python或php编写一个简单的测试脚本,以查看结果与node.js的比较

当评测处于活动状态(即web控制台处于打开状态)时,Nodetime会有一些开销,但不会太高。如果适用的话,你可以发布或发送给我你正在做基准测试的脚本吗。我真的很想了解是什么导致了这种开销。非常感谢。(我是Nodetime的创建者)。您可以将其发送到支持电子邮件,可以在footer.BTW的nodetime.com上找到,我建议在执行基准测试时暂停nodetime的profiler。在基准测试之后,您仍然可以在web控制台中看到度量,因为度量总是聚合和发送的。所以基本上,在调用profile()之后调用nodetime.pause(),在完成基准测试之前,不要打开nodetime.com上的web控制台。