Функция AWS Lambda недостаточно масштабируется для обработки сообщений SQS - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть лямбда, которая подписана на очередь SQS для обработки сообщений.Объем сообщения очень высок.

Проблема: очередь очень быстро растет, а лямбда-функция не масштабируется для достаточно быстрой обработки сообщений.Количество одновременных лямбда-казней увеличивается до 20-25, хотя у меня есть оставшаяся квота в 950 или более неиспользованных лямбда-казней.Почему он не раскручивает больше лямбды, чтобы быстрее обрабатывать мою очередь?Это настраивается?

Это проблема в моем приложении, потому что я использую стандартную очередь SQS, которая не дает гарантии заказа.Поэтому иногда я вижу, что несчастные сообщения затягиваются в очередь на несколько часов, тогда как некоторые сообщения обрабатываются менее чем за одну минуту.(Кроме того, я весьма шокирован тем, что очередь может обрабатываться в таком случайном порядке. Даже если нет гарантии заказа, я бы не ожидал, что это будет так плохо).

Ответы [ 2 ]

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

Проблема заключалась в выделении памяти лямбда-функции.Я наивно оставил его как значение по умолчанию 128MB.Изменение этого значения на 2048MB полностью решило проблему.Теперь у лямбды нет проблем с большими объемами сообщений SQS.

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

Относительно SQS, вы не сказали, какой регион вы используете, но SQS имеет опцию FIFO в регионах присутствия.

Очереди FIFO доступны на востоке США (N. Вирджиния), Восток США (Огайо), Запад США (Орегон), ЕС (Ирландия), Азиатско-Тихоокеанский регион (Сидней) и Азиатско-Тихоокеанский регион (Токио).Очереди FIFO имеют все возможности стандартной очереди.

В отношении Lambda одновременности. Похоже, у вас заканчиваются IP-адреса в используемой подсети.Это применимо только в том случае, если вы используете VPC.

Если ваша функция подключается к ресурсам на основе VPC, вы должны убедиться, что ваши подсети имеют достаточную адресную емкость для поддержки требований ENI к масштабированию вашей функции.Вы можете оценить приблизительную емкость ENI по следующей формуле:

Параллельное выполнение * (Память в ГБ / 3 ГБ)

Где:

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

Память в ГБ - объем памяти, сконфигурированный для вашей лямбда-функции.

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

Ссылки

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

...