Рекомендации по улучшению производительности OBS
Данные в Object Storage Service (OBS) распределяются по партициям — логическим разделам хранилища. Управление партициями осуществляется на основе уникальных идентификаторов объектов в кодировке UTF-8.
Уникальный идентификатор каждого объекта состоит из:
названия бакета;
пути до объекта;
названия объекта.
Например:
bucket-name/path/to/object/object-name
Где:
bucket-name — название бакета.
path/to/object — путь до объекта.
ПримечаниеOBS — плоское, не иерархическое хранилище, в котором нет каталогов. Несмотря на это, с помощью префиксов и разделителей можно создать подобие файловой системы для организации данных в хранилище.
object-name — название объекта.
Если все объекты находятся в одном каталоге, запросы на доступ к объектам могут быть обращены только к одной партиции. Это может снизить скорость выполнения запросов и увеличить задержку доступа к данным в таких партициях.
Чтобы запросы равномерно распределялись по партициям, для именования объектов рекомендуется использовать случайные префиксы.
Допустим, в OBS ежедневно загружаются архивы с логами. Все файлы загружаются в каталог obslog. Файлы именуются с использованием даты и порядкового номера архива за день. Структура такого хранилища будет выглядеть следующим образом:
yourbucket/obslog/20190610-01.log.tar.gzyourbucket/obslog/20190610-02.log.tar.gzyourbucket/obslog/20190610-03.log.tar.gzyourbucket/obslog/20190610-04.log.tar.gz...yourbucket/obslog/20190611-01.log.tar.gzyourbucket/obslog/20190611-02.log.tar.gzyourbucket/obslog/20190611-03.log.tar.gzyourbucket/obslog/20190611-04.log.tar.gz
Такой способ именования данных соберет все файлы в одной партиции. Обращение к файлам может привести к снижению производительности сервиса, так как все запросы будут сконцентрированы в одной партиции.
Чтобы избежать этой проблемы, можно загружать файлы не в один каталог obslog, а в разные. В именовании этих каталогов можно использовать префикс в виде шестнадцатеричный хеша из трех или более символов:
yourbucket/6ac-obslog/20140610-01.log.tar.gzyourbucket/b42-obslog/20140610-02.log.tar.gzyourbucket/17f-obslog/20140610-03.log.tar.gzyourbucket/ac9-obslog/20140610-04.log.tar.gz...yourbucket/95d-obslog/20140611-01.log.tar.gzyourbucket/4a5-obslog/20140611-02.log.tar.gzyourbucket/ea2-obslog/20140611-03.log.tar.gzyourbucket/ba3-obslog/20140611-04.log.tar.gz
Таким образом при обращении к файлам в бакете запросы будут распределяться между несколькими партициями, что снизит нагрузку на производительность сервиса.