Интеграция AWS Lambda SQS: как заставить параллельные лямбды - PullRequest
0 голосов
/ 13 декабря 2018

В настоящее время я использую очередь SQS для запуска функции Lambda.Моя лямбда-функция может обрабатывать только одну запись SQS за раз, и я хочу максимально быстро исчерпать очередь SQS

Так что я установил

Delivery Delay: to 0 seconds,

Batch size: to 1

And set Lambda to use unreserved account concurrency 1000

Предположим, случай: одно сообщение SQSпередается в Lambda, теперь он обрабатывается.Затем в SQS приходит другое сообщение.Будем ли мы уверены, что для обработки этого сообщения будет создана новая лямбда?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Майкл прав, так как документ AWS гласит:

По мере увеличения потока сообщений в очередь, AWS Lambda автоматически наращивает активность опроса до тех пор, пока число одновременных выполнений функции не достигнет 1000,ограничение параллелизма учетной записи или (необязательно) ограничение параллелизма функции, в зависимости от того, что меньше.Amazon Simple Queue Service поддерживает начальный пакет из 5 одновременных вызовов функций и увеличивает параллелизм на 60 одновременных вызовов в минуту.

Так, например, 1000 сообщений поступают в очередь за раз, только 5 будутобрабатывается в первую минуту.

65 лямбд будет работать одновременно на второй минуте ... так далее

Что очень медленно и заметно, особенно если ваша функция долго работает

0 голосов
/ 13 декабря 2018

Лямбда будет выполняться последовательно, но никогда не превысит лимит параллелизма.

Как и в вашем случае, ваша очередь SQS может получать 2000 сообщений одновременно.Lambda будет одновременно запускать 1000 функций, а оставшиеся 1000 будут выполняться только после завершения предыдущих выполнений.

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

...