О чём история
Picvario создали платформу, с помощью которой бизнес‑клиенты могут удобно и быстро управлять своим контентом: автоматически переформатировать его, создавать копии разного разрешения, проставлять теги и т. д. На этапе MVP платформа хорошо работала в формате on‑premise, но когда команда задумалась о выходе на крупных клиентов, то встал вопрос о масштабировании платформы.
Чтобы создать быстродейственный и надёжный сервис, Picvario перенесли свою платформу в Yandex Cloud и преобразовали её в SaaS‑продукт, используя Yandex Compute Cloud, Yandex Oblect Storage и сервисы платформы данных. Спустя время, когда возникла потребность в автомасштабировании, Picvario мигрировали в среду Kubernetes®, которая в Yandex Cloud предоставляется как сервис. В результате они получили надёжную платформу и повысили скорость загрузки больших объёмов данных в два раза.
Как стартап решил масштабироваться в облаке
Picvario — корпоративная платформа для работы с контентом организации: его хранения, поиска и управления им. Это удобная система для совместной работы распределённых команд, которая позволяет делиться файлами, читать и редактировать метаданные, контролировать права доступа к файлам и т. д.
Клиенты Picvario — это компании, которые создают много графического контента (фотографии, иллюстрации, видеозаписи). Среди них есть государственные структуры, крупные промышленные корпорации, СМИ, спортивные клубы и другие организации, которые генерируют разное количество контента в разное время (например, выгружают больше фотографий во время мероприятий). Пиковая нагрузка у таких клиентов может составлять до десятков тысяч файлов в сутки.
На этапе MVP Picvario было «коробочным» решением, которое устанавливалось на машины клиентов. По мере усовершенствования сервиса команда решила перейти от on‑premise к SaaS‑модели. На первом этапе был развёрнут SaaS‑стенд на выделенных физических серверах в коммерческом дата‑центре. Такая реализация была не очень удобна для ИТ‑специалистов Picvario, потому что запрос новых мощностей и их настройка занимали много времени.
Благодаря демо‑стенду Picvario нашли первых крупных клиентов своего SaaS‑решения, и возникла потребность переезда на облачную платформу. Это позволило привлекать больше компаний, которые оперируют большим количеством данных и имеют высокие требования к быстродействию и отказоустойчивости.
Picvario решили выбрать облачного провайдера, который имеет готовые решения для работы с микросервисной архитектурой. У команды были планы переезда на Kubernetes, поэтому тот факт, что Yandex Cloud предоставляет его как сервис, стал одним из решающих для выбора. Благодаря Yandex Managed Service for Kubernetes® разработчики могут существенно сэкономить время на обслуживании инфраструктуры Kubernetes‑кластера, потому что облачный провайдер берёт на себя такие задачи как:
- развёртывание виртуальных машин,
- настройка сети,
- установка ОС и ПО,
- обновление кластера и групп узлов,
- доступность мастера,
- резервное копирование,
- обеспечение безопасности хранилища данных и оборудования,
- интеграция с другими облачными сервисами.
Для Picvario было важно, чтобы дополнительные вычислительные мощности подключались за минуты, что можно сделать в Yandex Cloud через панель управления, без обращения в техническую поддержку. Оплата использованных ресурсов производится по факту потребления, что позволяет подключать виртуальные машины нужной конфигурации под конкретные задачи и не переплачивать за простаивающие мощности в то время, когда нагрузка на платформу снижается.
Из дата‑центра в облако, из облака в Kubernetes
Проект проходил в два этапа: миграция в облако и настройка Kubernetes.
Миграция платформы в Yandex Cloud прошла без трудностей. Был подключён сервис Yandex Compute Cloud и запущена одна виртуальная машина (24 ГБ RAM, 12‑ядерный процессор), на которой были развёрнуты 24 контейнера, управляемые на разных этапах сервисом Yandex Container Registry и Docker Compose. Для работы с данными применялась СУБД PostgreSQL, предоставляемая Yandex Cloud как сервис (развёрнут кластер из двух нод 4vCPU, 8 ГБ RAM). Для реализации поиска на виртуальные машины Yandex Compute Cloud был установлен Elasticsearch (развёрнута одна нода, 2vCPU, 4 ГБ RAM). Для хранения медиаданных использовалось объектное S3‑хранилище Yandex Object Storage.
Такая архитектура удовлетворяла потребности Picvario в течение почти двух лет. А когда команда привлекла новых крупных клиентов, стало очевидно, что требуется провести ряд изменений:
- повысить отказоустойчивость (на тот момент отказ виртуальной машины приводил к отказу всего сервиса),
- повысить производительность,
- сгладить влияние пиковой загрузки на быстродействие всей платформы,
- автоматизировать масштабирование.
ИТ‑отдел Picvario после сравнения нескольких возможных систем оркестровки контейнерной архитектуры принял решение о миграции на Kubernetes. Одним из факторов выбора было то, что он предоставляется у облачного провайдера как сервис Yandex Managed Service for Kubernetes®.
На первом этапе в Kubernetes были перенесены один кластер тестового окружения (на нём развёрнуто два рабочих узла) и один кластер рабочего окружения (на нём развёрнуто минимум 11 узлов, количество которых растёт при нагрузке). Тестовая среда была запущена в одной зоне доступности, а рабочая реплицировалась в трёх зонах доступности. Это было нужно, чтобы окружения были больше изолированы друг от друга, а также для проверки вносимых изменений.
В процессе миграции возникло несколько трудностей, связанных с тем, что исходный медиафайл при обработке разделялся на части и разные его фрагменты могли располагаться на разных виртуальных машинах (узлах). Чтобы решить эту проблему, разработчики Picvario изменили алгоритм работы платформы:
- скачивание исходного файла с ftp‑сервера клиента,
- перемещение его в облачное S3‑хранилище,
- обработка файла (переформатирование, создание копии нужного размера и т. д.), параллельно с этим распознавание изображений с применением сторонних AI‑сервисов,
- автозаполнение метаданных,
- сохранение полученных файлов и данных в S3‑хранилище.
На данный момент система умеет в реальном времени обрабатывать изображения и видео, а также работать с документами, таблицами, аудио, векторными изображениями и т. д.
Каждый клиент Picvario работает в собственном изолированном пространстве приложения, эксплуатируя общие системные ресурсы. Чтобы не создавались очереди на обработку при пиковых нагрузках, использовался механизм автомасштабирования за счёт мониторинга очередей (claster autoscale, который предустанавливается и обновляется на стороне Yandex Cloud). Автомасштабирование работает на двух уровнях:
- масштабирование подов (если нагрузка повышается, то количество реплик нужного пода увеличивается),
- масштабирование узлов (если масштабирования подов не хватает, то происходит автоматический заказ новой виртуальной машины).
Чтобы обезопасить себя от перерасхода бюджета, на этапе настройки сервиса Yandex Managed Service for Kubernetes® указывается минимальное и максимальное количество виртуальных машин, которые можно подключать.
Двойное увеличение скорости загрузки больших импортов
Благодаря миграции в облачный Kubernetes большие загрузки, которые содержат более 20 тысяч файлов, загружаются вдвое быстрее. Также переезд сделал более удобным обслуживание платформы — обновление теперь происходит с нулевым даунтаймом и никак не сказывается на скорости работы сервиса.
В результате миграции Picvario смогли привлечь крупных клиентов, таких как «Уралкалий», омский ХК «Авангард», «Чемпионат.com», ФК «Динамо», и обеспечить им то качество сервиса, которое им было нужно.
В планах команды работа над поддержкой 3D‑моделей, cad‑файлов, чертежей.
Мнение
В работе с Yandex Cloud в первую очередь отмечу качество работы предоставляемых управляемых сервисов. Важно, что функциональность таких сервисов постоянно развивается, а их количество растёт. Хороший уровень документации, техподдержки, а также активности со стороны команды Yandex Cloud вроде конференций и вебинаров дают возможность выбирать грамотные решения для модернизации инфраструктуры.