Amazon web services SNS至Lambda vs SNS至SQS至Lambda
如果有人能帮我解释,我试图了解我的工作流程中是否需要SQS。在我的应用程序中,当采取某个操作时,它会将信息提交给SNS主题,SNS主题会调用LAMBDA进行一些处理。这是伟大的工作,因为它是 当我在网上做研究时,人们似乎也在使用这个堆栈中的SQS,SNS会将信息放在SQS上,然后SQS会调用LAMBDAAmazon 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调用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还有一些好处
我认为2019年发生了一些变化,SQS可以通过@alexs提到的事件源映射触发lambda。 相关博文: 总而言之,您可以使用SQS实现lambda,并具有以下好处:
- 在失败情况下重新处理事件,并配置在放弃之前应重试消息的次数(接收计数)
- 更长的保留期
- 通常在存在长时间运行的作业且lambda从作业队列中逐个轮询的场景中选择李>
- 若您需要将一条消息扇出到多个目的地,比如说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不同意这篇文章没有回答这个问题