typescript 如何在AWS CDK中限制标准FIFO队列吞吐量?

6rqinv9w  于 2023-01-27  发布在  TypeScript
关注(0)|答案(1)|浏览(86)

我已经创建了一个FIFO队列,但希望限制它可以发出的请求数量,以免使它向其发送这些请求的服务器过载。

CDK代码:

this.intoMagento = new Queue(this, "intoAPI", {
  queueName: `intoAPI.fifo`,
  fifo: true,
  contentBasedDeduplication: true,
  visibilityTimeout: Duration.minutes(5),
  fifoThroughputLimit: FifoThroughputLimit.PER_QUEUE,
});

当我限制吞吐量PER_QUEUE时,我如何告诉它我每分钟只想处理600个HTTPPOST请求?我是在我的Lambda队列使用者中执行吗?
另外,FifoThroughputLimit.PER_QUEUE是否只适合于高吞吐量的SQS队列,或者它也可以应用于标准队列?

t9aqgxwy

t9aqgxwy1#

SQSQueue吞吐量不是细粒度的、用户确定的设置 *,而是多种因素混合的结果,包括Queue类型配额、使用者计数、批处理和消息分区模式。
Lambda Event Source Mapping与SQS的集成可以尽可能快地拉取消息。但是,这里有几种方法可以限制Lambda使用者的消息消费:
1.最快的方法是使用Event Source Mapping的MaximumConcurrency设置cap the number of concurrent Lambda consumers。如果幸运的话,将MaximumConcurrency设置为下限2(并且将batchSize设置为1)将使处理速度减慢到接近您所需限制的可接受的速度。我猜如果您需要额外的杠杆,也可以定期启用/禁用集成。
1.如果您想要更细粒度的吞吐量控制,则需要给予事件源Map集成的便利性。使用EventBridge按计划触发Lambda。您将可以更精确地控制每小时的消息数,但需要手动从队列中提取和删除消息。如果您有600/小时的硬性限制,则还需要跟踪每小时到目前为止已处理的消息计数(例如,在DynamoDB表中),如果在给定时间段内达到限制,则提前退出Lambda。

  • 虽然名称可能暗示了其他情况,但CDK Queue构造的fifoThroughputLimit不是一个速度限制设置,而是在FIFO队列上启用High-throughput的设置的一部分。

相关问题