Объектное, файловое и блочное хранилище
Блочное хранилище — это «сырой» диск: быстрый, подключённый к одной машине, и именно он нужен вашей базе данных. Файловое хранилище (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 и не станете синхронизировать рабочий стол с бакетом.