如何从AWS DynamoDB获得10ms以下的响应时间?

bsc*_*lle 4 amazon-web-services amazon-dynamodb

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

aws dynamodb get-item --table-name my-table --key file://key.json
Run Code Online (Sandbox Code Playgroud)

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

小智 16

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

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

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


Jar*_*eld 8

在进行 REST API 调用时,您会看到很多延迟因素。DynamoDB 可以提供单位数毫秒的延迟,但有一些注意事项和您可以采取的措施来最大限度地减少延迟。

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

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

另一个可能的延迟来源是 TLS 握手。建立加密连接需要双方进行多次往返和计算才能建立加密通道。但是,只要您使用 Keep Alive 进行连接,您只需支付第一次查询的费用。连续查询将大大加快,因为它们不会招致这种初始惩罚。不幸的是,AWS CLI 不会让请求之间的连接保持活动状态,但适用于大多数语言的 AWS 开发工具包会自动为您管理这一点。


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


ize*_*rea 5

他们最近发布了 DAX(预览版)。\nAmazon DynamoDB Accelerator (DAX) 是一款完全托管、高度可用的 DynamoDB 内存缓存,可将性能提升高达 10 倍 \xe2\x80\x93 从毫秒到微秒 \xe2\ x80\x93,即使每秒有数百万个请求。有关更多信息,请参阅使用 DAX 进行内存加速(预览版)

\n