Aws lambda 如何限制无服务器lambda函数的并行执行

Aws lambda 如何限制无服务器lambda函数的并行执行,aws-lambda,serverless-framework,serverless,aws-serverless,serverless-architecture,Aws Lambda,Serverless Framework,Serverless,Aws Serverless,Serverless Architecture,我正在使用AWS和无服务器框架。我的无服务器lambda函数由事件触发。然后我和数据库交谈,我可以用DB打开的连接数量是有限制的 因此,我希望一次只运行5个lambda函数,并对其他事件进行排队。我知道有: provisionedConcurrency: 3 # optional, Count of provisioned lambda instances reservedConcurrency: 5 # optional, reserved concurrency limit

我正在使用AWS和无服务器框架。我的无服务器lambda函数由事件触发。然后我和数据库交谈,我可以用DB打开的连接数量是有限制的

因此,我希望一次只运行5个lambda函数,并对其他事件进行排队。我知道有:

    provisionedConcurrency: 3 # optional, Count of provisioned lambda instances
    reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
因此,在本例中,指定数量的长时间运行作业将存在,并且它们将为事件提供服务

但我想要的不是事件队列,而是触发函数,一次最多运行5个函数


我想知道AWS是否支持这种事件队列的概念?

在AWS Lambda中,并发限制决定了一个区域中可以同时运行多少个函数调用。您可以通过AWS Lambda控制台或无服务器框架设置此限制

如果您的帐户限制为1000,并且您为特定函数保留了100次并发执行,为另一个函数保留了100次并发执行,则该区域中的其余函数将共享剩余的800次执行

如果为特定函数保留并发执行,AWS Lambda假定您知道要保留多少以避免性能问题。具有已分配并发性的函数无法访问无保留并发性

在无服务器框架中设置保留并发限制的正确方法是您共享的方法:

functions:
  hello:
    handler: handler.hello # required, handler set in AWS Lambda
    reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
我建议使用SQS来管理您的队列。使用队列的一个常见架构原因是限制架构不同部分的压力。这可能意味着在处理大量消息时防止数据库过载或避免第三方API的速率限制

例如,让我们考虑一下您的SQS处理逻辑需要连接到数据库的情况。您希望限制工作人员一次与数据库的打开连接不超过5个,通过并发控制,您可以设置适当的限制以保持体系结构正常

在您的例子中,您可以有一个函数,
hello
,它接收您的请求并将它们放入SQS队列中。另一方面,函数
compute
将获取这些SQS消息并计算它们,将并发调用的数量限制为5

您甚至可以设置一个批大小,即可以包含在单个lambda中的SQS消息数

functions:
  hello:
    handler: handler.hello

  compute:
    handler: handler.compute
    reservedConcurrency: 5
    events:
      - sqs:
          arn: arn:aws:sqs:region:XXXXXX:myQueue
          batchSize: 10 # how many SQS messages can be included in a single Lambda invocation
          maximumBatchingWindow: 60 # maximum amount of time in seconds to gather records before invoking the function

在AWS Lambda中,并发限制决定了一个区域中可以同时运行多少个函数调用。您可以通过AWS Lambda控制台或无服务器框架设置此限制

如果您的帐户限制为1000,并且您为特定函数保留了100次并发执行,为另一个函数保留了100次并发执行,则该区域中的其余函数将共享剩余的800次执行

如果为特定函数保留并发执行,AWS Lambda假定您知道要保留多少以避免性能问题。具有已分配并发性的函数无法访问无保留并发性

在无服务器框架中设置保留并发限制的正确方法是您共享的方法:

functions:
  hello:
    handler: handler.hello # required, handler set in AWS Lambda
    reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
我建议使用SQS来管理您的队列。使用队列的一个常见架构原因是限制架构不同部分的压力。这可能意味着在处理大量消息时防止数据库过载或避免第三方API的速率限制

例如,让我们考虑一下您的SQS处理逻辑需要连接到数据库的情况。您希望限制工作人员一次与数据库的打开连接不超过5个,通过并发控制,您可以设置适当的限制以保持体系结构正常

在您的例子中,您可以有一个函数,
hello
,它接收您的请求并将它们放入SQS队列中。另一方面,函数
compute
将获取这些SQS消息并计算它们,将并发调用的数量限制为5

您甚至可以设置一个批大小,即可以包含在单个lambda中的SQS消息数

functions:
  hello:
    handler: handler.hello

  compute:
    handler: handler.compute
    reservedConcurrency: 5
    events:
      - sqs:
          arn: arn:aws:sqs:region:XXXXXX:myQueue
          batchSize: 10 # how many SQS messages can be included in a single Lambda invocation
          maximumBatchingWindow: 60 # maximum amount of time in seconds to gather records before invoking the function

你可以使用sqs。我不认为sqs是解决这个问题的方法。在这里,我试图限制Lambda函数的并行执行次数。哪些事件触发Lambda函数?您可以使用sqs。我不认为sqs是解决此问题的方法。这里我试图限制Lambda函数的并行执行次数。哪些事件触发Lambda函数?