Как контролировать количество параллельных заданий в пакете AWS? - PullRequest
0 голосов
/ 14 мая 2018

Пакет Aws поддерживает до 10000 заданий в одном массиве. Но что, если каждая работа записывает в DynamoDb? Необходимо контролировать скорость в этой ситуации. Как это сделать? Есть ли настройка, позволяющая сохранять только N заданий в рабочем состоянии и не запускать другие?

1 Ответ

0 голосов
/ 14 мая 2018

Самый простой способ - отправлять задания DyanmoDB в очередь SQS, и рабочие / лямбды опрашивают эту очередь с заданной вами скоростью.Это классический подход к ограничению скорости в мире AWS.Я хотел бы сделать некоторые расчеты относительно того, как это должно быть в единицах емкости, и настроить емкость ваших таблиц соответственно с частотой опроса очереди.

Имейте в виду, что у вас могут быть другие процессы, обращающиеся к вашей DynamoDB с использованием ваших таблицемкости, а также отмечая время хранения выбранной вами очереди.Вы можете выиграть с огромной скоростью и затратами с некоторым кэшированием, реализованным для заданий на чтение, посмотрите на это в DAX.

Редактировать Просто чтобы ответить на ваши комментарии.Таким образом, как вы говорите, если у вас есть 20 единиц для вашей таблицы, вы можете выполнять только 10 заданий в секунду, если каждое задание использует 2 единицы в 1 секунду.Допустим, вы отправляете 10000 заданий, при 10 заданиях в секунду, которые будут обрабатывать все эти задания за 1000 секунд.Однако, если вы отправите более 3 456 000 заданий, это займет более 4 дней для обработки со скоростью 10 заданий в секунду.Время хранения по умолчанию для SQS составляет 4 дня, поэтому вы начнете терять сообщения / задания с такой скоростью.

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

...