Amazon web services 如何使用lambda和SQS实现优先级队列结构?

Amazon web services 如何使用lambda和SQS实现优先级队列结构?,amazon-web-services,aws-lambda,amazon-sqs,Amazon Web Services,Aws Lambda,Amazon Sqs,我使用SQS和lambda来处理一些特定的请求。每个请求可以包含从1条消息到数十万条消息的消息。它工作正常唯一的问题是小请求有时必须等待队列中已经存在的大请求(因为所有并发lambda都被占用,我不想增加lambda并发性)。所以我想有两个队列,一个用于小请求,一个用于大请求,这样小请求可以更快地处理。但挑战在于如何为每个队列分配lambda并发数。现在我将lambda并发性设置为30,但是如果一个大请求传入,那么所有的30个lambda都会很忙。是否有任何方法可以告诉lambda基于触发它的S

我使用SQS和lambda来处理一些特定的请求。每个请求可以包含从1条消息到数十万条消息的消息。它工作正常唯一的问题是小请求有时必须等待队列中已经存在的大请求(因为所有并发lambda都被占用,我不想增加lambda并发性)。所以我想有两个队列,一个用于小请求,一个用于大请求,这样小请求可以更快地处理。但挑战在于如何为每个队列分配lambda并发数。现在我将lambda并发性设置为30,但是如果一个大请求传入,那么所有的30个lambda都会很忙。是否有任何方法可以告诉lambda基于触发它的SQS队列部分使用并发lambda(比如,对于大请求使用20,对于小请求使用10)?或者是否有其他最佳实践来实现此类需求?

您可以有两个函数副本:一个用于具有20个保留并发的大请求,另一个用于具有10个保留并发的小请求

每个函数都由相应的队列触发—这是处理优先级消息的最常见方法

然而,缺点是即使优先级消息队列为空,您也总是保留10个并发

有没有办法告诉lambda部分使用并发lambda

否,一旦部署,它们将按配置运行

另外,我认为这不应该是一个
Lambda
使用问题。您可以通过使用多层队列来控制活动队列长度。过于简化的解决方案是

  • 创建2个等待队列,分别用于大消息和短消息
  • 创建一个活动队列,将消息馈送到
    Lambda
    消费者
  • 生产者向等待队列发送请求
  • 写入将消息从等待队列移动到活动队列的逻辑。这段代码应该具有根据业务需求分发消息的逻辑

为什么要限制Lambda并发?如果有工作要做,为什么不早点完成呢?延迟工作没有价格上的好处。原因是lambda函数写入DynamoDB,如果不限制并发性,那么我将在DynamoDB上受到限制。我想这是否可以更好地解决?我认为这是最好的方法,因为我可以独立控制两个流上的lambda并发执行。