О компании
Авто.ру — один из самых популярных сервисов по продаже автомобилей в России. Согласно совместному исследованию аналитического агентства «Автостат» и журнала «За рулем», более трети респондентов используют Авто.ру для продажи машины.
Зачем нужен экзамен по ПДД?
В ноябре 2020 года на сервисе Авто.ру прошел социальный проект «Большой экзамен ПДД», в котором могли принять участие как водители, так и пешеходы и велосипедисты. Цель проекта — мотивировать участников дорожного движения перечитать правила, что позволит сделать дороги безопаснее.
На прохождение экзамена по ПДД давалось две попытки, на решение 30 вопросов — 25 минут, а результаты теста и разбор ошибок были доступны сразу же. Вопросы подготовили профессиональные редакторы таким образом, чтобы дать возможность пользователям по-новому взглянуть на уже привычные ситуации.
Билеты в «Большом экзамене ПДД» были разделены на две категории: для водителей и для всех остальных (пешеходов и велосипедистов). Вопросы — простые, средние и сложные — отбирались случайным образом из заранее подготовленного списка, поэтому при каждой попытке людям доставались разные вопросы. В конце теста можно было посмотреть результат и разобрать ошибки. За правильный ответ на простой вопрос начислялся 1 балл, на средний и сложный — 2 и 3 балла соответственно. Пользователи, набравшие максимальное количество баллов, могли принять участие в розыгрыше призов от партнеров экзамена.
Выбор облака
Для реализации проекта Авто.ру обратился к компании foobar.engineering, предоставив общее описание задачи с указанием списка технологий и общей логики, а также макеты интерфейса.
Foobar.engineering занимается заказной разработкой высоконагруженных систем, главным образом серверной частью. Компания обеспечивает полный цикл разработки, начиная с анализа и архитектуры решения, разработки, тестирования и заканчивая автоматизацией поставки кода в production.
Тест «Большой экзамен ПДД» предлагалось сделать отделенным от основного сайта динамическим сервисом. При этом прогнозировалась большая нагрузка и все его части не должны были зависеть от серверов и уметь автоматически масштабироваться. Поэтому выбрали serverless технологии от Yandex Cloud.
На создание готового приложения с нуля понадобилось около двух месяцев. За это время два программиста познакомились с Yandex Cloud, разработали архитектуру, написали код и сделали всю настройку.
Как создавался тест
Была выбрана реализация на Yandex Cloud Functions — облачном сервисе Yandex Cloud, который позволяет запускать код в виде функции в безопасном, отказоустойчивом и автоматически масштабируемом окружении без создания и обслуживания виртуальных машин. При увеличении количества вызовов, то есть количества участников экзамена ПДД, автоматически создаются дополнительные экземпляры функции. Все запущенные функции выполняются параллельно.
Изначально планировалось использовать только Yandex API Gateway, Yandex Cloud Functions и Managed Service for YDB. В процессе подготовки стало понятно, что будут нужны и Yandex Certificate Manager с Yandex Object Storage. Первый применялся для использования стандартного шифрования трафика, а второй — для хранения и раздачи статики. Итоговый стек технологий выглядел так:
- Для обработки входящих запросов и их дальнейшего перенаправления — Yandex API Gateway.
- Для подключения шифрования взаимодействия пользователей с сервисом — Yandex Certificate Manager.
- Для реализации базовой логики приложения и доступа к данным — Yandex Cloud Functions.
- Для хранения данных — Managed Service for YDB.
- Для отдачи статики (базовая страница, стили, JS-код, картинки) — Yandex Object Storage.
Технически сайт работает следующим образом: при входе на сайт пользователи получают привязанный TLS-сертификат и основную страницу. Дальше скачивается статика, включая JS-код с логикой отображения данных и переходов для пользователя. Данные для отображения отправляются через API по цепочке: API Gateway — Cloud Functions — YDB Serverless. Статические картинки по необходимости подтягиваются из Object Storage.
Фактически получилось два приложения: для пользовательской части и для администрирования.
Как работал сервис
Благодаря выбору Yandex Cloud Functions разработчики занимались только кодом, а не переживали за настройку и поддержку серверов с приложением. Разработчикам не пришлось самостоятельно заниматься масштабированием и добавлением ресурсов СУБД. Приложение выдержало пиковые нагрузки и позволило успешно пройти тестирование более 100 000 участников.
Yandex Cloud Functions и YDB Serverless помогают в ситуациях, когда трафик вашего приложения или его части может вырасти в сотни или тысячи раз и задача масштабирования становится крайне трудно решаемой традиционными методами. Ну и это удобно: платишь только за то, что фактически потребил.
Андрей Фефелов,Co-Founder Foobar.engineering