Amazon web services 如何从AWS DynamoDB获得低于10毫秒的响应时间?

Amazon web services 如何从AWS DynamoDB获得低于10毫秒的响应时间?,amazon-web-services,amazon-dynamodb,Amazon Web Services,Amazon Dynamodb,在DynamoDB文档和互联网上的许多地方,我看到了一位数的ms响应时间是典型的,但即使是最简单的设置,我似乎也无法实现这一点。我已经在us-west-2中配置了一个t2.micro ec2实例和一个DynamoDB表,当在ec2实例上从aws cli运行下面的命令时,我得到的响应平均约为250毫秒。从我的本地机器(丹佛)运行的相同命令平均约为700毫秒 aws dynamodb get-item --table-name my-table --key file://key.json 在AWS

在DynamoDB文档和互联网上的许多地方,我看到了一位数的ms响应时间是典型的,但即使是最简单的设置,我似乎也无法实现这一点。我已经在us-west-2中配置了一个t2.micro ec2实例和一个DynamoDB表,当在ec2实例上从aws cli运行下面的命令时,我得到的响应平均约为250毫秒。从我的本地机器(丹佛)运行的相同命令平均约为700毫秒

aws dynamodb get-item --table-name my-table --key file://key.json

在AWS控制台中查看CloudWatch指标时,它表示平均get延迟为12毫秒。如果有人能告诉我我做错了什么,或者告诉我信息的方向,我可以自己解决这个问题,我会非常感激。提前感谢。

在进行REST API调用时,您将看到很多因素会影响延迟。DynamoDB可以提供以一位数毫秒为单位的延迟,但是有一些注意事项和您可以做的事情来最小化延迟

首先要考虑的是距离和光速。当您使用位于同一区域的EC2实例时,希望在访问DynamoDB时获得最佳延迟。从笔记本电脑或其他数据中心访问DynamoDB时,通常会出现较高的延迟。请注意,每个区域还具有多个数据中心

基于您使用的硬件、网络连接和编程语言,客户端也会产生性能成本。当您谈论毫秒延迟时,计算机上的处理时间可能会有所不同

延迟的另一个可能来源是TLS握手。建立加密连接需要多次往返和双方的计算才能建立加密通道。但是,只要您对连接使用Keep-Alive,您将只为第一次查询支付此间接费用。连续查询将大大加快速度,因为它们不会产生这种初始惩罚。不幸的是,AWS CLI无法保持请求之间的连接,但大多数语言的AWS SDK将自动为您管理此连接



另一个重要的考虑因素是DynamoDB在web控制台中报告的延迟是平均值。虽然DynamoDB确实提供了可靠的平均低两位数延迟,但最大延迟通常在数百毫秒甚至更高。通过在CloudWatch中查看最大延迟可以看到这一点。

您看到的响应时间主要与aws cli的冷启动时间有关。运行get item命令时,cli必须加载到内存中,获取临时凭据(如果在t2.micro实例上运行时使用ec2 iam角色),并建立到DynamoDB服务的安全连接。完成所有这些之后,它执行get item请求,最后将结果打印到stdout。您的命令还引入了从文件系统读取key.json文件的需求,这增加了额外的开销

我在t2.micro实例上运行的经验是,aws cli在启动时大约有200毫秒的开销,这似乎与您看到的一致


对于长时间运行的程序来说,这不会是一个问题,因为它们只在开始时支付类似的间接费用。我在t2.micro实例上运行了许多web服务,这些实例与DynamoDB一起工作,DynamoDB的响应时间始终低于20ms

他们最近发布了DAX(预览版)。
Amazon DynamoDB Accelerator(DAX)是一款完全受管理、高可用的内存缓存,用于DynamoDB,即使每秒数百万个请求,其性能也可提高10倍,从毫秒到微秒。有关详细信息,请参阅

我在t2.micro上创建了一个restify.js服务器,它的运行完全符合AWS文档和您在这里所说的内容。谢谢!继续在vogels上的伟大工作,到目前为止我很喜欢它!感谢您的回复,这对ryan的回答非常有帮助。从角色加载AWS凭据的开销是ryan在回答中没有提到的另一个启动成本。底线是在您的请求以全速执行之前有一段预热期。DAX现在通常可用。Cloudwatch指标显示DDB本身处理您的查询所花费的时间。那是12毫秒。您在机器端看到的250或700毫秒可能是由于网络旅行、服务发现、凭证匹配等原因造成的。