17 мая 2024

Блог

DevOps

Технологии

Как мы работаем с облачными хранилищами на примере Yandex S3

В узком смысле «облако» – это условный онлайн-сервис, с помощью которого можно передавать различные данные: фото, видео, музыку и т.д. Мы привыкли использовать облачные хранилища в повседневной жизни, но на данный момент они часто входят в инфраструктуру продуктов для бизнеса. О видах и преимуществах «облака» уже писали ранее. В этой статье мы хотим показать еще один способ применения облачного хранилища на примере сервиса DAM для Leroy Merlin.

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

Рассмотрим работу с облачными хранилищами на более конкретном примере - Yandex S3. 

Сейчас это облако входит в инфраструктуру нашего сервиса DAM для Leroy Merlin. Если быть точнее, то выполняет функцию хранилища для фото и виде-контента, которые мы с вами можем видеть, например, на сайте или кассах самообслуживания в магазинах сети.

S3 или Simple Storage Service — сервис, где хранятся цифровые данные большого объема. Работает по одноименному протоколу.

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

  • практически неограниченный объем
  • резервирование данных и географически раcпределенное хранение
  • возможность добавить любые метаданные к файлу

Любой объект в хранилище можно получить с помощью URL-ссылки с уникальным идентификатором объекта по протоколу HTTP или HTTPS. С полученными объектами работают либо через веб-интерфейс, либо программно через API.

Пример загрузки файла с метадатой на .Net:

Янд1

Сегодня объектное хранилище 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 к бакету, чтобы ускорить отдачу файлов для пользователей, которые находятся в разных частях земли.

Янд2

 

Вывод

На нашем примере мы хотели показать, что облачных хранилищ в инфраструктуре не стоит бояться. С их помощью можно просто и абсолютно безопасно хранить и передавать контент.

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