Node.js SQS批量大小最大限制是否会导致通过Lambdas的处理速度变慢?
我知道AWS允许SQS成为Lambdas的事件源映射之一。我很高兴现在这是可能的,因为这样我就不必每隔几秒钟通过cron作业从队列中进行轮询。但是,Node.js SQS批量大小最大限制是否会导致通过Lambdas的处理速度变慢?,node.js,amazon-web-services,aws-lambda,amazon-sqs,Node.js,Amazon Web Services,Aws Lambda,Amazon Sqs,我知道AWS允许SQS成为Lambdas的事件源映射之一。我很高兴现在这是可能的,因为这样我就不必每隔几秒钟通过cron作业从队列中进行轮询。但是,batchSize的最大可能值似乎限制为10。根据我的理解,batchSize是单个Lambda调用将从队列接收的消息数 这听起来对我来说可能是个问题,因为在我的情况下,队列中一次可能有几十万条消息。这些消息不需要任何繁重的处理;它们只需要被解析并作为记录保存到数据库中。这很简单 如果batchSize每次检索仅限于10条消息,我预计可能会遇到一些问
batchSize
的最大可能值似乎限制为10。根据我的理解,batchSize
是单个Lambda调用将从队列接收的消息数
这听起来对我来说可能是个问题,因为在我的情况下,队列中一次可能有几十万条消息。这些消息不需要任何繁重的处理;它们只需要被解析并作为记录保存到数据库中。这很简单
如果batchSize
每次检索仅限于10条消息,我预计可能会遇到一些问题:
我的担心在这种情况下有效吗?如果是这样的话,我还可以用SQS和Lambdas做些什么来克服这些顾虑吗?您关于10的限制的假设 如果有更多消息可用,Lambda将启动更多实例并行运行。这意味着,如果有1000条消息可用,Lambda可能会加速100次并发执行以快速处理所有消息 一旦lambda函数处理了一个批次的10条消息,它将继续处理其他批次。由于lambda以100ms的间隔计费,因此浪费的时间最少
至于数据库写入,您可以在将消息插入队列之前对其进行预处理。您关于限制为10的假设 如果有更多消息可用,Lambda将启动更多实例并行运行。这意味着,如果有1000条消息可用,Lambda可能会加速100次并发执行以快速处理所有消息 一旦lambda函数处理了一个批次的10条消息,它将继续处理其他批次。由于lambda以100ms的间隔计费,因此浪费的时间最少
至于数据库写入,您可以在将消息插入队列之前对其进行预处理。在这种情况下,您需要让lambda函数从队列中获取消息并进行处理,而不是通过SQS触发lambda。可能有一个云监视事件,它可以根据您的用例为您触发lambda 请注意,SQS限制一次最多发送10条消息,但您可以编写代码以提高效率 在这方面效率很高的方案之一是 在这种情况下,您可以让lambda函数运行15分钟(最长时间),并让它处理尽可能多的消息。在设计这类应用程序时,幂等性是关键,因此,若消息在此运行中未被处理,则将在下一次运行中进行处理
使用这种方法的缺点是,您需要根据预期的消息数量手动扩展lambda。在这种情况下,您需要让lambda函数从队列中获取消息并处理它们,而不是通过SQS触发lambda。可能有一个云监视事件,它可以根据您的用例为您触发lambda 请注意,SQS限制一次最多发送10条消息,但您可以编写代码以提高效率 在这方面效率很高的方案之一是 在这种情况下,您可以让lambda函数运行15分钟(最长时间),并让它处理尽可能多的消息。在设计这类应用程序时,幂等性是关键,因此,若消息在此运行中未被处理,则将在下一次运行中进行处理
使用这种方法的缺点是,您需要根据预期的消息数量手动调整lambda的大小。是的,我将在插入消息之前对消息进行预处理。不幸的是,由于
batchSize
的限制,每次写入操作最多只能插入10条记录。是的,我将在插入消息之前对消息进行预处理。不幸的是,由于batchSize
限制,我一次可以插入的最大记录数仍然限制为每次写入操作10条记录。SQS已经能够触发Lambda将近2年了,所以我不确定“最近”是正确的描述。最大批量大小实际上是10,但Lambda将同时调用多个Lambda。如果这样做,您需要确保后端数据库能够处理并发连接/写入的数量,因为性能问题通常是数据库here@jarmod是的,你是对的,“最近”可能不是这种情况下最好的描述。至于数据库性能,这正是我关注10条消息限制的原因之一,因为这基本上意味着我将同时与数据库建立更多连接,因为我每次只能向数据库写入10条记录。例如,如果我可以将batchSize
增加到1000,我可以减少写入数据库的连接数。如果您的数据库位于RDS上,请查看RDS代理。如果DB是极光