Как контролировать количество параллельных заданий в пакете AWS?
Пакет Aws поддерживает до 10000 заданий в одном массиве. Но что, если каждая работа записывает в DynamoDb? Нужно контролировать скорость в этой ситуации. Как это сделать? Есть ли настройка, позволяющая сохранять только N заданий в рабочем состоянии и не запускать другие?
1 ответ
Самый простой способ - отправить задания DyanmoDB в очередь SQS, и рабочие / лямбды опрашивают эту очередь с заданной вами скоростью. Это классический подход к ограничению скорости в мире AWS. Я хотел бы сделать некоторые расчеты относительно того, какая скорость должна быть в единицах емкости, и настроить емкость ваших таблиц в соответствии с частотой опроса очереди.
Имейте в виду, что у вас могут быть другие процессы, обращающиеся к вашей DynamoDB, используя емкость вашей таблицы, а также отмечая время хранения установленной вами очереди. Вы можете значительно выиграть в скорости и стоимости с некоторым кэшированием, реализованным для заданий чтения, посмотрите на DAX для этого.
Изменить Просто, чтобы адресовать ваши комментарии. Таким образом, как вы говорите, если у вас есть 20 единиц для вашей таблицы, вы можете выполнять только 10 заданий в секунду, если каждое задание использует 2 единицы в 1 секунду. Скажем, вы отправляете 10000 заданий, при 10 заданиях в секунду, что будет равняться 1000 секундам для обработки всех этих заданий. Однако, если вы отправите более 3 456 000 заданий, это займет более 4 дней для обработки со скоростью 10 заданий в секунду. Срок хранения по умолчанию для SQS составляет 4 дня, поэтому вы начнете терять сообщения / задания с такой скоростью.
И, как я упоминал, у вас могут быть другие процессы, которые обращаются к вашей таблице, которые могут превысить ее использование на 20 единиц, поэтому вам нужно быть очень осторожным при приближении к пределу вашей таблицы.