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

Крупнейший российский сервис аренды электросамокатов Юрент полностью переехал в Yandex Cloud, чтобы максимально эффективно подстраиваться под сезонность бизнеса и быстро масштабироваться при высоких нагрузках. Управляемые сервисы облачной платформы позволили реализовать гибкую инфраструктуру в короткое время и без привлечения дополнительных сил команды SysOps/DevOps. Также результатом стала возможность анализировать живые данные в облаке без дополнительных затрат.

Самокаты в каждый город

Юрент — крупнейший российский сервис аренды электросамокатов. За три года компания стала лидером на рынке кикшеринга в России, и сейчас сервисом Юрент можно воспользоваться более чем в 100 российских городах, всего в парке около 85 тысяч самокатов. С момента основания сервисом воспользовались около 9 миллионов пользователей.

Компания Юрент начиналась в 2018 году с малого: с одного программиста и одного самоката. От удачной бизнес‑идеи до её реализации нужно было потратить как можно меньше времени, поэтому многие архитектурные решения были сделаны с недочётами. Юрент построил свою инфраструктуру в рамках одного сервера, без оркестрации. На старте были выбраны технологии для бэкенда (Linux Ubuntu, MongoDB, Docker, Nginx, RabbitMQ, Redis), а за основу взята сервисная архитектура. Например, сервис ordering, через который проходят все стадии (посмотреть самокат, взять в аренду, завершить аренду) — это один сервис, а не три микросервиса pre‑ordering, ordered и finish‑ordering. У каждого сервиса была ровно одна база данных, не было обращений одного сервиса к базе другого, а также сервис сам не мог делать больше нескольких походов в другие сервисы, чтобы не устроить от одного внешнего запроса DDoS. Сервисы между собой общались также через шину данных — RabbitMQ.

Для запуска сервисов были арендованы серверы в дата‑центре. Инфраструктура Юрент работала так несколько лет, но по мере роста парка самокатов стало очевидно, что бизнес сезонный: зимой и осенью мощные серверы не нужны, а летом и весной, особенно в локдаун, когда закрыли границы и пользователи массово поехали на курорты Краснодарского края, этих мощностей явно не хватало. С ростом также пришло понимание, что Юрент — это уже не стартап, который может развалиться в любой момент, и нужно начинать вкладываться в инфраструктуру. Масштабироваться путём увеличения количества серверов означало потратить очень много денег, ресурсов и времени на аренду, настройку и обслуживание железа, которое простаивало бы примерно половину года. Также это потребовало бы дополнительных сил команды SysOps/DevOps, а ресурс хотелось потратить на развитие проекта.

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

Российское облако с репутацией

При выборе облачной инфраструктуры были сформированы следующие требования:

  • Российская компания.
  • Не менее трёх собственных дата‑центров на территории России, связанных собственными каналами связи.
  • Наличие управляемых сервисов: Managed Kubernetes®, Managed MongoDB, Managed Redis, Managed RabbitMQ.
  • Наличие нативной защиты от DDoS.
  • Положительные отзывы от крупных клиентов.
  • Техническая поддержка, способная решить вопрос в течение одного рабочего дня.
  • Гибкая и понятная ценовая политика.

Анализ рынка облачных технологий в России привёл Юрент в Yandex Cloud. Облачная платформа удовлетворяла всем требованиям, активно развивалась и полностью закрывала как задачи развития сервисов, так и вопросы безопасности данных, в том числе персональных.

Масштабируемость — ключ к успеху

При переезде в облако первым делом было решено отказаться от деплоя через docker‑compose в пользу Kubernetes. Это решение для оркестровки контейнеризированных приложений позволяло решить главную задачу — scalling и downscalling. Также K8s — это очевидный стандарт деплоя и логирования, который все принимают. А в Yandex Cloud был полностью управляемый сервис Yandex Managed Service for Kubernetes®, в котором можно было легко создавать кластеры, реплицируемые в трёх географически распределённых зонах доступности, а всё обслуживание и обновление компонентов инфраструктуры кластера находилось на стороне облачной платформы.

Перед переездом в облако нужно было описать архитектуры эксплуатации в Terraform, написать для каждого сервиса Helm chart и поднять минимум два кластера Kubernetes — production и dev. Затем нужно было перенести текущую базу MongoDB и переключить DNS на адреса сетевого балансировщика нагрузки Yandex Network Load Balancer. Постепенная миграция сервисов и баз данных заняла несколько месяцев. Её полностью произвела команда Юрент, активно взаимодействуя с технической поддержкой Yandex Cloud. После переезда проходило тестирование HPA и anti‑affinity под нагрузкой в кластере Kubernetes, и тогда же случился первый серьёзный тест облачного оборудования: повышенный спрос на самокаты в майские праздники создал огромную нагрузку, но с этим удалось справиться.

Для выполнения всех задач, связанных с масштабированием базы данных, было предложено использовать сервис Yandex Data Transfer. С его помощью можно наполнять данными реплицированную БД и продолжать работать с выбранной областью в режимах разработки и аналитики без необходимости хостить реплики.

Арендовать самокат — это быстро

Результатом полного переезда Юрент в Yandex Cloud стало создание гибкой инфраструктуры, которая максимально эффективно подстраивается под сезонность бизнеса, а также увеличение скорости работы всех сервисов проекта. Также появилась возможность анализировать живые данные без дополнительных затрат.

Мнение

Александр Яковлев,
директор по эксплуатации
Александр Яковлев,
директор по эксплуатации

Хорошо, что в облаках есть услуга managed‑сервисов, которая может помочь с развёртыванием и эксплуатацией узлов вашей системы, в Yandex Cloud количество managed‑сервисов достаточно, не хватает разве что managed RabbitMQ. Проект «переезд с dedicated‑решения в облака» получился очень удачный.