Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services SNS至Lambda vs SNS至SQS至Lambda_Amazon Web Services_Aws Lambda_Amazon Sqs_Amazon Sns - Fatal编程技术网

Amazon web services SNS至Lambda vs SNS至SQS至Lambda

Amazon web services SNS至Lambda vs SNS至SQS至Lambda,amazon-web-services,aws-lambda,amazon-sqs,amazon-sns,Amazon Web Services,Aws Lambda,Amazon Sqs,Amazon Sns,如果有人能帮我解释,我试图了解我的工作流程中是否需要SQS。在我的应用程序中,当采取某个操作时,它会将信息提交给SNS主题,SNS主题会调用LAMBDA进行一些处理。这是伟大的工作,因为它是 当我在网上做研究时,人们似乎也在使用这个堆栈中的SQS,SNS会将信息放在SQS上,然后SQS会调用LAMBDA 我想我试图理解的是在这方面对SQS的需求。通过直接从SNS调用LAMBDA,增加了什么价值,或者换句话说,我损失了什么?SQS没有调用LAMBDA。SQS不能调用任何东西。将Lambda与SQS

如果有人能帮我解释,我试图了解我的工作流程中是否需要SQS。在我的应用程序中,当采取某个操作时,它会将信息提交给SNS主题,SNS主题会调用LAMBDA进行一些处理。这是伟大的工作,因为它是

当我在网上做研究时,人们似乎也在使用这个堆栈中的SQS,SNS会将信息放在SQS上,然后SQS会调用LAMBDA


我想我试图理解的是在这方面对SQS的需求。通过直接从SNS调用LAMBDA,增加了什么价值,或者换句话说,我损失了什么?

SQS没有调用LAMBDA。SQS不能调用任何东西。将Lambda与SQS一起使用的人在事件计时器上运行Lambda,比如每分钟一次,每次函数运行时,它都轮询SQS以查看是否有消息要处理


如果您不需要排队并防止太多Lambda函数同时运行,那么您就不需要像SQS这样的队列系统。

在SNS和Lambda之间有一个SQS的唯一优势是重新处理。 假设Lambda由于某种原因(例如超时或内存占用不足)无法处理特定事件,您可以增加超时(最多5分钟)或内存(最多1.5GB),然后重新启动轮询,然后重新处理旧事件

这在SNS到Lambda的情况下是不可能的,如果Lambda失败,事件将丢失。即使您配置了DLQ,您仍然需要为单独读取和处理消息做准备

所以,如果你的活动很关键,你不想错过它们,那么就选择SNS-SQS-Lambda

尽管如此,SQS不能像SNS一样触发lambda。您必须经常轮询SQS

编辑:


AWS于2018年6月28日宣布SQS触发Lambda支持。因此,不再需要频繁地轮询队列。SQS的新项可以触发Lambda

您现在可以使用SQS作为en事件源


除了@Arafat Nalkhande的答案之外,SQS的lambda还有一些好处

  • 在SQS中,我们可以放置一个,以便消息在一段时间后得到处理,它在数据需要时间才能可用的场景中可能很有用

  • SQS可以作为应急存储,假设下游服务不可用,消息可以在SQS中保留15天


  • 我认为2019年发生了一些变化,SQS可以通过@alexs提到的事件源映射触发lambda。 相关博文:

    总而言之,您可以使用SQS实现lambda,并具有以下好处:

    • 在失败情况下重新处理事件,并配置在放弃之前应重试消息的次数(接收计数)
    • 更长的保留期
    • 通常在存在长时间运行的作业且lambda从作业队列中逐个轮询的场景中选择
    您可以选择使用SNS:

    • 若您需要将一条消息扇出到多个目的地,比如说X消息应该由Y和Z应用程序处理。我觉得这是最大的优势,如果你想在这方面的可靠性,你可以把SNS和SQS结合在一起
    • 您不关心丢失的邮件。请记住,使用SNS时仍然存在重试策略(线性、几何、指数等)
    • 通常用于可以更快地接收/处理消息的情况。这有时也是一个问题;想象一下这样一个场景:您的企业收到的每封电子邮件都有一个SNS通知,而您没有足够的lambda并发性来处理所有这些邮件。您可以通过按自己的速度使用SQS来解决这个问题

    在这两种情况下,可能会有重复的消息(在重试的情况下),并且不能保证订单。如果你需要一个,考虑动态流。 SQS是一种廉价且简单的队列服务,目前不具备触发功能。更新SQS现在具有lambda触发功能ability@bestwishes但是,如果推送到SQS的数据量很小,则会导致NumberOfEmptyReceives问题。很抱歉我想我想说的是,当连接的SNS主题收到任何信息时,LAMBDA会自动被调用。这一直很有效。我想我想问的是,这种方法可以扩展吗?比如说,有100多个用户试图执行该操作,在这种情况下使用SQS是否有任何帮助,或者我当前的方法是否可以正常工作?这完全取决于Lambda函数正在做什么。如果它插入到对连接有限制的关系数据库中,或者遇到有速率限制的第三方API,那么您将遇到问题。如果只是在S3中更新一个文件,那么您可能不会遇到问题。您可能必须申请增加AWS帐户中允许的并发Lambda函数,但仅此而已。看起来SQS现在可以触发Lambda,根据新功能,您的更新建议是什么?@Davos添加SQS将允许您控制并发和重试,所以,如果你想控制这些事情,就使用SQS。不过这会增加一点成本。@Davos yes SQS现在有一个lambda触发器,但lambda在内部轮询SQS。所以您不必手动触发lambda上的事件来轮询消息。在此处作为注释重复,而不是作为下面的不同答案重复。。。右,@dmulter,SQS触发Lambda支持于2018年6月28日添加。然而,问题提到“在我的应用程序中,当采取行动时,它将信息提交给SNS topic,SNS topic调用LAMBDA进行一些处理”,因此,这个新功能仍然不能回答这个问题。任何异步调用的Lambda函数都会重试两次,然后可以发送到DLQ,DLQ可以是SNS或SQS,所以这个答案中给出的关于为什么在SNS和Lambda之间添加SQS的原因并不让senseI不同意这篇文章没有回答这个问题