Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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

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
Node.js SQS批量大小最大限制是否会导致通过Lambdas的处理速度变慢?_Node.js_Amazon Web Services_Aws Lambda_Amazon Sqs - Fatal编程技术网

Node.js SQS批量大小最大限制是否会导致通过Lambdas的处理速度变慢?

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条消息,我预计可能会遇到一些问

我知道AWS允许SQS成为Lambdas的事件源映射之一。我很高兴现在这是可能的,因为这样我就不必每隔几秒钟通过cron作业从队列中进行轮询。但是,
batchSize
的最大可能值似乎限制为10。根据我的理解,
batchSize
是单个Lambda调用将从队列接收的消息数

这听起来对我来说可能是个问题,因为在我的情况下,队列中一次可能有几十万条消息。这些消息不需要任何繁重的处理;它们只需要被解析并作为记录保存到数据库中。这很简单

如果
batchSize
每次检索仅限于10条消息,我预计可能会遇到一些问题:

  • 实际上,处理队列上的消息可能需要很长时间

  • 不仅每次检索10条消息很慢,因为消息处理非常简单,在一次Lambda调用中仅处理10条消息听起来有点浪费,因为处理消息所需的操作非常简单,我很确定它可以在一次Lambda调用中处理至少几千条消息

  • 每次检索只有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是极光