Перейти к содержанию
Innovialabs

Что такое объектное хранилище и чем оно отличается от диска

Основы3 мин

Коротко

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

Короткий ответ

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

Самый известный пример — Amazon S3. Его API стал фактическим стандартом, и многие провайдеры предлагают S3-совместимые хранилища: Google Cloud Storage (в режиме совместимости), Cloudflare R2, DigitalOcean Spaces, Backblaze B2, MinIO для собственного сервера и другие.

Бакеты, объекты и метаданные

  • Бакет — контейнер верхнего уровня с собственными настройками доступа, региона и политик хранения.
  • Объект — файл плюс его описание. Ключ может выглядеть как путь: uploads/2026/avatar-123.jpg. Но это просто строка: настоящих папок нет, «папки» в интерфейсе — лишь отображение префиксов.
  • Метаданные — тип содержимого (Content-Type), заголовки кэширования, произвольные пары ключ–значение.

Объект обычно не редактируют частично: чтобы изменить файл, его загружают заново целиком.

Чем отличается от файловой системы

Диск сервера (файловая система)Объектное хранилище
СтруктураИерархия папокПлоское пространство ключей в бакете
ДоступЧерез ОС, только с этого сервераПо HTTP-API из любого места
ИзменениеМожно дописывать и править куски файлаОбъект заменяется целиком
ОбъёмОграничен размером дискаПрактически не ограничен, растёт автоматически
НадёжностьЗависит от одного сервера и бэкаповДанные реплицируются провайдером
Подходит дляОС, базы данных, временные файлыМедиа, загрузки, бэкапы, статика, архивы

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

S3-совместимый API

Совместимость означает, что одни и те же SDK и инструменты работают с разными провайдерами — меняется только адрес (endpoint) и ключи доступа. Например, через AWS CLI:

# загрузить файл
aws s3 cp ./report.pdf s3://my-bucket/reports/report.pdf

# список объектов с префиксом
aws s3 ls s3://my-bucket/reports/

# тот же CLI с другим S3-совместимым провайдером
aws s3 ls s3://my-bucket/ --endpoint-url https://storage.example-provider.com

Для приватных файлов используют pre-signed URL — временную ссылку, по которой пользователь может скачать или загрузить конкретный объект без ключей доступа.

Классы хранения

Провайдеры предлагают несколько классов хранения под разные сценарии:

  • Стандартный (hot) — для файлов, к которым обращаются часто.
  • Нечастого доступа (infrequent access) — хранение дешевле, но чтение стоит дороже, бывает минимальный срок хранения.
  • Архивный (cold, archive) — самое дешёвое хранение, но получение файла может занимать от минут до часов и стоит дополнительно.

Правила жизненного цикла (lifecycle) автоматически переводят старые объекты в более дешёвые классы или удаляют их. Набор классов и условия у провайдеров разные — смотрите их документацию.

Когда хранить файлы в объектном хранилище

  • Загрузки пользователей: аватары, документы, фото товаров.
  • Медиа сайта: изображения и видео, особенно вместе с CDN.
  • Бэкапы баз данных и серверов.
  • Логи и архивы, которые нужно долго хранить.
  • Несколько серверов или контейнеров должны видеть одни и те же файлы.
  • Serverless-приложения, у которых нет постоянного диска.

Главный практический плюс: сервер становится «одноразовым». Его можно пересоздать или масштабировать, не теряя файлы.

Частые ошибки

  • Публичный бакет по ошибке. Делайте бакеты приватными по умолчанию и открывайте доступ точечно.
  • Ключи доступа в коде фронтенда. Для загрузки из браузера используйте pre-signed URL.
  • Неучтённый исходящий трафик. Плата за скачивание данных у многих провайдеров заметнее, чем за хранение. Помогает CDN перед хранилищем.
  • Архивный класс для файлов, которые часто читают. Экономия на хранении съедается платой за извлечение.
  • Без версионирования для важных данных. Включите версии объектов, чтобы восстановить случайно перезаписанный файл.

Частые вопросы

Существуют утилиты, которые монтируют бакет как папку, но это эмуляция: операции медленнее, а частичная запись файлов работает плохо. Для приложений лучше обращаться к хранилищу напрямую через API или SDK.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

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

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.