Почему «reservedConcurrency» не ограничивает количество одновременных сообщений в полете? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь ограничить количество параллельных функций, работающих параллельно.Триггер для моей лямбды - это сообщение в очереди SQS, как вы можете видеть в моем serverless.yml:

  receiver:
    handler: src/receiver.handler
    timeout: 30
    events:
      - sqs:
          arn: ${queueArn}
          batchSize: 1   
    reservedConcurrency: 1

Я использовал «reservedConcurrency: 1», чтобы ограничить количество одновременных выполнений до 1. Я проверилв пользовательском интерфейсе AWS конфигурация функции «приемник» и «резервный параллелизм» также установлены на 1.

Не уверен, что мне не хватает, так как я все еще вижу, как из моих журналов запускаются сотни выполненийпользовательский интерфейс AWS SQS.

1 Ответ

0 голосов
/ 09 апреля 2019

Интеграция SQS / Lambda не предназначена для работы с зарезервированным параллелизмом ниже 5.

Если вы настраиваете зарезервированный параллелизм для своей функции, установите минимум 5 одновременных выполнений, чтобы уменьшить вероятность ошибок регулирования, когда Lambda вызывает вашу функцию.

https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html

Сообщения в полете - это не только те сообщения, которые в настоящее время обрабатываются функцией Lambda. Он также включает в себя сообщения, которые дают сбой и возвращаются в очередь из-за недостаточного параллелизма, доступного для функции Lambda - они будут в полете, пока они находятся в процессе попытки, даже если большинство попыток завершится неудачей. Если вы установите зарезервированный параллелизм на 0, вы обнаружите, что вся обработка останавливается, но некоторое количество сообщений остается в полете, потому что обработка все еще предпринимается.

...