Объектное хранилище — это технология для удобного и надежного хранения большого объема данных.
Как хранятся данные?
Количество генерируемых человечеством данных растет с каждым годом, что побуждает развивать технологии хранения. На текущий момент доступно множество решений для хранения информации любой сложности. Рассмотрим их в общих чертах.
Файловая система
Файловая система — самый простой и известный способ структурированного хранения данных. Файловые системы используются для хранения данных на персональных компьютерах, серверах и мобильных устройствах.
К обычным файловым системам имеют доступ все пользователи в пределах одного устройства. Для общего доступа используются особые расширения в виде сетевых файловых систем — например, Network File System (NFS).
Достоинства файловых систем очевидны:
- это привычный способ хранения, не требующий высокой квалификации для настройки.
Но недостатков существенно больше.
- ограничение на размер файла,
- ограничение на количество файлов в хранилище,
- плохая масштабируемость.
Файловая система — хорошее решение для начала, но с ростом объема данных этот способ вызывает все больше проблем.
Блочное хранилище
Блочное хранение — это способ хранения информации «кусочками», или блоками, на физических накопителях. Этот способ хранения используют специализированные программные продукты, чаще всего — базы данных и гипервизоры.
При использовании подхода данные хранятся в «сыром» виде. Отсутствие дополнительных абстракций вроде файловых систем значительно повышает производительность. Также отсутствие абстракций упрощает масштабирование хранилища: добавить пару новых дисков значительно легче.
Тем не менее, данный способ не лишен недостатков.
- сложен в настройке,
- требует узкой специализации,
- необходимо следить за свободным местом и своевременно увеличивать объем хранилища.
Все это не позволяет использовать блочное хранилище для любых задач.
Объектное хранилище
Объектное хранилище — решение для надежного хранения данных большого объема. Объектное хранилище предоставляет контейнеры — в некотором смысле бездонную бочку, в которую можно складывать файлы любых типов — объекты. Такой вид хранилища имеет множество достоинств.
- практически неограниченный объем,
- резервирование данных и географически распределенное хранение,
- возможность добавить любые метаданные к файлу.
Но и тут есть ложка дегтя. Несмотря на широкое распространение, для работы с объектным хранилищем требуется специализированное ПО в правильной конфигурации. Также объектное хранилище имеет ограниченную скорость в сравнении с блочным хранилищем. Размещать базу данных на объектном хранилище будет нецелесообразно.
Объектное хранилище имеет множество различных интерфейсов взаимодействия, о них мы поговорим позднее.
Почему бизнес выбирает облачное объектное хранилище?
Объектные хранилища набирают популярность не только среди компаний, но и обычных пользователей. Почему так? Разберем на примере.
Сценарии использования объектного хранилища
Хранение личных данных и бэкапы. Объектное хранилище не ограничено в объемах и распределено между множеством серверов, что позволяет хранить резервные копии любых размеров. Более того, резервная копия не обязательно должна быть архивом. Объектное хранилище поддерживает версионирование, что позволяет загружать, например, файл с дипломом, а потом обращаться к более старой версии (то есть осуществить ее восстановление). При этом тарифицируется только занятое место.
Сеть доставки статического контента. Объектные хранилища позволяют получать файлы по протоколу HTTP. Это может быть полезно для создания, например, фотобанка. Логика сайта размещается на отдельном сервере, а контент — в объектном хранилище. В этом случае географическая распределенность серверов хранилища выступает в качестве сети доставки контента (CDN), ускоряя загрузку данных для пользователей по всему миру.
Статические сайты. Как отмечалось ранее, объектное хранилище может размещать файлы любого типа и объема и отдавать их через HTTP. Это значит, что в объектном хранилище можно разместить файлы статического сайта-визитки, привязать к этим файлам пользовательский домен и получить простейший веб-хостинг.
Big Data. Обработка больших данных нередко производится кластером вычислительных машин, которые обмениваются данными. Для обмена данными можно использовать объектное хранилище: один узел кластера загружает данные в хранилище и передает идентификатор объекта следующему узлу.
Безопасность, персональные данные и 152-ФЗ
Все выглядит хорошо, пока облачным хранилищем пользуется один человек. Но что делать бизнесу, у которого десятки или даже сотни сотрудников? К счастью, объектное хранилище предоставляет возможность разграничения прав. Для каждого контейнера можно задать список пользователей и их права доступа: чтение или чтение и запись.
Однако объектное хранилище находится под управлением провайдера инфраструктуры и обслуживается им, что приводит к вопросам о безопасности хранимых данных. Соответствие 152-ФЗ обозначает, что данные в хранилище надежно защищены от неавторизованного доступа на физическом уровне, а также обеспечивается безопасность сетевой инфраструктуры на уровне программного обеспечения.
Объектное хранилище Selectel соответствует 152-ФЗ для обработки персональных данных 3 и 4 уровня защищенности. Обратите внимание, что безопасность системы определяется безопасностью самого слабого звена. Если контейнер с важными данными имеет слабый пароль, то никакие другие усилия не помогут сохранить данные в безопасности.
Храните данные и бэкапы
Как начать работу с объектным S3-совместимым хранилищем?
Объектное хранилище имеет множество интерфейсов для взаимодействия. Нередко говорят о S3-совместимом объектном хранилище.
S3 (Simple Storage Service) — это объектное хранилище, разработкой которого занимался крупный американский провайдер инфраструктуры. Релиз состоялся в 2006 году. У этого хранилища есть собственный интерфейс доступа — S3 API. Любое хранилище, которое поддерживает обращения по S3 API, можно называть S3-совместимым.
Вернемся к интерфейсам взаимодействия с объектным хранилищем. Рассмотрим на примере объектного хранилища Selectel.
Доступ через веб-интерфейс

