О чем эта история

Компания SearchBooster разрабатывает умный поиск для интернет-магазинов, состоящий из двух основных модулей: поиска как услуги и индексатора. На этапе MVP команда выиграла грант в программе акселерации IT-проектов Yandex Cloud Boost на создание облачной среды и переехала в Yandex Cloud от европейского облачного провайдера. Команда полностью выстроила облачную инфраструктуру с помощью Kubernetes, сервисов платформы данных и бесшовных технологий для решения сложных клиентских задач.

За полтора года, прошедшие с переезда, количество обрабатываемых запросов выросло более, чем в 150 раз, а количество индексируемых данных — в сотни раз.

Главным достижением стало то, что несмотря на такой рост, облачная инфраструктура за этот период не выдала ни одного существенного сбоя и благодаря сервисам Yandex Cloud легко масштабировалась в процессе роста запросов SearchBooster.

Быстро найти и проиндексировать списки товаров любой сложности

SearchBooster — умный поиск для интернет-магазинов. Технически продукт делится на две основные части — поисковый API и робот-индексатор. Робот-индексатор периодически скачивает товарный фид в формате Яндекс.Маркета и индексирует его, чтобы фид стал доступным для поиска. А поисковый API отвечает непосредственно на запросы пользователей.

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

Для размещения прототипа пользовались услугами провайдера Hetzner. Его дата-центры расположены в Германии и Финляндии, что давало очень высокий пинг для российских пользователей из регионов — 30-60 мс. Команда SearchBooster хотела сменить провайдера, чтобы ускорить пинг до виртуальных машин, обслуживающих индексацию интернет-магазинов и поиск.

В 2020 году основатели проекта, который тогда находился на стадии MVP, подали заявку на участие в программе акселерации IT-проектов Yandex Cloud Boost. Они выиграли грант 500 тысяч рублей на создание облачной инфраструктуры c помощью Yandex Cloud.

Ключевым фактором для выбора Yandex Cloud стало наличие платформы Kubernetes, которая использовалась при создании проекта, а здесь была представлена как управляемый сервис. Это позволяло легко перенести в Yandex Cloud существующие сервисы и не тратить время инженеров на поддержание платформы.

В Yandex Cloud привлекло еще и большое количество сервисов, в том числе тех, которые позволяли легко решать специфические задачи.

Kubernetes — среда для растущего проекта

Команда SearchBooster придерживается подхода «инфраструктура как код», поэтому изначально строила среды тестирования и разработки на платформе Kubernetes, развернутой на собственных виртуальных машинах еще у прошлого облачного провайдера. Уже тогда, до миграции в Yandex Cloud, команда использовала сервис Yandex Container Registry для управления образами и контейнерами Docker.

При переходе в Yandex Cloud команда отказалась от идеи разворачивать Kubernetes на виртуальных машинах и сразу подключила платформу как сервис Yandex Managed Service for Kubernetes®. Настроив интеграцию с существующими репозиториями Yandex Container Registry, создали быструю среду разработки.

Сначала развернули два узла (4 vCPU, 24 ГБ RAM) с рабочей нагрузкой для основных клиентов. Было важно, чтобы поисковая и индексирующая части проекта с точки зрения инфраструктуры были полностью разнесены, чтобы скорость поисковой выдачи всегда оставалась высокой независимо от процессов в остальной части проекта.

При миграции на новые машины проблем не возникло, поскольку проект находился на начальной стадии разработки. Переезд проходил в несколько этапов:

  • развертывание виртуальных машин (ВМ);
  • установка сторонних продуктов на выделенные для этого ВМ. Так, на трех виртуальных машинах развернули кластер Elasticsearch с 8 vCPU, 32 ГБ RAM, средствами которого осуществляется поиск.

С ростом числа клиентов количество узлов выросло до трех. Сейчас у SearchBooster для постоянной рабочей нагрузки подключены 11 ВМ и еще несколько машин служат для разработки и тестирования — они подключаются и отключаются по мере необходимости.

Как работает автоматическое развертывание

Настроили автоматическое развертывание с GitHub. Когда готовится релиз, разработчики размещают код в мастер-ветке, потом ее преобразуют в Docker-контейнер, запускают GitHub Action, который собирает все Docker-контейнеры и размещает их в Yandex Container Registry. Затем пакетный менеджер Helm производит развертывание, Kubernetes получает нужный образ из Yandex Container Registry и разворачивает его в облаке. Таким образом релиз происходит без простоев, потому что пока новая версия приложения не заработает и не пройдет все проверки, она не получит реальных запросов. Если всё работает корректно, трафик переключается автоматически.

