我正在构建一个服务,它将使用来自其他来源(服务)的数据。所以,我想使用以下管道: -
其他服务----> 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队列中。
如果我的理解是正确的,请告诉我。
非常感谢你的帮助。
答案 0 :(得分:5)
在评论中无法回答,所以我会在这里试试。
您链接的架构非常常见。两个最大的缺点是,即使没有任何事情要处理Lambda使用费用,您的数据可能会延迟至少1分钟的轮询间隔。但是,这些事情都不会对你的问题产生影响。
在DynamoDB发生故障时,SQS可用作数据的临时存储。但是如果它失败了你究竟打算做什么?如果SQS失败并丢失您的消息怎么办?如果Lambda失败并且从不运行您的代码怎么办? DynamoDB就像SQS和Lambda一样是托管服务 - 亚马逊将非常努力地保持其运行,就像其他服务一样。尝试围绕每个可能的故障情况进行架构将意味着您永远不会提供代码。我会专注于您可以使用的最简单的架构,并对您所支付的服务有所信任。