Как я могу отслеживать параллельные выполнения лямбды на основе секунд (или найти лучшее решение для ограничения параллельных выполнений лямбды)? - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю на огромной платформе распределенных вычислений, построенной на AWS Lambda. Платформа чрезвычайно колючая, поэтому в большинстве случаев число ConcurrentExecutions составляет менее 50, но мы можем достичь максимума (в настоящее время 1000) в течение часа или более, если в систему попадает большое пакетное задание (оно определяется событиями система). Это проблема, поскольку у нас будут API-интерфейсы для клиентов, которые будут ужасно отставать. Наконец, я не архитектор, поэтому я имею минимальный контроль над тем, как была спроектирована система, но меня попросили разработать умное решение для ограничения одновременного выполнения

Я не новичок в AWS, поэтому Я знаю о стандартных способах решения этой проблемы. # 1 - резервный параллелизм для лямбд, обращенных к пользователю. Я не имею права делать это ради этого упражнения (хотя я go скажу своему боссу, что нужно, если это действительно так). Я имею в виду систему, в которой мы назначаем функции с высоким приоритетом (для пользовательского интерфейса) и функции с низким приоритетом (для пакетной обработки), а функции с низким приоритетом будут проверять сохраненное (DynamoDB) значение, выводимое из Cloudwatch, на текущее число ConcurrentExecutions , Если функция с низким приоритетом обнаружит, что мы рискуем использовать все ConcurrentExecutions, она отправит сообщение в очередь с экспоненциальной отсрочкой. Все это должно работать, за исключением проблемы, что ConcurrentExecutions контролируются только с шагом в одну минуту, что слишком медленно, так как многие из наших Lambdas работают в течение примерно 500 мс.

Поэтому мои вопросы следующие:

  1. Есть ли способ настроить пользовательский параметр ConcurrentExecutions metri c, который имеет точки данных с точностью до секунды, и если да, то как бы вы это сделали?

  2. Есть ли лучший способ реализовать счетчик, чем Cloudwatch?

  3. Я что-то здесь упускаю, и у кого-то есть умный способ управления Lambda ConcurrentExecutions

1 Ответ

1 голос
/ 24 апреля 2020

Я не думаю, что нужно вообще создавать монитор или регулирование. Вам нужно будет создать тест и поддерживать что-то дополнительное к вашему основному решению. Вместо этого два предложения:

Похоже, что в текущем проекте одна лямбда-функция выполняет слишком много. Далее разложите Lambdas, чтобы вы могли разделить Lambdas на Ui / publi c lambda и один или несколько выделенных для пакетных процессов. Таким образом, вы можете распределить лимит одновременного выполнения на большее количество лямбд. Ограничение по лямбда-функции.

Во-вторых, запросите увеличение квоты / лимита услуг

Чтобы поднять лимит свыше 1000 одновременных выполнений функций, отправьте запрос в Центр поддержки AWS, выполнив шаги, приведенные в нашем документация. Эта функция доступна во всех регионах, где доступна лямбда.

См. AWS Лямбда повышает пределы одновременного выполнения по умолчанию. https://aws.amazon.com/about-aws/whats-new/2017/05/aws-lambda-raises-default-concurrent-execution-limit/

Команда по управлению лимитами очень гибка, когда просит лимит быть изнасилованным, как правило, его повышают до любого разумного числа, которое требует наше решение.

Чтобы запросить увеличение лимита, см. https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-resource-limits.html

...