Переход на СУБД как сервис

На момент миграции в SearchBooster использовали СУБД MySQL, которая была развернута на своих ВМ. Там хранились данные для индексации (метаинформация о товарах). При переезде в Yandex Cloud эти задачи решили с помощью Managed Service for MySQL®.

Уже после миграции в Yandex Cloud решили сохранять все поисковые запросы пользователей, чтобы выводить эту статистику в личном кабинете пользователя, а также использовать ее для собственной аналитики. В качестве СУБД выбрали ClickHouse, которую Yandex Cloud предоставляет как сервис. Команда выбрала Managed Service for ClickHouse, потому что сервис хорошо подходит для быстрой обработки большого количества данных и легко интегрируется с инструментом визуализации данных DataLens. Этот инструмент позволяет показывать в личном кабинете пользователей SearchBooster стандартные отчеты и формировать пользовательские дашборды.

Несмотря на то, что большую часть данных SearchBooster кеширует прямо в памяти приложения, оставшуюся часть нужно хранить централизованно — в основном это история поисковых запросов пользователя, необходимая для отображения недавних запросов в поисковых подсказках. Для этого используется кластер Managed Service for Redis.

Бессерверные сервисы для нетипичных задач

По мере развития продукта стали появляться клиенты с нетипичными задачами. Например, у некоторых клиентов список товаров хранился в формате YML, популярность и наличие товаров на складах — в базе данных 1C, а для реализации качественного поиска эти данные необходимо объединить. Чтобы при индексации автоматически объединять данные из обоих источников, специалисты SearchBooster реализовывали различные обработчики данных для каждого такого клиента. Для решения этой задачи в облаке применили сервис Yandex Cloud Functions, который позволяет запускать код как функцию в бессерверном режиме. SearchBooster использует Cloud Functions на языках PHP и Python. Бессерверный режим — это отказоустойчивое, безопасное и масштабируемое окружение, которое не требует развертывания виртуальных машин, а следовательно, и их обслуживания.

Дополнительные сервисы

По мере развития проекта команда подключала дополнительные сервисы:

  • Yandex Network Load Balancer — балансировщик нагрузки. До миграции в Yandex Cloud использовали собственную разработку, но при переезде решили от нее отказаться в пользу сервиса, чтобы не тратить время на поддержку и обновление.
  • Yandex Monitoring — сервис мониторинга, с помощью которого в SearchBooster ведут логирование, настраивают дашборды, следят за свободным местом на дисках и т. д.
  • Yandex Cloud DNS — сервис управления зонами DNS и доменными именами.
  • Yandex Object Storage — объектное S3-хранилище.

Бесперебойная работа при росте нагрузки в 150 раз

За год с момента переезда в Yandex Cloud количество поисковых запросов SearchBooster выросло с 3 до 500 запросов в секунду, а количество индексируемых данных — в сотни раз. Облачная инфраструктура гибко масштабировалась и не допустила ни одного существенного простоя. Перенос занял около месяца, и за всё это время не было зафиксировано ни одного простоя.

Тестирование и обновление проекта проходит бесшовно благодаря тому, что развертывание выстроено на платформе Kubernetes, которую Yandex Cloud предоставляет как сервис. Дополнительным плюсом для команды стало то, что благодаря интеграции сервисов Yandex Container Registry и Yandex Managed Service for Kubernetes® реестры Docker-образов размещены в тех же дата-центрах, что и остальная инфраструктура, а это ускоряет обновления.

Мнение

Иван Барченков
CEO SearchBooster
Иван Барченков
CEO SearchBooster

Во-первых, Yandex Cloud помог нам запустить проект с меньшими инвестициями, а это безумно важно для любого стартапа. Во-вторых, мы экономим время за счет минимизации работы инженеров, так как не приходится тратить ресурс на развертывание серверов, их поддержание в рабочем состоянии, снятие резервных копий и прочее. В-третьих, Yandex Cloud позволяет быстро масштабироваться, поэтому у нас нет опасений, связанных с запуском большого количества новых проектов, что позволяет больше времени думать о продукте и продажах.