Что означает новое объявление «S3 увеличенная производительность запросов»

12

17 июля 2018 года было опубликовано официальное объявление AWS, объясняющее, что больше нет необходимости рандомизировать первые символы каждого ключа объекта S3 для достижения максимальной производительности: https://aws.amazon.com/about-aws/whats-new / 2018/07 / амазонка-s3-объявляет-запрос увеличенной скорости производительность /

Amazon S3 объявляет об увеличении производительности запросов

Опубликовано: 17 июля 2018

Amazon S3 теперь обеспечивает повышенную производительность для поддержки не менее 3500 запросов в секунду для добавления данных и 5500 запросов в секунду для извлечения данных, что может сэкономить значительное время обработки без дополнительной оплаты. Каждый префикс S3 может поддерживать эти скорости запросов, что позволяет значительно повысить производительность.

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

Это повышение производительности по частоте запросов S3 устраняет любые предыдущие указания по рандомизации префиксов объектов для достижения более высокой производительности. Это означает, что теперь вы можете использовать логические или последовательные шаблоны именования в именовании объектов S3 без каких-либо последствий для производительности. Это улучшение теперь доступно во всех регионах AWS. Для получения дополнительной информации посетите Руководство разработчика Amazon S3.

Это здорово, но это также сбивает с толку. В нем говорится, что каждый префикс S3 может поддерживать эти частоты запросов, что позволяет значительно повысить производительность

Но поскольку префиксы и разделители являются просто аргументами GET Bucket (List Objects)API при перечислении содержимого сегментов, как может иметь смысл говорить о производительности поиска объекта «по префиксу». Каждый вызов GET Bucket (List Objects)может выбрать любой префикс и разделитель, который он хочет, поэтому префиксы не являются предопределенным объектом.

Например, если в моем ведре есть эти объекты:

a1/b-2
a1/c-3

Затем я могу выбрать «/» или «-» в качестве разделителя всякий раз, когда я перечисляю содержимое сегмента, поэтому я могу считать свои префиксы либо

a1/ 

или

a1/b-
a1/c-

Но поскольку GET ObjectAPI использует весь ключ, концепция конкретного префикса или разделителя не существует для извлечения объекта. Так можно ли ожидать 5500 запросов в секунду a1/или, наоборот, 5500 запросов в секунду a1/b-и 5500 вкл a1/c-?

Так может ли кто-нибудь объяснить, что подразумевается под объявлением, когда оно предлагает определенный уровень производительности (например, +5,500 запросов в секунду для извлечения данных) для «каждого префикса s3»?

Джон Рис
источник
Я думаю, у меня есть объяснение этому, но я смотрю, могу ли я найти какое-то подтверждение. Я подозреваю, что это связано с алгоритмом разбиения на разделы индекса, который является автоматическим и основан на нагрузке трафика ... и лексический, а не на основе хэша.
Майкл - sqlbot

Ответы:

9

То, что на самом деле упоминается здесь как префикс, представляется упрощением, которое действительно относится к каждому разделу индекса сегмента. Индекс является лексическим, поэтому разделение происходит на основе начальных символов в ключе объекта. Следовательно, это упоминается как префикс .

S3 управляет секциями индекса автоматически и прозрачно, поэтому точное определение «префикса» здесь на самом деле несколько неточно: «все, что S3 решит, необходимо для поддержки рабочей нагрузки вашего сегмента». S3 разделяет разделы индекса в ответ на рабочую нагрузку, поэтому два объекта, которые могут иметь один и тот же «префикс» сегодня, могут иметь разные префиксы завтра, и все это будет сделано в фоновом режиме.

Прямо сейчас, a1 / a -... и a1 / b -... и a1 / c -... могут быть все одним префиксом. Но выбросите достаточно памяти в сегмент, и S3 может решить, что раздел должен быть разделен, так что завтра a1 / a- и a1 / b- могут быть в одном префиксе, а a1 / c- - в своем собственном префиксе. (То есть ключи <a1 / c- находятся в одном разделе, а ключи> = a1 / c- теперь находятся в другом разделе).

Где и когда и, в частности, какой порог запускает разделение, документально не задокументирован, но, похоже, он связан только с количеством запросов, а не с количеством или размером объектов. Ранее эти разделы были ограничены несколькими сотнями запросов в секунду каждый, и это было значительно увеличено.

Майкл - sqlbot
источник
1
Очень интересно и правдоподобно. Однако, поскольку префиксы являются динамическими в зависимости от нагрузки, это, безусловно, лишает смысла присваивать какой-либо конкретный показатель производительности «на префикс». Если префиксы вашего сегмента изменяются динамически, то надежного показателя производительности не существует. Или, возможно, я мог бы сделать вывод, что префиксы должны теоретически меняться динамически, пока я не смогу ожидать 5500 требований в секунду на объект S3?
Джон Рис
1
Показатель производительности все еще полезен, потому что масштабирование сегмента имеет тенденцию идти только в одном направлении - вверх, а не вниз. Кажущаяся абсурдность масштабирования одного объекта на раздел в значительной степени исчезает, когда вы понимаете, сколько денег заработал бы AWS, если бы вы платили 5k + req / s за объект.
Майкл - sqlbot
1
Да, я был немного педантичен с одним объектом на раздел. :-) Однако, более серьезно, я предполагаю, что это означает, что я мог ожидать, что если мой 10000 блоков объектов содержит только 10 популярных объектов, то, надеюсь, S3 в конечном итоге будет перераспределяться, пока каждый из 10 не получит 5 тыс. Запросов / сек каждый, в то время как остальные томятся в паре больших перегородок. Правдоподобно?
Джон Рис
2
Я полностью уверен, что S3 адаптируется к нагрузке, да. Официальное руководство по увеличению трафика на стороне запроса, как и прежде, заключается в использовании CloudFront в сочетании с S3, поскольку CloudFront распределен по глобальным масштабам и будет кэшировать объекты по краям, ближайшим к зрителям, которые их запрашивают. Цена такова, что добавление CloudFront к S3 часто практически не влияет на общую стоимость (поскольку S3 не выставляет счет за пропускную способность, когда поступает запрос от CloudFront для обслуживания пропадания кэша).
Майкл - sqlbot
Спасибо, Майкл. Очень хорошие и внимательные ответы.
Джон Рис