如何使用Lambda和SQS实现优先级队列架构?

时间:2019-02-18 15:00:27

标签: amazon-web-services aws-lambda amazon-sqs

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

2 个答案:

答案 0 :(得分:0)

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

由相应队列触发的每个功能-处理优先级消息的最常见方法

但是,不利之处在于,即使优先级消息队列为空,您也始终保留10个并发性。

答案 1 :(得分:0)

  

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

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

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

  • 创建2个 wait 队列,大和短消息各一个。
  • 创建一个 active 队列,将消息馈送到您的Lambda使用者。
  • 生产者将请求发送到 wait 队列。
  • 编写逻辑以将消息从 wait 队列移至 active 队列。这段代码应具有根据您的业务需求分发消息的逻辑。