从 EC2 实例查询 DynamoDB 时遇到高延迟

Posted

技术标签:

【中文标题】从 EC2 实例查询 DynamoDB 时遇到高延迟【英文标题】:Experiencing high latency when querying DynamoDB from an EC2 instance 【发布时间】:2020-03-26 13:34:17 【问题描述】:

我有一个基本的 NodeJS Web 应用程序,它只扫描大约 10 个项目的 DynamoDB 表。当我在我的机器上本地运行应用程序时,操作时间不到 1 秒。

但是,当我在 EC2 实例上部署应用程序时,相同的操作需要将近 5 秒。 EC2 实例(t2.micro) 和 DynamoDB 表位于同一区域。我还为 DynamoDB 启用了 VPC Endpoint Gateway 服务,但延迟保持不变。

这是测试性能的 curl 请求:

curl -X POST http://localhost:9000/login -H 'Content-Type: application/json' -d ' "email": "xyz@gmail.com", "password": "admin", "type": "talent" ' -s -o /dev/null -w "%time_starttransfer\n" 0.394470

curl -X POST http://EC2_IP_ADDRESS:9000/login -H 'Content-Type: application/json' -d ' "email": "xyz@gmail.com", "password": "admin", "type": "talent" ' -s -o /dev/null -w "%time_starttransfer\n" 5.207561

请帮助我了解导致这些延迟的原因以及如何在从 EC2 实例查询 DynamoDB 时实现低延迟。

【问题讨论】:

更新:之前我在 Docker 容器中运行应用程序。我在裸机 Ubuntu AMI 上运行应用程序,延迟立即下降。因此,问题在于在容器中运行应用程序时。我尝试将基础 Docker 映像从 8 更改为 10,但问题仍然存在。请帮助我了解问题可能出在哪里。 【参考方案1】:

你需要找出数据库和网络所花费的时间。为此,您可以检查以下内容

    直接在 DynamoDB 上运行查询以检查数据库占用的时间。检查查询本身是否

    检查您在 EC2 服务器上执行代码与您的本地计算机之间的查询的周转时间差异是否与有或没有 VPC 端点相同?

【讨论】:

嘿@Juned,感谢您的回复。回答您的问题:1. 来自 DynamoDB 控制台的查询只需要几毫秒 2. VPC Endpoint 没有任何区别【参考方案2】:

如果您考虑网络跃点,延长的延迟很可能不是由 DynamoDB 引起的

    EC2 => EC2 => dynamodb (curl http://localhost/...) 您的桌面 => 互联网 => EC2 => dynamodb (curl http://EC2_IP/...)

如果您只是绕过 dynamodb 调用,例如,您可能会遇到类似的高延迟。注释掉进行 db 调用并返回模拟响应的代码 - 我怀疑你会得到与 #2 类似的延迟

【讨论】:

嗨 ubi,谢谢您的回复。我希望您已经看到我发布的问题更新。我将再次发布:更新:之前我在 Docker 容器中运行应用程序。我在裸机 Ubuntu AMI 上运行应用程序,延迟立即下降。因此,问题在于在容器中运行应用程序时。我尝试将基础 Docker 映像从 8 更改为 10,但问题仍然存在。请帮助我了解问题可能出在哪里。 有趣.. 假设容器和 EC2 在同一个 VPC/区域上。是第一个请求还是对容器的所有请求都需要大约 5 秒?

以上是关于从 EC2 实例查询 DynamoDB 时遇到高延迟的主要内容,如果未能解决你的问题,请参考以下文章

从实例内查询 EC2 标签

MongoDB到DynamoDB

从 JAVA API 获取 Amazon EC2 实例的公共 DNS

AWS账户之间的克隆/传输EC2实例(AMI)

dynamodb 查询我试图使用 laravel 从 dynamodb 获取一些数据

查询不会通过 GraphQL 从 DynamoDB 返回某些项目