哪个服务的响应时间更短? SQS 与 DynamoDB

Which service has a lower response time? SQS vs DynamoDB

好吧,我之前使用 AWS Lambda 构建了一个无服务器应用程序。我目前的申请流程如下:

API Gateway (1) → Lambda Function (2) → SQS (3) → Lambda Function (4) → DynamoDB (5)

现在,有一些注意事项:

  1. 客户端要向我的API发送请求(1)。
  2. 有一个 lambda 函数 (2) 附加到 API 事件,所以它将接收 API 请求并处理它。
  3. 现在,问题来了。处理请求后,此处理的结果必须插入 DynamoDB (5)。目前,我将它发送到 SQS (3) 和 return 客户端发送的 HTTP 请求的响应。
  4. 虽然请求已完成并得到响应,但 SQS (3) 消息将由另一个 lambda 函数 (4) 进行事件拉取,该函数将在 DynamoDB (5) 上插入已处理的消息。

当我第一次设计这个流程的原型时,我有一个假设:向 SQS 发送消息比在 DynamoDB 上插入消息要快。但是,我从来没有做过真正的基准测试,也没有做过类似的事情,所以我的推测只是武断的。

最后的问题是: 哪个动作更快?将处理后的请求发送到 SQS 还是直接发送到 DynamoDB?

考虑到,在这两种情况下,它将从 lambda 函数 (2) 中执行,因此,从理论上讲,由于它与 AWS 本身处于相同的上下文中,因此它的响应时间不会与从其他机器请求它。

如果这个问题的答案是:

我可能会删除 SQS (3) 和第二个 lambda 函数 (4),从而使流程更简单、更直接。

但是,如果先发送到 SQS 的响应时间更长,我可能会保留此流程。

如果您在调用之间保持连接打开,我发现 DynamoDB 响应时间低于 10 毫秒。我没有关于 SQS 延迟的数据。

关于成本,您基本上是将 lambda 成本加倍,并添加任何 SQS 成本。如果您使用按需写入,SQS 的成本比 DynamoDB 高出约 33%。

你问的是 SQS 是否比 DynamoDB 便宜,但在你的流程中你同时使用了两者......当然这样做会更便宜API Gateway (1) → Lambda Function (2) → DynamoDB (3)

在性能方面,众所周知,DynamoDB 对于小而频繁的写入速度很快,所以我不会太担心这一点。

SQS 和 DynamoDB 响应时间之间的差异应该非常相似,除非您的 DynamoDB 容量没有正确配置,在这种情况下您可能会遇到节流问题。如果配置的容量不是您关心的问题,那么我建议在 Lambda 函数内使用计时器测试 SQS 和 DynamoDB(或使用 AWS x-ray)并确定性能差异是否值得添加 SQS 和一个额外的 Lambda 函数

+1 到 Deiv 和 cementblocks 响应。

让我分享以下其他观点,以帮助您改进您提出的设计。

如果您需要严格遵守异步处理,即将请求处理与响应分离,那么坚持使用基于 SQS 的解决方案。

如果 API 端点的消费者对请求处理延迟一致且可以接受,那么我会推荐 Diev 推荐的解决方案来处理请求、持久化到 DynamoDB 和 return 响应给客户。作为奖励,您将获得较低的 AWS 账单(如上所述)。

DynamoDB 旨在为单个项目读取提供 "consistent" P99(即第 99 个百分位)延迟 < 10 毫秒,为单个项目写入提供 < 20 毫秒。

希望对您有所帮助!