Как повысить производительность хранилища объектов?

В этой статье вы найдете несколько рекомендаций о том, как добиться максимальной производительности вашего хранилища объектов.

Используйте сеть доставки контента (CDN)

Когда это делать?

CDN, или сеть доставки контента кэширует активы в географически распределенных местах, чтобы ускорить загрузку файлов страниц для ваших пользователей.

Вы должны использовать CDN, если вам нужно обслуживать много запросов GET из Интернета (особенно это касается частых запросов к небольшим файлам).

Например, производительность приложений, ориентированных на веб-интерфейс и медиа-серверы, с добавлением CDN улучшится особенно заметно.

Как это улучшает производительность?

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

CDN будет получать запрошенные файлы из хранилища и кэшировать их ближе к конечным пользователям. Обслуживая будущие запросы файлов из кеша CDN, вы уменьшаете количество запросов GET, отправленных в хранилище, и, следовательно, уменьшаете общую задержку при взаимодействии с вашим приложением.

Как это реализовать?

Несколько сторонних сервисов CDN предлагают хорошую документацию, например Fastly и KeyCDN. В целом, хранилища легко интегрируются с CDN.

Избегайте небольших файлов и используйте составную загрузку для больших файлов

Когда это делать?

Вы должны учитывать размер ваших файлов и способ их загрузки в хранилище, если вы:

  • Обрабатываете файлы размером менее 1 МБ.
  • Загружаете файлы размером более 500 МБ.

Как это улучшает производительность?

Хранилища объектов предназначены для хранения и обслуживания файлов умеренного или большого размера. Файлы размером 20 МБ — 200 МБ будут обеспечивать максимальную производительность как в записи, так и при чтении. Кроме того, объединение небольших файлов в один более крупный файл значительно уменьшит общее количество запросов к хранилищу; это гораздо лучше, чем обрабатывать много небольших файлов по отдельности.

Как это реализовать?

При загрузке файлов размером более 500 МБ вы должны использовать multi-part загрузку.

Рекомендуется объединять файлы размером менее 1 МБ в один, более крупный файл. Как вы это сделаете, зависит от ваших файлов и требований. К примеру, удобно объединять ежедневные логи в единый файл за месяц.

Выберите правильный центр обработки данных для ваших ресурсов

Когда это делать?

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

Если вы подключаетесь к хранилищу с удаленного сервера, производительность будет выше, если облачный сервер и хранилище будут находиться в одном ЦОД (это идеальный вариант).

Если соединения с хранилищем – это подключения конечных пользователей в Интернете, вы увеличите производительность при помощи CDN, независимо от того, в каком регионе находится хранилище.

Как это улучшает производительность?

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

Как это реализовать?

Выбрать регионы для своих ресурсов можно во время создания хранилища. Если вы хотите изменить регион существующей инфраструктуры, вы можете мигрировать хранилище.

Правильно обрабатывайте ошибки 50x

Когда это делать?

Эта рекомендация касается любых загрузок файлов в хранилище. Вы всегда должны проверять, как приложение или библиотека загрузки обрабатывает ошибки 50x.

Как это улучшает производительность?

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

Как это реализовать?

Если ваше хранилище совместимо с S3, вы можете использовать S3-совместимый клиент или библиотеку для ваших загрузок, например s3cmd.

Если вы пишете свой собственный код, убедитесь, что реализуете логику повторного выполнения операции с экспоненциальной выдержкой для обработки ответов 503 Slow Down.

Оптимизируйте request rate

Когда это делать?

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

  • Вы отправляете более 200 запросов в секунду.
  • Ваши запросы ограничены в скорости.
  • Вы часто сталкиваетесь с ответами 503 Slow Down.

Как это улучшает производительность?

Чтобы все клиенты в любом регионе получали необходимую долю пропускной способности хранилища, провайдеры хранилищ объектов ограничивают скорость на уровне хранилища. Убедитесь, что ваши загрузки остаются в пределах порогового значения, чтобы предотвратить троттлинг.

Как это реализовать?

Существует несколько способов оптимизировать количество отправляемых вами запросов в зависимости от вашего варианта использования хранилища.

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

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

Если вы планируете отправлять в хранилище более 200 запросов в секунду (регулярно или в рамках одноразовой загрузки), вы можете попросить техподдержку провайдера помочь вам подготовиться к рабочей нагрузке и избежать временных ограничений.

Используйте локальное или блочное хранилище вместо хранилища объектов

Когда это делать?

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

Используйте локальное или блочное хранилище, если:

  • Вы храните динамические или структурированные данные, такие как хранилища типа «ключ-значение» с низкой задержкой и базы данных.
  • Нужна высокая скорость запроса данных, например потоковое видео.

Как это улучшает производительность?

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

Как это реализовать?

Попробуйте использовать тома данных или почитайте о технологиях хранения данных Linux.

Если вам нужно средство для работы с базами данных, попробуйте Redis или Cassandra.

Читайте также:

Дальнейшие действия

Управлять хранилищем объектов вас научат эти мануалы:

Также могут пригодиться эти мануалы: