В AWS Lambda ограничение параллелизма определяет, сколько вызовов функций может выполняться одновременно в одном регионе. Вы можете установить это ограничение через консоль AWS Lambda или через Serverless Framework.
Если лимит вашей учетной записи составляет 1000, и вы зарезервировали 100 одновременных выполнений для одной функции и 100 одновременных выполнений для другой, остальные функции в этом регионе будут совместно использовать оставшиеся 800 выполнений.
Если вы зарезервировали одновременное выполнение для определенной функции, AWS Lambda предполагает, что вы знаете, сколько зарезервировать, чтобы избежать проблем с производительностью. Функции с выделенным параллелизмом не могут получить доступ к неограниченному параллелизму.
Правильный способ установить зарезервированный предел параллелизма в Serverless Framework - это тот, которым вы поделились:
functions:
hello:
handler: handler.hello # required, handler set in AWS Lambda
reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
Я бы посоветовал использовать SQS для управления вашей очередью. Одна из распространенных архитектурных причин использования очереди - ограничить нагрузку на другую часть вашей архитектуры. Это может означать предотвращение перегрузки базы данных или избежание ограничений скорости для стороннего API при обработке большого пакета сообщений.
Например, давайте подумаем о вашем случае, когда логика обработки SQS должна подключаться к базе данных. Вы хотите ограничить ваших рабочих, чтобы они имели не более 5 открытых подключений к вашей базе данных одновременно, с контролем параллелизма вы можете установить правильные ограничения, чтобы ваша архитектура оставалась в рабочем состоянии.
В вашем случае у вас может быть функция hello
, которая принимает ваши запросы и помещает их в очередь SQS. С другой стороны, функция compute
получит эти сообщения SQS и вычислит их, ограничив количество одновременных вызовов до 5.
Вы даже можете установить размер пакета, то есть количество сообщений SQS, которые могут быть включены в одну лямбду.
functions:
hello:
handler: handler.hello
compute:
handler: handler.compute
reservedConcurrency: 5
events:
- sqs:
arn: arn:aws:sqs:region:XXXXXX:myQueue
batchSize: 10 # how many SQS messages can be included in a single Lambda invocation
maximumBatchingWindow: 60 # maximum amount of time in seconds to gather records before invoking the function
person
marco.santonocito
schedule
22.01.2021