Что такое объектное хранилище и чем оно отличается от диска
Основы3 минРедакция Innovialabs
Коротко
Объектное хранилище хранит файлы как отдельные объекты с ключом и метаданными в бакетах и отдаёт их по 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 перед хранилищем.
- Архивный класс для файлов, которые часто читают. Экономия на хранении съедается платой за извлечение.
- Без версионирования для важных данных. Включите версии объектов, чтобы восстановить случайно перезаписанный файл.