Как мы перевезли продукт из зарубежного Cloudinary в российское облако Yandex S3
Когда стало совсем непонятно, что будет дальше с иностранными сервисами, мы составили список рискованных ресурсов, в который попал Cloudinary – израильский облачный сервис для хранения медиаконтента. Но с этим облаком взаимодействует много сервисов нашего продукта. Так началась большая работа по переезду в Yandex S3.
Причины переезда
Медиаматериалы продукта, над которым мы работаем, содержались в облачном сервисе Cloudinary. Он имеет много преимуществ, в числе которых богатый функционал обработки фотографий.
Со временем объемы контента продукта и способы его использования так разрослись, что даже максимальные пакеты услуг для корпоративного использования перестали закрывать все потребности. При этом стоимость действий и трафика вне пакетов необоснованно дорогая. Дополнительным минусом стал тот факт, что Cloudinary в текущей реальности находится в списке рискованных иностранных ресурсов, и непонятно, что с ним будет дальше.
Отечественные облака – не хуже и дают стандарты, сравнимые с зарубежными аналогами, поэтому для переезда мы выбрали Yandex S3. Единственная сложность, с которой мы столкнулись – это функционал трансформации фотографий, который есть у Cloudinary и нет у Yandex S3. Он умеет менять размер фото, их расширение и качество.
Как работает сервис трансформаций
Это происходит так: мы загружаем оригинальное фото в облако, облако возвращает нам ссылку, которую мы передаем всем сайтам-потребителям. Сайт может обращаться в Cloudinary напрямую, чтобы открыть фото у себя на сайте. Но также можно вставить в ссылку определенные атрибуты. Например, указать в URL-строке, что фотография нужна в размере 200х300 (не как у оригинала). Cloudinary, в свою очередь, трансформирует оригинальное фото и отдаст сайту то, что он попросил.
Собственно, именно сервис трансформации усложнил переезд. Он используется в нашем продукте, поэтому нужно было придумать, чем его заменить. Мы решили эту проблему и создали собственный сервис со сложными трансформациями, который полностью заменил функциональность Cloudinary. В нем есть следующие функции:
- Ресайз фото (PAD) и (FIT) – в одном случае размер меняется «обрезкой», в другом – остатки недостающего изображения заполняются черным цветом;
- Смена типа на bmp, gif, jpg, pbm, png, tga, tiff, webp;
- Смена background для PNG;
- Смена качества.
Сервис предусматривает большие нагрузки, поэтому чтобы все происходило на лету, его разместили не в инфраструктуре заказчика, а также в облаке Yandex S3. Для этого разработчики развернули в облаке Kubernetes и настроили CI/CD.
Что необходимо учесть при подобном переезде:
- Выбрать продукт со схожим функционалом;
- Доработать недостающие сервисы/функции;
- Просчитать нагрузку и разместить дополнительные сервисы в оптимальном месте.