amazon-web-services - 哪个服务的响应时间较短?SQS 与 DynamoDB
问题描述
好吧,我之前使用 AWS Lambda 构建了一个无服务器应用程序。我目前的申请流程如下:
API Gateway (1) → Lambda Function (2) → SQS (3) → Lambda Function (4) → DynamoDB (5)
现在,有一些考虑:
- 客户端将向我的 API (1) 发送请求。
- API 事件附加了一个 lambda 函数 (2),因此它将接收 API 请求并对其进行处理。
- 现在,这里是问题的来源。处理请求后,此处理的结果必须插入 DynamoDB (5)。目前,我将它发送到SQS(3)并返回客户端发送的HTTP请求的响应。
- 尽管请求已完成并得到响应,但 SQS (3) 消息将由另一个 lambda 函数 (4) 进行事件拉取,该函数将在 DynamoDB (5) 上插入处理后的消息。
当我第一次对这个流程进行原型设计时,我有一个假设:向 SQS 发送消息比在 DynamoDB 上插入消息要快。但是,我从未做过真正的基准测试或类似的事情,所以我的假设只是武断的。
最后的问题是: 哪个动作更快?将处理后的请求发送到 SQS 还是直接发送到 DynamoDB?
考虑到,在这两种情况下,它都将在 lambda 函数 (2) 中执行,因此,从理论上讲,由于它与 AWS 本身处于相同的上下文中,它的响应时间与从其他机器请求它的响应时间不同.
如果这个问题的答案是:
- 直接在 DynamoDB 上插入更快
- 直接在 DynamoDB 上插入并不快,但差异可以忽略不计
我可以同时删除 SQS (3) 和第二个 lambda 函数 (4),从而实现更简单和更直接的流程。
但是,如果通过先发送到 SQS 有更长的响应时间,我可能会保持这个流程。
解决方案
如果您在调用之间保持连接打开,我发现 DynamoDB 响应时间低于 10 毫秒。我没有关于 SQS 延迟的数据。
关于成本,您基本上将您的 lambda 成本加倍,并添加任何 SQS 成本。如果您使用按需写入,SQS 的成本比 DynamoDB 高出约 33%。
推荐阅读
- java - 从定义它的类中访问时如何摆脱警告“访问是私有的”?
- python - imread 在某些图像上返回 None ,但在同一文件夹中的其他图像上不返回
- actions-on-google - 帐户关联完成后,Google 操作“现在没有响应”
- c# - 如何使用 Visual Studio 加载 JSON 类架构
- php - 通过 JQuery 将数据表中的复选框数据发送到 php 文件
- arm - 如何为 ARM Linux 设备交叉构建 luajit-5.1?(尝试构建 LÖVE 框架)
- kubernetes - 允许使用 oc/kubectl 端口转发的角色的名称是什么?
- c# - 从 transaction.Commit() 中检索 SQL 错误消息
- ionic3 - Cognito 和 Ionic 3 - 让用户保持登录状态
- android - Codenameone - Android平板电脑上的应用程序崩溃并从下一次打开一个空白的黑屏