раздел 04

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

Что это

Объектное хранилище - это отдельный сервис для хранения файлов: картинок, видео, документов, бэкапов. Вы кладёте туда файл (объект), а сервис отдаёт на него ссылку. Самый известный стандарт - S3 (Simple Storage Service от Amazon), и почти все провайдеры дают «S3-совместимое» хранилище, которое работает по тому же протоколу.

Ключевые понятия

  • Бакет (bucket) - папка-контейнер верхнего уровня, в которой лежат ваши файлы. У бакета есть имя и регион.
  • Объект - сам файл внутри бакета плюс его метаданные.
  • Ключи доступа (access key + secret key) - пара «логин-пароль» для программного доступа. Приложение использует их, чтобы загружать и читать файлы. Их нельзя светить в коде.
  • Endpoint - адрес, по которому обращаются к хранилищу.

Чем отличается от диска сервера

Диск сервераОбъектное хранилище (S3)
Что хранитСистему, код, БД, временные файлыПользовательские файлы, медиа, бэкапы
ОбъёмФиксированный, надо докупатьПрактически безлимитный, платите за факт
ДоступТолько через сам серверПрямая ссылка, доступно отовсюду
НадёжностьЗавязан на один серверРеплицируется, переживает падение сервера
ЦенаВходит в тариф сервераОтдельно, обычно дёшево за гигабайт

Зачем

  • Видео и картинки. Не забивают диск сервера, отдаются напрямую пользователю, не нагружая ваш сервер.
  • Бэкапы. Складываете дампы базы и архивы в хранилище - они переживут даже потерю сервера.
  • Загрузки пользователей. Аватары, документы, вложения - всё это логично хранить в S3, а не на диске.

Пример

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

Антипаттерны

  • Хранить пользовательские загрузки на диске сервера. Диск заполнится, пересоздадите сервер - потеряете файлы.
  • Класть ключи доступа в код или в Git. Это утечка. Держите их в переменных окружения и .env, который не коммитится.
  • Делать бакет публичным «на всякий случай». Открывайте доступ только к тому, что реально должно быть публичным.

Что дальше

Теперь посмотрим на конкретных провайдеров - кто даёт серверы и хранилища, для кого они и сколько стоят. Практику по S3 на конкретной платформе смотрите в курсах Selectel и DigitalOcean, а про данные в целом - в курсе Хранение данных.