17 мая 2024
Блог
Как мы работаем с облачными хранилищами на примере Yandex S3
В узком смысле «облако» – это условный онлайн-сервис, с помощью которого можно передавать различные данные: фото, видео, музыку и т.д. Мы привыкли использовать облачные цифровые технологии в повседневной жизни, но на данный момент они часто входят в инфраструктуру продуктов для бизнеса. О видах, преимуществах и нашем опыте работы с «облаками» уже писали ранее здесь и здесь. В этой статье мы хотим показать еще один способ применения облачного хранилища на примере сервиса DAM для Leroy Merlin.
Облачное хранилище – это модель облачных вычислений, которая дает возможность хранить данные и файлы в Интернете, пользуясь услугами поставщика облачных вычислений, к которому вы подключаетесь - либо через общедоступный Интернет, либо через частное сетевое соединение.
Рассмотрим работу с облачными хранилищами на более конкретном примере - Yandex S3.
Сейчас это облако входит в инфраструктуру нашего сервиса DAM для Leroy Merlin (подробнее об этом сервисе можно узнать здесь). Если быть точнее, то выполняет функцию хранилища для фото и видео-контента, которые мы с вами можем видеть, например, на сайте или кассах самообслуживания в магазинах сети.
S3 или Simple Storage Service — сервис, где хранятся цифровые данные большого объема. Работает по одноименному протоколу.
Объектное хранилище — решение для надежного хранения данных большого объема. S3 предоставляет контейнеры — в некотором смысле «бездонную бочку», в которую можно складывать файлы любых типов — объекты. Такой вид хранилища имеет множество достоинств:
- практически неограниченный объем
- резервирование данных и географически раcпределенное хранение
- возможность добавить любые метаданные к файлу
Любой объект в хранилище можно получить с помощью URL-ссылки с уникальным идентификатором объекта по протоколу HTTP или HTTPS. С полученными объектами работают либо через веб-интерфейс, либо программно через API.
Пример загрузки файла с метадатой на .Net:
Сегодня объектное хранилище S3 — это одно из самых популярных решений в области облачного хранения данных для работы сервисов и их бэкапов. Технология позволяет не только хранить терабайты данных, но и масштабироваться на лету. И практически все облачные провайдеры предлагают S3 в качестве хранения данных.
Мы не всегда использовали S3. Изначально хранилищем контента служил израильский сервис Cloudinary. Он имеет много преимуществ, в числе которых богатый функционал обработки фотографий. Например, Cloudinary умеет на лету менять размер, формат и прочие атрибуты – нужно только прописать нужные свойства в URL. В принципе заказчика более-менее всё устраивало, но были причины для смены сервиса. Их было несколько:
- В какой-то момент количество контента так выросло, что даже максимальные пакеты услуг для корпоративного использования не покрывали всех потребностей. При этом соотношение цена/качество нас не устраивали.
- Всплыла тема импортозамещения: на тот момент Cloudinary попал в список сервисов, которые вероятнее всего будут заблокированы.
К тому же отечественные облака работали не хуже. Yandex - один из лидеров IT индустрии в России, а S3 уже стал неким стандартом, поэтому мы выбрали именно это хранилище для хранения различных документов и медиафайлов.
Поверх Yandex хранилища мы написали свой сервис для трансформаций, который заменил необходимый для «Леруа» функционал Cloudinary. В процессе нагрузочного тестирования сервиса выяснилось, что скорости сервиса не хватает для требуемых RPS. В процессе исследования нашли проблему в настройках DNS нашего кластера, на котором крутится сервис и поправили её - после этого сервисы начали выдавать необходимые RPS.
Этот опыт дал нам представление о том, на что стоит обратить внимание при переезде:
- Выбрать продукт со схожим функционалом;
- Доработать недостающие сервисы/функции;
- Просчитать нагрузку и разместить дополнительные сервисы в оптимальном месте
Какими фишками мы пользуемся сейчас:
Публичные бакеты – если бакет объявлен как публичный, то доступ к нему на чтение не ограничен и можно давать пользователям ссылки на файлы напрямую и эти файлы доступны всем.
- Закрытые бакеты – тут можно сгенерировать ссылку на файл, которая будет доступна какое-то время. Можно сделать как через UI Yandex, так и программно. Так мы даём пользователям скачивать файлы, которые не предназначены для общего использования.
- Протокол S3 – наши сервисы умеют загружать и скачивать файлы по одноименному протоколу. Есть куча различных библиотек для разных языков программирования для работы S3. Можно без проблема поменять провайдера, всего лишь изменив конфиги.
- Версионирование и жизненный цикл объектов – на бакете можно включить версионирование, то есть при обновлении/удалении файла в бакете появляется возможность вернуться к предыдущей версии. Мы на своей стороне настроили жизненный цикл объекта, чтобы старые версии удалялись через какое-то время.
- GeeseFS - программа для монтирования бакетов Object Storage через FUSE в системах Linux, macOS и Windows. Разработана командой Yandex Cloud как ответвление от goofys. Она обеспечивает высокую производительность и POSIX-совместимость. Мы подключаем бакет к Docker-образу как диск и уже работаем с ним как с файловой системой. А с обычной файловой системой работает большинство программ, и уже не требуется писать дополнительный код для работы с самим хранилищем. Из минусов – приходится постоянно следить за стабильностью монтирования.
- UI от Yandex для просмотра содержимого бакетов.
- WinSCP – графическая утилита, которая позволяет подключаться к S3 и производить какие-либо манипуляции с файлами. Полезная штука для тестирования и поддержки.
- AWS Command Line Interface (AWS CLI) — это интерфейс командной строки для работы с сервисами AWS. Ещё одна утилита для работы с S3.
Также Yandex позволяет подключить свой CDN к бакету, чтобы ускорить отдачу файлов для пользователей, которые находятся в разных частях земли.
Вывод
На нашем примере мы хотели показать, что облачных хранилищ в инфраструктуре не стоит бояться. С их помощью можно просто и абсолютно безопасно хранить и передавать контент.
Несмотря на то, что множество зарубежных сервисов сейчас недоступны, отечественные альтернативы активно развиваются и могут послужить достойной заменой. Миграция на отечественное хранилище, как можно понять из статьи, — это тоже не страшно. Они во многом соответствуют мировым стандартам, а недостающий функционал всегда можно дописать под свои потребности.