- Avito
Avito - интернет-сервис для размещения объявлений о товарах, недвижимости, а также услугах от частных лиц и компаний, занимающий первое место в мирое среди сайтов объявлений.
- Регистрация и авторизация пользователей
- Размещение и редактирование объявлений (фото, выбор категории, описание, цена)
- Создание отзыва о продавце/покупателе
- Модерация текста и фотографий объявлений/отзывов с использованием ML-модели для автоматического выявления нарушений
- Чат между покупателем и продавцом (отправка текста, прикрепление фотографий, получение и просмотр сообщений)
- Поиск товара/услуги
- по ключевым словам (полнотекстовый поиск)
- по категориям
- по геолокации
- Рекомендации объявлений исходя из
- объявлений, добавленных в избранное
- объявлений, оцененных пользователем (поставил лайк)
- оформленных покупок
- поисковых запросов
- региона и геолокации пользователя
- Поиск объявлений товаров/услуг по картинке, используя ML-модель
- Добавление объявлений в избранное для их дальнейшего отслеживания
- Защита номера телефона продавца (переадресация звонка с виртуального телефонного номера продавца на реальный)
- 62.3M Monthly Active Users (MAU) 1
- 24.8M Daily Active Users (DAU) 2
- 400К новых объявлений в день 2
- 120 сделок в минуту 1
- более 230M активных объявлений 1
№ | Страна | Пользователи |
---|---|---|
1 | Россия | 96.7% |
2 | Германия | 0.5% |
3 | Беларусь | 0.42% |
4 | Нидерланды | 0.36% |
pie
"18-24": 1508
"25-34": 2500
"35-44": 1769
"45-54": 1783
"55-64": 1410
"65+": 1029
Метрика | Значение |
---|---|
MAU | 62.3M 1 |
DAU | 24.8M 1 |
Новых объявлений | 400K в день 1 |
Сделок | 120 в минуту 1 |
Активных объявлений | >230M 1 |
Картинок в хранилище | 28B 5 |
Модерация объявлений | 15M в день 5 |
Посещений avito.ru | 314M в месяц 6 |
Создается объявлений | 1.4M в день 6 |
Отправляется сообщений | 40K в минуту 6 |
Создается бесед | 10K в минуту 6 |
- Аватарку загружают 70% MAU
- в среднем одна аватарка формата WEBP в разрешении 256x256 весит примерно 15 КБ (после обработки на сервере)
- На одного пользователя приходится 3 объявления в месяц
- К одному объявлению прикреплено 5 картинок фомрата WEBP объемом 50 КБ (после обработки на сервере)
- Один пользователь в месяц оставляет
- 5 отзывов о продавце/покупателе, содержащих 250 символов на русском языке в кодировке utf-16, где каждое весит 0.5 КБ
- 200 сообщений, содержащих 50 символов на русском языке в кодировке utf-16, где каждое весит 0.1 КБ
- Каждый пользователь из DAU в среднем делает 7 поисковых запрсов в сутки
- Каждый пользователь из DAU посещает главную страницу 5 раз
- Отзыв о продавце/покупателе оставляет каждый 10-й пользователь после совершения сделки
- Из 10 просмотренных объявлений пользователь откроет страницу отзывов 2 раза
- Количество регистраций составляет 5% от общего количества посещений (314M в месяц 6)
- 15% пользователям из DAU нужно авторизоваться
- Пользователь добавляет в избранное 1 объявление из 10 просмотренных
- 30% отредактированных объявлений содержат 2 новые фотографии
Данные | Количество | Общий объем, Кб |
---|---|---|
Информация о пользователе | 1 | 12 |
Объявления | 5 | 756 |
Отзывы | 5 | 2.5 КБ |
Сообщения | 200 | 20 |
-
Информация о пользователе
- персональные данные:
$1$ КБ - аватарка:
$1 \times 0.7 \times 15 = 11$ КБ
- персональные данные:
-
Объявление (3 на пользователя в месяц)
- данные о товаре/услуге (описание, характеристики, адрес и т.д.):
$3 \times 2 = 6$ КБ - картинки:
$3 \times 5 \times 50 = 750$ КБ
- данные о товаре/услуге (описание, характеристики, адрес и т.д.):
-
Отзывы (5 на пользователя в месяц)
- текст:
$5 \times 0.5 = 2.5$ КБ
- текст:
-
Сообщения (200 на пользователя в месяц)
- текст:
$200 \times 0.1 = 20$ КБ
- текст:
Тогда на одного пользователя потребуется 791 КБ в месяц. При нагрузке в 62.3M MAU необходимо 46 ТБ памяти в месяц.
За год сервис накопит данных объемом 550 ТБ.
Действие | Количество на пользователя в сутки | Общее количество в сутки | Среднее RPS | Пиковое RPS |
---|---|---|---|---|
Регистрация | 0.02 | 507K | 5.9 | 17.6 |
Авторизация | 0.015 | 3.7M | 43 | 129 |
Создание объявления | 0.7 | 1.4M | 16 | 48 |
Редактирование объявления | 6 | 13.6M | 157 | 471 |
Поиск товара/услуги | 7 | 137.6M | 1592 | 4776 |
Получение рекомендаций | 5 | 124M | 1435 | 4305 |
Просмотр объявления | 10 | 248M | 2870 | 8610 |
Добавить объявление в избранное | 1 | 24.8M | 287 | 861 |
Создание отзыва о продавце/покупателе | 0.001 | 34.6K | 0.4 | 1.2 |
Просмотр отзывов о продавце/покупателе | 2 | 49.6M | 574 | 1722 |
Отправка сообщения в чате | 7 | 160M | 1852 | 5556 |
Получение сообщения в чате | 7 | 160M | 1852 | 5556 |
При расчете используются предположения об использовании продукта.
Ниже представлен график RPS сервиса VK Видео, пользователи которого преимущественно из России, как и пользователи Avito, поэтому при рассчетах нагрузки будет считать, что пиковое RPS примерно в 3 раза больше среднего.
-
Редактирование объявлений
- 15M версий объявлений в день проходят модерацию
- если из 15M версий объявлений вычесть число созданных объявлений (1.4M объявлений в день), получим 13.6M объявлений
-
Получение рекомендаций
- показываем рекомендации на главной странице
- каждый пользователь из DAU посещает главную страницу 5 раз в сутки
-
Просмотр объявления
- считаем, что из 7 поисковых запросов пользователь зайдет на 10 объявлений
-
Создание отзыва о продаце/покупателе
- каждую минуту совершается 120 сделок
- каждый 10-й пользователь из оставляет отзыв
- сделка совершается между двумя пользователями, поэтому из 240 пользователей в минуту напишут 24 отзыва
Значение объема трафика на одно действие было получено при помощи инструментов разработчика в браузере.
Действие | Трафик на одно действие, Кб | Среднее потребление, Гбит/сек | Пиковое потребление, Гбит/сек | Суммарный суточный трафик, Тбайт/сутки |
---|---|---|---|---|
Регистрация | 442 | 0.02 | 0.06 | 0.23 |
Авторизация | 399 | 0.14 | 0.42 | 1.52 |
Создание объявления | 6144 | 0.81 | 2.43 | 8.70 |
Редактирование объявления | 1228 | 1.58 | 4.74 | 17.01 |
Поиск товара/услуги | 474 | 6.2 | 18.6 | 66.76 |
Получение рекомендаций | 350 | 4.1 | 12.3 | 44.44 |
Просмотр объявления | 214 | 5.0 | 15.0 | 54.34 |
Добавить объявление в избранное | 8 | 0.019 | 0.057 | 0.2 |
Создание отзыва о продавце/покупателе | 3 | 0.00001 | 0.00003 | 0.0001 |
Просмотр отзывов о продавце/покупателе | 176 | 0.83 | 2.49 | 8.94 |
Отправка сообщения в чате | 1 | 0.002 | 0.006 | 0.16 |
Получение сообщения в чате | 1 | 0.002 | 0.006 | 0.16 |
- Суммарное среднее потребление: 18.70 Гбит/сек
- Суммарное пиковое потребление: 56.11 Гбит/сек
- Суммарный суточный трафик: 202.46 Тбайт/сутки
По таблице расределения веб-трафика по странам имеем, что практически все пользователи сервиса avito.ru находятся в России.
При расположении дата-центров будем учитывать количество активных объявлений по городам, которое можно получить при помощи поиска объявлений. Получим следующую таблицу с количеством активных объявлений, распределенных по некоторым из больших городов:
Город | Активные объявления |
---|---|
Москва | 37.2M |
Санкт-Петербург | 14.3M |
Ростов-на-Дону | 3.8M |
Новосибирск | 3.2M |
Иркутск | 1.5M |
Хабаровск | 800K |
Кроме того, при расположении дата-центров будем опираться на плотность населения России 7. Существенная ее часть расположена в западной части страны, что влияет на количество активных объявлений в этой области и на общее количество RPS, исходящее из этого региона.
Карта магистральных сетей связи 8 также играет большую роль при определении локации для дата-центра. Чтобы уменьшить задержку при использовании сервиса, будем располагать дата-центры вблизи больших магистральных сетей связи.
Наибольшее количество активных объявлений, а потому и наибольшее количество пользователей сервиса находятся в Москве и Санкт-Петербурге, поэтому в каждом из этих городов расположим по дата-центру.
Расположим также дата-центр в Ростове-на-Дону, чтобы она обслуживал всех клиентов из южной части России.
Пользователей из Новосибирска и Хабаровска и других городов Центральной и Восточной части России будет обслуживать дата-центр в Иркутске. Его должно быть достаточно, так как население в той части, значительно ниже. Кроме того, через Иркутск проходят несколько магистральных связей сети, что позволит достаточно эффективно отправлять/получать трафик из Новосибирска, Хабаровска и других больших городов.
Таким образом, получаем следующее расположение дата-центров:
Исходя из количества активных объявлений в городе, в котором расположен дата-центр, а также близлежащих городов, получаем следующее распределение запросов по дата-центрам:
pie
"Москва": 58
"Санкт-Петербург": 19
"Ростов-на-Дону": 18
"Иркутск": 8
Запрос | Москва, RPS | Санкт-Петербург, RPS | Ростов-на-Дону, RPS | Иркутск, RPS |
---|---|---|---|---|
Регистрация | 3.4 | 1.2 | 1.1 | 0.5 |
Авторизация | 24.9 | 8.2 | 7.7 | 3.4 |
Создание объявления | 9.3 | 3.0 | 2.9 | 1.3 |
Редактирование объявления | 91 | 30 | 28 | 13 |
Поиск товара/услуги | 923 | 303 | 287 | 127 |
Получение рекомендаций | 832 | 273 | 258 | 115 |
Просмотр объявления | 1665 | 545 | 517 | 230 |
Добавить объявление в избранное | 167 | 55 | 52 | 23 |
Создание отзыва о продавце/покупателе | 0.2 | 0.08 | 0.07 | 0.03 |
Просмотр отзывов о продавце/покупателе | 333 | 109 | 103 | 46 |
Отправка сообщения в чате | 1074 | 352 | 333 | 148 |
Получение сообщения в чате | 1074 | 352 | 333 | 148 |
Для балансировки пользователей по регионам используем Latency-Based DNS, чтобы определять местоположение пользователя в сети и направлять его в ближайший дата-центр с учетом задержки сети. Если ближайший датацентр перегружен или недоступен, запрос может быть перенаправлен в резервный регион.
Распределять запросы внутри региона будем с помощью BGP Anycast, который позволяет привязать к одному IP-адресу сети несколько линков протокола BGP, что позволит балансировать нагрузку и отправлять пользователей на ближайшие дата-центры с точки зрения маршрутизации, уменьшая задержки. Для выбора кратчайшего маршрута BGP Anycast использует метрики, учитывающие количество хопов до сети назначения.
Для кэширования и раздачи статики (картинки объявлений, автарки пользователей, js, html, css и т.д.) будем использовать CDN, инстансы которых расположим рядом с дата-центрами, чтобы снизить нагрузку на бэкенды. Это позволит ускорить загрузку страниц и уменьшить объем трафика, обрабатываемый серверами.