Loading...

Хранилище · 9 мин чтения

Что такое объектное хранилище? S3-совместимое хранилище простыми словами

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

Updated

Что такое объектное хранилище? S3-совместимое хранилище простыми словами

Объектное, файловое и блочное хранилище

Блочное хранилище — это «сырой» диск: быстрый, подключённый к одной машине, и именно он нужен вашей базе данных. Файловое хранилище (NFS и подобные) — это общее дерево папок: привычно, но по мере роста блокировки и метаданные становятся узким местом. Объектное хранилище отказывается от дерева совсем — каждый объект живёт в плоском пространстве имён внутри бакета и адресуется ключом вроде «invoices/2026/08/1234.pdf». Этот ключ выглядит как путь, но это просто имя; ничему не нужно находиться «внутри» чего-то.

Именно это решение и делает масштабирование объектного хранилища таким спокойным. Нет каталога, который нужно блокировать, нет файловой системы, которую нужно проверять, нет тома, который нужно расширять. Вы платите за то, что храните, и хранилище растёт от мегабайтов до терабайтов без миграции. Компромисс: объекты заменяются целиком, а не редактируются на месте, и здесь нет POSIX-семантики — именно поэтому это неподходящий дом для живой базы данных и подходящий почти для всего остального, что ваше приложение отдаёт или архивирует.

Что на самом деле значит «S3-совместимое»

Amazon S3 вышел в 2006 году, и его HTTP API стал де-факто стандартом для объектных хранилищ так же, как SQL — для баз данных. S3-совместимый сервис реализует тот же самый API, поэтому вся экосистема, построенная вокруг S3 — AWS CLI, SDK для любого языка, rclone, restic, mc от MinIO, плагины резервного копирования, деплойеры статических сайтов — работает с ним без изменений. Вы направляете инструмент на другой URL endpoint и сохраняете все свои привычки.

Практический смысл для вас такой: на уровне инструментов нет привязки к вендору. Код, написанный под API S3, переезжает между провайдерами изменением двух строк конфигурации — endpoint и учётных данных. Это также значит, что вы можете тестировать локально на одной реализации S3, а развёртывать на другой, не трогая код приложения.

Бакеты, ключи и endpoint — три слова, которые важны

Бакет — это контейнер верхнего уровня, и его имя уникально в пределах сервиса; считайте его «диском», который вы создаёте под проект или под задачу (загрузки, резервные копии, статика). Пара ключей доступа — это то, чем программа аутентифицируется: access key ID идентифицирует её, а секретный ключ подписывает каждый запрос. Относитесь к секрету как к паролю — он показывается один раз при создании, поэтому храните его в менеджере секретов, а не в коде.

Endpoint — это URL, по которому живёт API S3. В AWS он привязан к региону (s3.eu-central-1.amazonaws.com); у других провайдеров свой — на cdn.com.tr это s3.cdn.com.tr. Любой инструмент для S3 позволяет переопределить endpoint; этот единственный флаг и есть «S3-совместимость» на практике.

Тот же AWS CLI, который вы уже знаете, — меняется только endpoint

# create a bucket
aws --endpoint-url https://s3.cdn.com.tr s3 mb s3://app-uploads

# upload and list
aws --endpoint-url https://s3.cdn.com.tr s3 cp ./photo.jpg s3://app-uploads/2026/photo.jpg
aws --endpoint-url https://s3.cdn.com.tr s3 ls s3://app-uploads/2026/

# sync a whole folder (deploys, backups)
aws --endpoint-url https://s3.cdn.com.tr s3 sync ./public s3://app-uploads/site

Что в нём хранить (и что держать снаружи)

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

Держите снаружи всё, что требует правок на месте или блокировок: живые файлы базы данных, горячие кэши с ожиданиями в доли миллисекунды и файлы, в которые процесс непрерывно дописывает. Это место блочного хранилища или управляемой базы данных; объектное хранилище принимает уже долговременные артефакты, которые они производят.

Почему перед публичными объектами место CDN

Хранение и доставка — разные задачи. Хранилище надёжно держит каноническую копию; CDN отвечает на один и тот же запрос тысячи раз с edge-точек рядом с вашими пользователями. Отдавайте популярный файл напрямую из любого хранилища — и каждое скачивание пойдёт к источнику; поставьте перед ним edge — и источник ответит примерно один раз на уникальный файл, а толпу примет на себя edge.

На cdn.com.tr это части одной платформы: бакеты можно привязывать к вашим контейнерным приложениям, а публичный контент отдаётся через тот же глобальный edge, что и остальная часть вашего аккаунта, — одна панель, один счёт и никаких сюрпризов с исходящим трафиком между вашим хранилищем и вашим CDN.

Ошибки, которые стоят людям денег

На три сценария приходится большая часть боли с объектным хранилищем. Первый — публичный бакет: оставить бакет доступным для чтения всему миру, когда в нём приватные данные. По умолчанию делайте приватным, а отдельные префиксы открывайте только тогда, когда они действительно должны быть публичными. Второй — отдача высоконагруженных файлов напрямую из хранилища у провайдеров, которые тарифицируют исходящий трафик по гигабайтам: такой счёт растёт вместе с вашим успехом, а кэш на edge впереди его выравнивает. Третий — учётные данные в коде: утёкший секретный ключ — это токен полного доступа ко всему в аккаунте. Используйте отдельные ключи под каждую задачу, храните их в переменных окружения или в менеджере секретов и меняйте любой ключ, который хотя бы подозреваете в утечке.

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

Объектное хранилище и S3-бакет — это одно и то же?

Почти. «S3» — это продукт Amazon; бакет — понятие контейнера, которое он популяризировал. Объектное хранилище — это общая категория, а поскольку большинство провайдеров реализуют API S3, «S3-бакет» в разговорной речи означает «бакет в любом S3-совместимом сервисе».

Можно ли разместить целый сайт в объектном хранилище?

Статическую часть — да: HTML, CSS, JS и изображения, отдаваемые через CDN, — классическая схема. Всему динамическому (PHP, Node.js, база данных) нужна среда выполнения; на cdn.com.tr для этого есть управляемые платформы WordPress, PHP и контейнеров, а бакет хранит статику.

Будут ли работать мои текущие инструменты S3 и код SDK?

Да — в этом и смысл S3-совместимости. Направьте AWS CLI или SDK на endpoint https://s3.cdn.com.tr с парой ключей доступа вашего бакета, и привычные команды (cp, sync, предподписанные ссылки, многочастные загрузки) будут вести себя так же.

Чем это отличается от Google Drive или Dropbox?

Это продукты синхронизации файлов для людей: приложения, диалоги «поделиться», клиенты синхронизации. Объектное хранилище — инфраструктура для программ: API, к которому обращается ваше приложение, чтобы хранить и получать объекты в больших объёмах. Вы не станете строить загрузку файлов в приложении на Dropbox и не станете синхронизировать рабочий стол с бакетом.