Что такое объектное хранилище S3 и для чего используется

Что такое объектное хранилище S3

Рассказали, что такое объектное хранилище S3 и как с ним работать.

Изображение записи

Объектное хранилище — это технология для удобного и надежного хранения большого объема данных.

Изначально технология была разработана компанией AWS в 2006 году как API для простого доступа к объектам с помощью уникальных URL по HTTP или HTTPS.  Сегодня объектное хранилище S3 — это одно из самых популярных решений в области облачного хранения данных для работы сервисов и их бэкапов. Технология позволяет не только хранить терабайты данных, но и масштабироваться на лету.

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

Как хранятся данные?

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

Файловая система

Файловая система — самый простой и известный способ структурированного хранения данных. Файловые системы используются для хранения данных на персональных компьютерах, серверах и мобильных устройствах.

К обычным файловым системам имеют доступ все пользователи в пределах одного устройства. Для общего доступа используются особые расширения в виде сетевых файловых систем — например, Network File System (NFS).

Достоинство файловых систем очевидно — это привычный способ хранения, не требующий высокой квалификации для настройки.

Но недостатков существенно больше:

→ ограничение на размер файла,

→ ограничение на количество файлов в хранилище,

→ плохая масштабируемость.

Файловая система — хорошее решение для начала, но с ростом объема данных этот способ вызывает все больше проблем.

Блочное хранилище

Блочное хранение — это способ хранения информации кусочками, или блоками, на физических накопителях. Его используют специализированные программные продукты, чаще всего — базы данных и гипервизоры.

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

Тем не менее, данный способ не лишен недостатков:

→ сложен в настройке,

→ требует узкой специализации,

→ необходимо следить за свободным местом и своевременно увеличивать объем хранилища.

Все это ограничивает использование блочного хранилища для любых задач.

Объектное хранилище

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

→ практически неограниченный объем,

→ резервирование данных и географически распределенное хранение,

→ возможность добавить любые метаданные к файлу.

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

Объектное хранилище имеет множество различных интерфейсов взаимодействия, о них мы поговорим позднее.

Что же такое объекты?

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

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

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

Особенности объектного хранилища S3

Объектное хранилище можно определить еще проще. Это HTTP-API, который позволяет загружать, получать и удалять данные по имени. То есть фактически это KV-хранилище для больших кусков данных (BLOB).

Что важно отметить.

  • Объектное хранилище гарантирует доступность и целостность данных.
  • Пользователь может хранить условно бесконечное количество данных — терабайты, а иногда и петабайты.
  • S3 имеет плоское пространство имен без вложенности на уровне идентификаторов. Объекты можно разделить по контейнерам, не более. 

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

HTTP-API делает объектное хранилище более высокоуровневым в плане использования. Любой может реализовать свой простой протокол или обратиться к хранилищу вручную — через curl или telnet.

Классы объектных хранилищ и тарифы

Рассмотрим на примере решения Selectel. Облачные хранилища S3 можно разделить на холодные и стандартные. 

  • Холодный класс хранилища применяют для хранения редко используемых данных — резервных копий, архивов. Стоимость хранения ниже, но запросы и трафик дороже. 
  • Стандартный класс хранилища применяют для хранения и раздачи часто используемых данных. В стандартном хранилище стоимость трафика и запросов ниже, но хранение дороже, чем в холодном. 

Важно. Объектное хранилище S3 по умолчанию позволяет создавать до 2 000 контейнеров и хранить данные в трех экземплярах независимо от класса хранения.

Почему бизнес выбирает облачное объектное хранилище?

Объектные хранилища набирают популярность не только среди компаний, но и обычных пользователей. Почему так? Разберем на примере.

Сценарии использования объектного хранилища

