Как рассчитывается и ограничивается пропускная способность Amazon DynamoDB? - PullRequest
35 голосов
/ 24 февраля 2012

Среднее значение в секунду? В минуту? В час?

Например ... если я заплачу за 10 "единиц чтения", которые позволяют 10 высокосогласованных операций чтения в секунду, я буду ограничен, если попытаюсь выполнить 20 операций чтения за одну секунду, даже если это были только 20 операций чтения что произошло в последний час? Документация и часто задаваемые вопросы об Амазонке нигде не отвечают на этот критически важный вопрос.

Единственный связанный с этим ответ, который я нашел в FAQ, полностью игнорирует вопрос о том, как рассчитывается использование и когда может произойти регулирование:

В: Что произойдет, если мое приложение выполнит больше операций чтения или записи, чем моя обеспеченная мощность?

A: Если ваше приложение выполняет больше читает / секунду или пишет / секунду, чем обеспеченная пропускная способность вашей таблицы емкость позволяет, запросы выше вашей подготовленной емкости будут душится, и вы получите 400 кодов ошибок. Например, если вы попросил 1000 единиц записи мощности и попытаться сделать 1500 записывает в секунду 1 КБ элементов, DynamoDB будет разрешать только 1000 пишет / секунду, чтобы пройти, и вы получите код ошибки 400 на ваши дополнительные запросы. Вы должны использовать CloudWatch для мониторинга вашего запроса Оцените, чтобы у вас всегда была достаточная пропускная способность достигните необходимой частоты запросов.

Ответы [ 7 ]

44 голосов
/ 02 октября 2013

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

Я провел некоторое тестирование.Я создал тестовую таблицу с пропускной способностью 1 запись в секунду.Если я некоторое время не пишу в него, а затем отправляю поток запросов, Amazon, похоже, примет около 300, прежде чем начнет регулировать.

Предупреждение, конечно, заключается в том, что это не указано ни в одномофициальная документация Amazon и может измениться в любое время.

10 голосов
/ 20 февраля 2015

DynamoDB предоставляет «Burst Capacity», который позволяет пики в объеме данных, считанных из таблицы. Вы можете прочитать больше об этом в: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

В основном это то, что заметил @abjennings - он использует 5-минутное окно для усреднения количества чтений из таблицы.

9 голосов
/ 24 февраля 2012

Если я заплачу за 10 «единиц чтения», то есть 10 чтения в секунду, я буду задушен, если я попытаюсь сделать 20 чтений в одну секунду, даже если это было только 20 чтений, которые произошли в последний час?

Да, это связано с тем, что Amazon DynamoDB означает быструю и предсказуемую производительность с плавной масштабируемостью - цитируемый FAQ фактически уже исправляет эту проблему (т.е. принимать буквально операции / секунду), хотя расчет лучше проиллюстрирован в Предоставленная пропускная способность в Amazon DynamoDB , действительно:

Емкость записи позволяет выполнять одну запись в секунду для предметов размером до 1 КБ . Точно так же единица считываемой емкости позволяет выполнять одно строго последовательное чтение в секунду (или два в конечном итоге постоянное чтение в секунду) элементов размером до 1 КБ. Более крупные предметы потребуют большей вместимости. Вы можете рассчитать количество единиц чтения и записи емкости вам нужно, оценивая количество чтения или записи, которые вам нужно сделать в секунду и умножения на размер ваших предметов (с округлением до ближайшего КБ).

Единицы емкости, необходимые для записи = Количество записей элемента в второй x размер элемента (округляется до ближайшего КБ)

Единицы вместимости требуется для чтения * = количество операций чтения в секунду x размер элемента (округляется до ближайшего КБ) * Если вы в конечном итоге будете использовать согласованные чтения, вы получите удвоенную пропускную способность в единицах операций чтения в секунду.

[Акцент мой]

Получение этих расчетов для реальных случаев использования потенциально сложно, хотя, пожалуйста, не забудьте проверить более подробную информацию, например, например. Рекомендации по пропускной способности в Amazon DynamoDB , а также соответственно.

1 голос
/ 31 декабря 2016

С AWS :

DynamoDB в настоящее время сохраняет до пяти минут (300 секунд) неиспользованной емкости для чтения и записи

DynamoDB обеспечивает некоторую гибкость вобеспечение пропускной способности.Когда вы не полностью используете пропускную способность раздела, DynamoDB сохраняет часть вашей неиспользованной емкости для последующих пакетов пропускной способности.DynamoDB в настоящее время сохраняет до пяти минут (300 секунд) неиспользованной емкости чтения и записи.Во время периодического всплеска операций чтения или записи эти дополнительные единицы емкости могут потребляться очень быстро - даже быстрее, чем выделенная пропускная способность в секунду, которую вы определили для своей таблицы.Однако не проектируйте свое приложение так, чтобы оно зависело от доступности пакетной емкости в любое время: DynamoDB может и использует пакетную емкость для фонового обслуживания и других задач без предварительного уведомления.

1 голос
/ 24 февраля 2012

Полагаю, они специально не заявляют об этом прямо. Вероятно, это может измениться / иметь региональные различия / зависеть от положения луны и звезд, или публикация информации будет стимулировать злоупотребления. Я сделал бы мои вычисления на основе худшего сценария.

0 голосов
/ 20 марта 2017

https://aws.amazon.com/blogs/developer/rate-limited-scans-in-amazon-dynamodb/

Возможно использование библиотеки гуавы Google для использования класса rateLimiter для ограничения потребляемой мощности.

0 голосов
/ 05 апреля 2012

Мы установили наш write-limit на 10 units/sec для одной из таблиц. График Cloudwatch ( см. Изображение ) показывает, что мы превысили это значение на одну единицу (11 writes/sec). Я предполагаю, что есть небольшая комната для маневра (<= 10%). Опять же, я просто предполагаю ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...