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