Хранение личных данных и бэкапы. Объектное хранилище не ограничено в объемах и распределено между множеством серверов, что позволяет хранить резервные копии любых размеров. Более того, резервная копия не обязательно должна быть архивом. Объектное хранилище S3 поддерживает версионирование, с помощью которого можно загружать, например, файл с дипломом, а потом обращаться к более старой версии (то есть осуществить ее восстановление). При этом тарифицируется только занятое место.

Сеть доставки статического контента. Объектные хранилища позволяют получать файлы по протоколу HTTP. Это может быть полезно для создания, например, фотобанка. Логика сайта размещается на отдельном сервере, а контент — в объектном хранилище. В этом случае географическая распределенность серверов хранилища выступает в качестве сети доставки контента (CDN), ускоряя загрузку данных для пользователей по всему миру.

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

Big Data. Обработка больших данных нередко производится кластером вычислительных машин, которые обмениваются данными. Для обмена данными можно использовать объектное хранилище: один узел кластера загружает данные в хранилище и передает идентификатор объекта следующему узлу.

Адаптивные к нагрузкам системы. Масштабирование ресурсов происходит автоматически. В случае резкого всплеска трафика — например, во время Черной пятницы — ресурсы мгновенно пополнятся. Так можно одновременно обрабатывать большое число пользователей.

Безопасность, персональные данные и 152-ФЗ

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

Однако объектное хранилище находится под управлением провайдера инфраструктуры и обслуживается им, что приводит к вопросам о безопасности хранимых данных. Соответствие 152-ФЗ обозначает, что данные в хранилище надежно защищены от неавторизованного доступа на физическом уровне, а также обеспечивается безопасность сетевой инфраструктуры на уровне программного обеспечения.

Объектное хранилище Selectel соответствует 152-ФЗ для обработки персональных данных 3 и 4 уровня защищенности. Обратите внимание, что безопасность системы определяется безопасностью самого слабого звена. Если контейнер с важными данными имеет слабый пароль, то никакие другие усилия не помогут сохранить данные в безопасности.

Другие преимущества объектного хранилища S3

Кроме высокого уровня безопасности и защиты персональных данных, в объектном хранилище Selectel есть другие преимущества. 

Гибкая оплата. Объектное хранилище оплачивается по модели pay-as-you-go — каждый час списывается сумма за ресурсы, потребленные за это время.

Простота использования. Пользователь может подключиться к объектному хранилищу любым удобным способом. Через S3 API, Swift API и Selectel Storage API, протоколы FTP/FTPS, SFTP и панель управления Selectel. 

Встроенная IAM-система. Вы сами управляете доступом к данным: можете выдавать его одним пользователям и ограничивать другим. 

Настройки политик хранения данных. В объектном хранилище легко настраивать политики хранения — устанавливать ограничения на время хранения объектов, правила их удаления и восстановления.

Объектное хранилище обеспечивает отказоустойчивость — храним данные в трех экземплярах. Созданные копии размещаем на независимых друг от друга серверах в разных стойках.

Лимиты и квоты

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

Всего одновременно можно совершать до 2000 запросов в секунду — по S3 API и Swift API — и создавать до 2000 контейнеров. Больше подробностей про лимиты и квоты читайте в документации.

Как начать работу с объектным S3-совместимым хранилищем

Объектное хранилище имеет множество интерфейсов для взаимодействия. Нередко говорят о S3-совместимом объектном хранилище. У этого хранилища есть собственный интерфейс доступа — S3 API. Любое хранилище, которое поддерживает обращения по S3 API, можно называть S3-совместимым.

Вернемся к интерфейсам взаимодействия с объектным хранилищем. Рассмотрим на примере объектного хранилища Selectel.

Доступ через веб-интерфейс

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

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

Чтобы загрузить файлы в хранилище, нажмите на его название, а затем Загрузить файлы. Обратите внимание, чтобы размер загружаемых файлов не превышал 100 МБ.

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

Доступ по 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

→ Как монтировать контейнер объектного хранилища в Linux

→ Миграционные каникулы в объектном хранилище Selectel