Панель управления позволяет выполнять простые операции над объектным хранилищем и контейнерами. Для начала хранения данных ваших приложений необходимо создать первый контейнер нажатием на кнопку Создать контейнер.


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

Загрузка файлов в объектное хранилище через веб-интерфейс интуитивна. Такой способ имеет существенное ограничение: размер загружаемых файлов не должен превышать 100 МБ.
Файлами могут выступать данные совершенно разных форматов: от txt до мультимедийного контента — аудио, видео, изображений. Можно загружать и архивные файлы форматов tar, tar.gz, tar.bz2 — они распакуются при загрузке. Если файлов слишком много, нужный можно найти через поиск.

Однако веб-интерфейс удобно использовать для первоначальной конфигурации контейнера. На вкладке Настройки контейнера можно увидеть доступные настройки. Для доступа к контейнеру через другие интерфейсы рекомендуется создать отдельного пользователя.


На странице Пользователи есть возможность создать пользователя и дать права на определенные контейнеры. По умолчанию созданный пользователь не имеет доступа по S3 API, однако это можно изменить, выставив соответствующий пункт в форме.
Дополнительные пользователи объектного хранилища всегда имеют префикс в виде номера аккаунта.
Доступ по FTP/FTPS/SFTP
К хранилищу можно получить доступ через FTP. Для этого используется домен ftp.selcdn.ru или sftp.selcdn.ru. Обратите внимание, что FTP — это прокси к существующим интерфейсам объектного хранилища — Swift API и S3 API.
Более подробно — в базе знаний.
Доступ по S3 API: загружаем файлы через Rclone
Для взаимодействия с S3 API требуется дополнительное программное обеспечение — например, aws-cli, S3cmd или Rclone. Рассмотрим подключение к S3 API объектного хранилища через Rclone.
Сперва нужно создать конфигурацию для подключения.
$ rclone config
2022/11/30 13:24:58 NOTICE: Config file "/home/voldemar/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> selectel
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
…
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ "s3"
…
Storage> 4
Выбираем n для создания новой конфигурации и задаем имя для подключения к удаленному хранилищу. Выбираем тип хранилища. В нашем случае это S3-совместимое, то есть пункт 4.
Choose your S3 provider.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
…
10 / Any other S3 compatible provider
\ "Other"
provider> 10
Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
Only applies if access_key_id and secret_access_key is blank.
Enter a boolean value (true or false). Press Enter for the default ("false").
Choose a number from below, or type in your own value
1 / Enter AWS credentials in the next step
\ "false"
2 / Get AWS credentials from the environment (env vars or IAM)
\ "true"
env_auth> 1
Конфигуратор предложит выбрать один из известных ему провайдеров, но хранилища Selectel там нет. Поэтому выбираем пункт 10 — Other. Отмечаем, что задаем данные для доступа на следующем шагу (пункт 1).
AWS Access Key ID.
Leave blank for anonymous access or runtime credentials.
Enter a string value. Press Enter for the default ("").
access_key_id> xxxxx_Barsik
AWS Secret Access Key (password)
Leave blank for anonymous access or runtime credentials.
Enter a string value. Press Enter for the default ("").
secret_access_key> Пароль
Region to connect to.
Leave blank if you are using an S3 clone and you don't have a region.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Use this if unsure. Will use v4 signatures and an empty region.
\ ""
2 / Use this only if v4 signatures don't work, eg pre Jewel/v10 CEPH.
\ "other-v2-signature"
region> ru-1
Endpoint for S3 API.
Required when using an S3 clone.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
endpoint> https://s3.storage.selcloud.ru
Заполняем данные для подключения.
- AWS Access Key ID — имя пользователя,
- AWS Secret Access Key — пароль/ключ,
- Region — ru-1,
- Endpoint — https://s3.storage.selcloud.ru.
После ввода данных для доступа Rclone задаст пару дополнительных вопросов, на которые можно не отвечать, то есть оставить пустую строку. Последним вопросом будет продвинутое редактирование конфигурации.
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
--------------------
[selectel]
provider = Other
env_auth = false
access_key_id = xxxxx_Barsik
secret_access_key = Пароль
region = ru-1
endpoint = https://s3.storage.selcloud.ru
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d>
Отказываемся от продвинутого редактирования файла конфигурации и сверяем данные. Если все в порядке, соглашаемся на создание.
Теперь с помощью Rclone можно загружать файлы. Например, загрузим файл barsik.jpg в контейнер с именем test, который был создан ранее.
$ rclone copy barsik.jpg selectel:test
Команда ничего не вывела, но код возврата 0. Заглянем в веб-интерфейс хранилища.

Файл barsik.jpg успешно загружен!
Полезные ссылки для размещения данных в хранилище S3
→ Как монтировать контейнер объектного хранилища как диск Windows