Файлы теперь лежат в ведрах
Раньше, когда пользователь загружал картинки на сайт, картинки сохранялись в папку на том же сервере. У популярных сайтов диски быстро заполнялись и требовалось следить за этим. Далее серверы начали упираться в ограничения на количество файлов в папке и на количество папок на диске.
В 2006 Амазон запустили Simple Storage Service (S3) — сервис с простым хранением файлов в облаке, призванный решить все эти вопросы. Через API загружаем файл, сервис генерирует ссылку. Файл загружается в вёдро (bucket), а не на диск. Вёдра не имеют ограничений как у папок и могут быть распределены по разным серверам.
Сейчас S3-сервис можно создать на многих хостингах в пару кликов. Также можно развернуть своё S3-хранилище с помощью Open Source, например MinIO.
Для чего это нужно нам сейчас на практике?
- Загружать и хранить бэкапы — первое с чего обычно начинают.
- Хранить файлы отдельно от нод, обрабатывающих запросы.
- Отдавать статические файлы сайта (картинки, скрипты, файлы для скачивания) с отдельного сервиса.
- Избегать ситуации с переполненным диском на сервере за счёт переноса всех больших файлов в S3.
- Организовывать безразмерные хранилища файлов на терабайты с открытым и закрытым доступом.
- Для S3-хранилищ есть библиотеки на всех популярных языках.
- Все S3-совместимые хранилища работают по образцу Amazon S3, поэтому ко всем хранилищам нужна одна библиотека.
- Для разработки в docker-compose удобно использовать образ MinIO.
Может тарифицироваться:
- Стоимость хранения в гигабайтах.
- Стоимость трафика загрузки в облако (чаще всего бесплатно)
- Стоимость трафика выгрузки из облака.
- Запросы к файлам.
- Хранение старых версий файла (если работает с версионированием).
Для большинства проектов переход на S3 — шаг на пути к масштабированию и большим нагрузкам. Но нужно внимательно считать сценарий использования — может оказаться значительно дороже традиционных способов.
❤️ Жми на сердечко, если интересно ⚡️ Жми на молнию, если узнал новое 🧑💻 Жми на ботана, если работаешь с S3