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

问题描述 投票:-1回答:3

好吧,我之前使用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)并返回客户端发送的HTTP请求的响应。
  4. 虽然请求已完成并已响应,但SQS(3)消息将由另一个lambda函数(4)事件拉取,该函数将在DynamoDB(5)上插入已处理的消息。

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

问题是,最后:哪一项行动更快?发送已处理的请求是执行SQS还是直接发送到DynamoDB?

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

如果这个问题的答案是:

  • 直接在DynamoDB上插入更快
  • 直接在DynamoDB上插入速度并不快,但差别可以忽略不计

我可以删除SQS(3)和第二个lambda函数(4),从而产生更简单和更直接的流程。

但是,如果首先发送到SQS有更长的响应时间,我可以保持这种流量。

amazon-web-services aws-lambda amazon-dynamodb amazon-sqs
3个回答
1
投票

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

性能方面,众所周知,DynamoDB可以快速进行小型,频繁的写入,因此我不会担心这一点。

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


1
投票

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

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


1
投票

+1给Deiv和水泥块响应。

让我分享以下额外的观点,以帮助您改进您的拟议设计。

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

如果请求处理延迟对于API端点的使用者来说是一致且可接受的,那么我建议Diev建议处理请求的解决方案,持久化到DynamoDB并将响应返回给客户端。作为奖励,您将获得较低的AWS账单(如上所述)。

DynamoDB旨在为单项读取提供“一致”P99(即第99百分位数)延迟<10 ms,对单项目写入提供<20 ms。

希望这可以帮助!

© www.soinside.com 2019 - 2024. All rights reserved.