【问题标题】:AWS SQS Required or notAWS SQS 是否需要
【发布时间】:2017-11-05 16:58:52
【问题描述】:

我正在构建一项服务,该服务将使用来自另一个来源(服务)的数据。所以,我正在考虑使用以下管道:-

其他服务 ----> SNS 主题 ----> SQS ----> AWS Lambda ----> Dynamo Db

所以,上面的流程说的是另一个服务会将数据推送到 SQS 将成为订阅者的 SNS 主题。现在 AWS Lambda 将在此 SQS 上有一个触发器,该触发器将侦听 SQS 中的消息并将其推送到 Dynamo Db。虽然这样做看起来没问题。但现在我在想我是否真的需要 SQS。我可以避免使用它吗? AWS Lambda 没有使用 SQS,而是直接在 SNS 上有一个触发器。如果我不使用 AWS SQS,我只是在考虑一种情况。如果 AWS Dynamo DB 发生故障,它将如何处理这种情况?我认为只有 SNS,在此期间我会丢失一些消息,我的 Dynamo Db 处于失败状态,但如果我有 SQS,那么这些消息将存储在 SQS 队列中。

如果我的理解正确,请告诉我。

非常感谢您的帮助。

【问题讨论】:

  • SQS 无法触发 Lambda,因为它是一种轮询架构。但是,您可以从 SNS 触发 Lambda,因为它像 Lambda 一样是事件驱动的。有关更多信息,请参阅 supported event sources 了解 Lambda。
  • 感谢您的回答。我认为 SQS 没有直接的方法可以做到这一点。但是我认为我们可以按照本博客中提到的一种自定义方式进行操作。 cloudonaut.io/… 。除此之外,我的问题主要是关于如果我只使用 SNS,没有 SQS,如果 Dynamo Db 失败,会不会有问题。

标签: amazon-web-services amazon-dynamodb aws-lambda amazon-sqs amazon-sns


【解决方案1】:

无法在 cmets 中回答那么多,所以我会在这里尝试。

您链接到的架构很常见。最大的两个缺点是即使您无事可做,您也要为 Lambda 的使用付费,并且您的数据可能会延迟至少 1 分钟的轮询间隔量。不过,这些事情在您的问题中都可能无关紧要。

SQS 可在 DynamoDB 发生故障时用作数据的临时存储。但是如果它失败了,你究竟会怎么做?如果 SQS 失败并丢失您的消息怎么办?如果 Lambda 失败并且从未运行您的代码怎么办? DynamoDB 就像 SQS 和 Lambda 一样是一种托管服务——亚马逊将非常努力地让它像其他服务一样运行。尝试围绕每个可能的故障场景进行架构将意味着您永远不会交付代码。我会专注于您可以使用的最简单的架构,并信任您所支付的服务。

【讨论】:

  • 非常感谢您的解释。那么,您有什么建议,我认为 SQS 本身似乎并没有太多用处,对吧?
  • 不,我没有看到 SQS 在您的场景中的价值,因为它增加了额外的复杂性而没有真正的好处。
  • 喜欢评论Trying to architect around every possible failure scenario will mean you never deliver code :) 。 +1。
猜你喜欢
  • 2018-07-25
  • 2020-06-20
  • 1970-01-01
  • 2019-08-09
  • 2018-06-03
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
  • 2021-05-20
相关资源
最近更新 更多