О чём эта история
Белорусская компания RocketData — разработчик SaaS‑платформы управления онлайн‑присутствием и репутацией бренда. Эта платформа помогает компаниям автоматизировано размещать и обновлять информацию о бизнесе, работать с отзывами, постами, фотографиями на популярных ресурсах (картах, каталогах, соцсетях, навигаторах, сайтах с отзывами и т. п.), а также анализировать результаты своего онлайн‑присутствия и сравнения с конкурентами.
RocketData перенесла все продукты платформы и данные в Yandex Cloud. Миграция заняла один месяц. В результате компания смогла масштабировать проект практически вдвое за счёт использования облачных ресурсов, ускорить работу и снизить количество инфраструктурных инцидентов. Кроме того, улучшился контроль бюджета и потребления ресурсов за счёт простоты оценки расходов.
Задача компании
RocketData — единая автоматизированная платформа для комплексного управления репутацией и онлайн‑присутствием бренда.
Платформа помогает компаниям с множеством офлайн‑точек управлять своей информацией в более чем 80 популярных источниках (картах, навигаторах, каталогах, справочниках, ресурсах с отзывами, соцсетях). Пользователь может быстро добавлять точки присутствия компании на карты, повышать их видимость для клиентов, работать с отзывами, приводить пешеходный трафик в точки продаж, а также отслеживать, с кем бизнес конкурирует в заданном радиусе. Сегодня RocketData пользуются более 14 000 компаний из сфер ритейла, финансов, HoReCa, телекома, медицины и розничной торговли, АЗС.
RocketData включает в себя более 20 различных продуктов, с помощью которых можно:
-
быстро добавлять и редактировать точки компании на картах;
-
загружать прайс‑листы, публикации и фотографии в карточки компании на картах и геосервисах Яндекс и Google, а также в 2ГИС;
-
отвечать на отзывы из одного интерфейса с помощью удобных инструментов;
-
анализировать отзывы с помощью тегов, ключевых слов, concordance‑анализа в специальном сервисе;
-
генерировать отзывы от клиентов с помощью QR‑кодов;
-
быстро отвечать на отзывы клиентов с помощью генератора ответов на основе GhatGPT;
-
делать публикации в геосервисах и соцсетях с помощью ChatGPT;
-
отслеживать позиции бренда и его конкурентов на картах по поисковым запросам и многое другое.
До недавнего времени IT‑инфраструктура, которую использовала RocketData, была гибридной, большая её часть размещалась на серверах крупного IaaS‑провайдера. Эту инфраструктуру стало сложно поддерживать, потому что на платформе нельзя использовать Terraform, периодически отсутствуют необходимые вычислительные ресурсы и эпизодически случаются проблемы доступности. RocketData стала искать более эффективное решение. Кроме того, перед компанией стояла неотложная задача организации баз данных High Availability c возможностью их бесшовного обновления и расширения.
Компания решила рассмотреть несколько облачных платформ для миграции. Облачная инфраструктура отличается простотой масштабирования, отказоустойчивостью, возможностью изоляции приложений и отсутствием необходимости поддержки аппаратного обеспечения, поэтому RocketData рассматривала только облачное размещение.
При выборе облачного провайдера компания ориентировалась на ряд критериев. Облачная платформа должна:
-
обеспечивать аналогичный набор технологий и сервисов, который предоставлял прежний провайдер;
-
предоставлять собственные сервисы, позволяющие избежать лицензионных рисков;
-
иметь стоимость развёртывания, сопоставимую с ценой предыдущей гибридной инфраструктуры;
-
иметь инструменты для управления инфраструктурой при помощи Terraform;
-
отвечать требованиям соблюдения правил обработки информации в соответствии с международным генеральным регламентом о защите данных (General Data Protection Regulation, GDPR) и российским законом № 152‑ФЗ.
Сравнив несколько облачных платформ, компания RocketData выбрала Yandex Cloud. Основными факторами выбора стали качество, прозрачность и скорость работы поддержки, а также имеющийся опыт сотрудничества. Большое влияние на выбор оказало то, что платформа данных Yandex Cloud имеет широкий набор управляемых баз данных и облачный провайдер предоставляет качественные Terraform‑модули. Кроме того, стоимость развёртывания оказалась ниже, чем у прежнего решения, при этом Yandex Cloud предоставила компании грант для миграции.
Решение
Проект вместе с базой данных изначально размещался на одном сервере и с архитектурной точки зрения был монолитным. С появлением новых клиентов количество серверов стало увеличиваться, и у компании возникла необходимость в бесшовном развёртывании системы в рабочей среде.
Чтобы автоматизировать этот процесс, инженеры RocketData использовали Docker и Nginx в качестве балансировщика нагрузки. Запуск реализовали в полуавтоматическом режиме с помощью скрипта, но иногда это решение сбоило.
Чтобы улучшить ситуацию, команда решила описать инфраструктуру с помощью системы управления конфигурациями Ansible, но это всё равно не покрывало все кейсы.
Процесс развёртывания и запуска продуктов не изменился даже после переноса частей проекта на микросервисную архитектуру и перехода на распределённую инфраструктуру, которую развернули на 6 серверах.
Спустя несколько лет стало очевидно, что процесс развёртывания слишком трудозатратный и нестабильный для текущего состояния проекта. RocketData решила перейти на гибридную инфраструктуру. На собственных серверах оставили базы данных и воркеры, а для оркестрации контейнеризованных приложений начали использовать управляемый сервис Kubernetes®, размещённый у облачного провайдера. Вопрос бесшовного обновления удалось решить, но компания столкнулась с проблемой маршрутизации трафика между собственными серверами и облаком, а также сложностями с работой пайплайна развёртывания в гибридной инфраструктуре. На фоне этих проблем также возникли сложности с поддержкой провайдера и качеством предложенных решений.
На сегодня компания уже стала международной, количество микросервисов превысило 15, а баз данных выросло до 5. Стало понятно, что нужны большие изменения в инфраструктуре проекта. Разработанные на базе монолитно‑микросервисной архитектуры продукты, входящие в платформу RосketData, во многом автономны. Компания решила упростить поддержку пайплайна развёртывания, использовав управляемые сервисы облачной платформы для работы с данными.
Команда RосketData начала перенос проекта в Yandex Cloud. Ключевыми в развёрнутой инфраструктуре стали сервисы платформы данных Yandex Cloud.
При переносе был нужен рефакторинг части приложений для работы с управляемыми базами данных. Также пришлось адаптировать приложения к менее производительному железу на узлах сети. Перенос занял около месяца.
Миграция проходила в несколько этапов: сначала описали с помощью Terraform тестовую инфраструктуру, далее доработали сами приложения и протестировали изменения. После этого развернули рабочее окружение, с реальными проектами клиентов и актуальными данными.
В процессе миграции команда столкнулась с ограничениями в облачных базах, но к этому удалось быстро адаптироваться. Кроме того, выяснилось, что оборудование работает на более низких частотах процессора. Чтобы решить эту проблему, пришлось распараллеливать задачи либо использовать большее количество воркеров.
В качестве масштабируемого облачного хранилища выбрали Yandex Object Storage, для которого были созданы скрипты для различных вариантов выгрузки данных. Там развёрнуто 24 бакета с 9 ТБ данных. В хранилище размещают разнообразный контент — от картинок клиентов для сервиса фотографий до виджета геолокации «Сторлокатор» для вставки на сайт клиентов.
Для сбора и анализа данных, а также разработки и администрирования продукта RocketData использовала:
-
Yandex Managed Service for Redis™. Используется для хранения короткоживущих ключей, таких как токены авторизаций, метрик, результатов задач планировщика Celery. Текущий размер кластера: 4 vCPU, RAM 32 ГБ, SSD 100 ГБ.
-
Yandex Managed Service for PostgreSQL. Обеспечивает хранение и обработку основной информации, от данных пользователей до отзывов. Текущий размер кластера: 80 vCPU, RAM 320 ГБ, два SSD 1 ТБ.
-
Yandex Managed Service for MongoDB. Обеспечивает хранение баз больших, редко используемых данных. 4 vCPU, RAM 16 ГБ, SSD 100 ГБ.
-
Yandex Managed Service for ClickHouse®. Используется как хранилище аналитических данных клиентов, таких как статистика по отзывам, скорость ответа и прочее. Текущий размер кластера: 12 vCPU, RAM 48 ГБ, SSD 500 ГБ.
-
Yandex Managed Service for YDB. Используется как база для шаринга блокировок Terraform для контроля ошибок.
Микросервисы продукта запущены в контейнерах Yandex Managed Service for Kubernetes®. Всего было создано три кластера — продакшен, препродакшен и внутренний кластер для ресурсов компании.
Также RocketData использует Yandex Compute Cloud. Вычислительные мощности легко масштабируются, а виртуальными машинами можно управлять через облачную консоль или с помощью Terraform. Это позволило сократить время выполнения рутинных задач до минимума.
Для внесения изменений в конфигурацию инфраструктуры и автоматизации рутинных задач компания применяет Terraform‑модули платформы Yandex Cloud, такие как yandex‑cloud/yandex, cloudflare/cloudflare, kubernetes, helm, а также самостоятельно разработанные модули.
Они используются для:
-
создания в Kubernetes пространства имён (namespace), токенов vault, GitLab Container Registry, а также генерации секретов TLS;
-
описания кодом статичных приложений: Nginx Ingress, RabbitMQ, Cert‑Manager;
-
создания новой базы данных для нового микросервиса с генерацией пароля по требованиям компании;
-
создания субдоменов.
Кроме того, для управления облачными сетями компания использует Yandex Virtual Private Cloud. Сервис Yandex Cloud CDN отвечает за организацию сети доставки контента некоторых бакетов (например, «Сторлокатор» и «Менеджер фото») и ускорения доставки. Отказоустойчивость приложений обеспечивает Yandex Network Load Balancer.
После миграции RocketData начали применять сервис Yandex Load Testing для расчёта частоты запросов к кластеру препродакшен.
Кроме того, в работе RосketData задействован сервис Yandex Translate для перевода отзывов, которые обрабатывает ML‑модель.
Результаты
Сейчас продукт запущен в промышленную эксплуатацию. В результате миграции выросла скорость работы RocketData, а проект удалось масштабировать практически в 2 раза за счёт новых ресурсов. При этом команда добилась трёхкратного ускорения доставки клиентам обновлений и исправлений — с 15 до 5 минут.
Кроме того, благодаря гарантированному SLA облака удалось значительно снизить количество инфраструктурных инцидентов.
Широкий выбор сервисов облачного провайдера и прежде всего большой набор управляемых баз платформы данных позволили оптимально подобрать сервисы под архитектуру проекта и организовать отказоустойчивую инфраструктуру, которую легко поддерживать.
В новых условиях RocketData работает ещё недостаточно долго, чтобы оценить экономический эффект от миграции. Но новая платформа предоставляет все инструменты для снижения стоимости эксплуатации, в частности, прерываемые виртуальные машины и возможности автоскейлинга. При этом компания стала лучше контролировать бюджеты и потребление ресурсов за счёт простоты оценки расходов.
В планах RocketData подключение сервиса Yandex Managed Service for Apache Kafka®. Kafka планируется использовать, чтобы быстро обмениваться задачами по единому протоколу между микросервисами, написанными на разных фреймворках.
Мнение
Переход в Yandex Cloud помог нам решить задачи бизнеса, которые мы не могли реализовать в рамках прежней инфраструктуры и компетенций. Здесь мы нашли практически всё, что нужно для обеспечения отказоустойчивости продакшн‑кластера нашего продукта. При этом мы не только обеспечили надёжность инфраструктуры, но и смогли лучше контролировать свои расходы.