【问题标题】:How to implement a priority queue architucture using lambda and SQS?如何使用 lambda 和 SQS 实现优先级队列架构?
【发布时间】:2019-02-19 17:58:18
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

但是,缺点是即使优先级消息队列为空,您也始终保留 10 个并发。

【讨论】:

  • 我认为这是最好的方法,因为我可以独立控制两个流上的 lambda 并发执行。
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-12
    • 2023-04-02
    • 2014-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    相关资源
    最近更新 更多