Технопарк Mail.ru 3 семестр. Домашнее задание №1 по курсу "HighLoad".
- Тема и целевая аудитория
- Расчет нагрузки
- Логическая схема
- Физическая схема
- Технологии
- Схема проекта
- Список серверов
- Список использованных источников
Яндекс Дзен - сервис индивидуальных рекомендаций Яндекса, который за время подгрузки браузерной страницы с поиском автоматически подготавливает ленту релевантных интересам пользователя статей.
- авторизация
- просмотр и создание новостных статей (текст, изображения, видео)
- просмотр и создание постов (1,5 тысячи знаков с картинками не больше 10 штук)
- просмотре и создание роликов (видео продолжительностью до 1 минуты)
- просмотр и создание видео (преимущественно горизонтальный формат с допустимой длиной до 3 часов)
Месячная аудитория сервиса составляет более 59 млн пользователей [1]
Ежедневная нагрузка по итогам 2021 года составила 22 млн человек [2]
С учетом работы сервиса только на территории РФ, наблюдается следующая географическая статистика пользователей сервиса по данным, предоставленным на vc.ru [3]:
- На города Москву и Санкт-Петербург приходится 34% пользователей
- Другие города-миллионники составляют 25% от общего числа пользователей
- Доля пользователей, проживающих в городах с численностью населения более 500 тыс человек и до миллиона - 11%
- Остальные пользователи - 30% - проживают в небольших городах и других населенных пунктах с населением до 500 тыс человек
- Каждый пользователь проводит на сервисе более 45 минут в день [4]
- В среднем у пользователя уходит до 2 минут на прочтение новостной статьи [5]
- В среднем количество активных блогеров на настоящий момент составляет 45-50 тыс [6]
- У активных блогеров в Яндекс Дзене в среднем выходит по 1-2 ролику в день: поиск осуществлялся на форумах и в комментариях опытных пользователей, так как официально подтвержденной цифры нет. Аналогичные сведения имеются и о популярных схожих сервисах - TikTok, Instagram и других. [7], [8], [9], [10]
- У активных блогеров в среднем выходит по 1-2 поста в день (берем на примере Instagram - третьей по поулярности соцсети в РФ, из чего следует возможность полагаться на данную статистику) [11]
- Как было указано выше, ежедневная нагрузка на текущий момент составляет более 22 млн пользователей.
- Средний размер новостной статьи составляет 3000 символов [12]
- Пост содержит до 10 изображений и текст до 1500 символов [13]
- В среднем каждый пользователь тратит около 80% времени на просмотр публикаций блогеров [14]
- Статистика по временипрепровождению пользователей: 60% - чтение публикаций, 40% - просмотр видео [15]
- Средняя длина ролика по официально неподтвержденным данным составляет 40 секунд
- Количество просмотров роликов по данным на конец 2021 года составило более 20 млн просмотров в день [16]
- Предполагаем, что активный блогер выкладывает по 3 видео в месяц
Используя данную статистику, можем рассчитать нагрузку на сервис:
Мы имеем следующее разделение разделение по типу временипрепровождения пользователей: новостные публикации(1) и публикации блогеров(2).
Согласно приведенной статистике, на публикации блогеров приходится 80%, таким образом на новостные публикации приходится ~20% временипрепровождения пользователей.
Пояснение к упрощению модели
----------------------------
Текущую модель можно упростить.
Равноправность такой замены можно доказать на следующем примере:
Пусть
n - количество пользователей сервиса в день,
t - время их наждения на сервисе,
Тогда, с учетом выше представленных статистик,
суммарное количество времени, затрачиваемое пользователями на просмотр новостей, равно n * (0.2 * t);
суммарное количество времени, затрачиваемое пользователями на просмотр публикаций блогеров, равно n * (0.8 * t);
Что эквивалентно модели, где
(0.2 * n) пользователей проводят все свое время на сервисе (t) только за просмотром новостей и
(0.8 * n) пользователей проводят все свое время на сервисе (t) только за просмотром публикаций блогеров
Таким образом, можем условно принять (согласно подходу упрощенной модели):
- количество пользователей в день, смотрящих только новостной контент, равным 22 000 000 * 0.2 = 4 400 000
- количество пользователей в день, смотрящих только публикации блогеров, равным 22 000 000 * 0.8 = 17 600 000
Пользователи, имея среднюю скорость просмотра публикаций 1 request / 120 sec в период пребывания на сервисе (в среднем 45 минут / день).
Большинство сервисов не грузит по одной новости на request, а прогружает по 10-100 постов сразу и кеширует их. Таким образом, клиент, сделав один-два запроса, получает нужное количество новостей на сеанс. Примем количество сеансов в день каждого пользователя равным 5. Таким образом количество запросов в день будет равно ~10 request / day.
В результате просмотр новостного контента пользователями создает нагрузку, равную 4 400 000 * 10 request / (24 * 60 * 60) sec = ~510 rps
В день публикуется ~3000 новостных постов (согласно статистике, представленной выше), тогда нагрузка на создание новостей составит 3 000 request / day = 3 000 request / (24 * 60 * 60) sec = ~0.05 rps
Согласно статистике, пользователь, просматривающий контент блогеров, тратит 60% времени на публикации и 40% времени на просмотр видео.
Таким образом, можем условно принять (согласно подходу упрощенной модели):
- количество пользователей в день, смотрящих только публикации блогеров, равным 17 600 000 * 0.6 = 10 560 000
- количество пользователей в день, смотрящих только ролики блогеров, равным 17 600 000 * 0.3 = 5 280 000
- количество пользователей в день, смотрящих только видео блогеров, равным 17 600 000 * 0.1 = 1 760 000
Теперь можем рассчитать отдельно нагрузку на сервис публикаций, сервис роликов и сервис видео.
Скорость просмотра публикаций пользователем примем равной 1 request / 30 sec в период пребывания на сервисе (в среднем 45 минут / день).
Как было указано в прошлом разделе, сервисы загружают посты по 100 за один request. Таким образом на один сеанс точно хватит одного запроса. Однако количество сеансов пользователя в день, как было указано выше, принимаем за 5. Таким образом, количество запросов в день будет равно 5.
В результате просмотр публикаций блогеров создает нагрузку, равную 10 560 000 * 5 request / (24 * 60 * 60 сек) = ~700 rps
В день активными блогерами (согласно статистике на 2022 год число блогеров составило 50 000 пользователей) публикуется 1-2 поста (согласно статистике, представленной выше), тогда нагрузка на создание новостей составит 50 000 блогеров * 2 request / (24 * 60 * 60) sec = ~1.2 rps
Среднее время просмотра ролика равно 40 sec, тогда скорость просмотра публикаций пользователем примем равной 1 request / 40 sec в период пребывания на сервисе (в среднем 45 минут / день).
Пусть за один запрос загружается 5 роликов.
В результате просмотр роликов блогеров создает нагрузку, равную 5 280 000 * 1 request / 40 sec * 45 мин / (24 * 60 мин) / 5 = ~825 rps
В день активными блогерами публикуется 1-2 ролика (согласно статистике, представленной выше), тогда нагрузка на загрузку новых роликов составит 50 000 блогеров * 2 request / (24 * 60 * 60) sec = ~1.2 rps
Скорость просмотра видео каждым пользователем примем равной 1 request / 1800 sec в период пребывания на сервисе (в среднем 45 минут / день).
В результате просмотр видео блогеров создает нагрузку, равную 1 760 000 * 1 request / 1800 sec * 45 мин / (24 * 60 мин) = ~32 rps
Как было указано выше, предполагаем, что блогер выкладывает 2-3 видео в месяц. Тогда нагрузка на загрузку новых видео составит 50 000 блогеров * 3 request / (30 * 24 * 60 * 60) sec = ~0.06 rps
Тип нагрузки | Количество запросов в секунду |
---|---|
Получение новостей | 510 rps |
Создание новостей | 0.05 rps |
Получение постов блогеров | 700 rps |
Создание постов блогеров | 1.2 rps |
Получение роликов блогеров | 825 rps |
Создание роликов блогеров | 1.2 rps |
Получение видео блогеров | 32 rps |
Создание видео блогеров | 0.06 rps |
Суммарная нагрузка | 2 070 rps |
Рассчитаем статический размер хранилища, которые должно быть в распоряжении сервиса по итогам прошлых лет:
-
Новостной сервис каждый день публикует до 3 000 публикаций (берем количество новостей равное количеству выпускаемых новостей в день агенством ТАСС [17]
-
использовать статистику ТАСС можно, так как оно является ведущим новостным агенством в России и имеет самые высокие показатели в этой сфере), содержащих фото- и видео-материалы, а также текст (~3000 символов)
Размер хранилища будет определяться сроком хранения старых новостей, который примем равным 1.5 месяцам (90 дней).
Рассчитаем суммарный вес постов, выкладываемых за один день, опираясь на статистику ТАСС[18]: По статистике, в день выкладывается 3000 текстовых постов, содержащих ~600-800 фото- и видеоматериалов.
Тип контента | Количество | Вес одного элемента | Суммарный вес контента |
---|---|---|---|
Текст | 3000 | 3 Кб | 3000 * 3 Кб = 9 Мб |
Фото | 600 | 2 Мб | 600 * 2 Мб = 1200 Мб = 1.2 Гб |
Видео | 200 | 1 мин видео при качестве 720p ~ 20 Мб | 200 * 20 Мб = 4000 Мб = 4 Гб |
Таким образом размер хранилища должен быть не менее 90 дней * (9 Мб + 1.2 Гб + 4 Гб) / день = ~0.5 Тб
- Сервис роликов появился с 2020 года, среднее число блогеров за период 2020 - 2022 составил 50 000 пользователей. Примем, что пользователь выкладывает в среднем 1 ролик в день. Таким образом размер хранилища должен составлять не менее 3 * 365 дней * 50 000 пользователей * 1 ролик/день * 100Мб/ролик = ~5.4 Пб
- Сервис постов существует с 2017 года, среднее число блогеров за этот период составляет 40 000 пользователей. Примем, что пользователь выкладывает в среднем 1 пост в день. Тогда, принимая средний вес поста равным 8Мб, размер хранилища должен быть не менее 5 * 365 дней * 40 000 пользователей * 1 пост/день * 8Мб/пост = ~0.6 Пб
- Сервис видео существует с 2020 года, среднее число блогеров за этот период составляет 50 000 пользователей. Примем, что блогер выкладывает в среднем 3 видео раз в месяц. Тогда, принимая средний вес видео равным 2.8 Гб, размер хранилища должен быть не менее 3 * 365 дней * 50 000 пользователей * 3 видео/ 30 дней * 2.8Гб/видео = ~15 Пб
Для рассчета динамического размера хранилища рассмотрим рост нагрузки на наши сервисы.
- Новостной сервис: рост количества новостных постов отсутсвует. Это обсуловлено тем, что новостной сервис не является агрегатором новостей из других сервисов, а сам создает публикации, количество которых в единицу всегда приблизительно одинаковое. Но условно можем назначить динамический прирост равным 0.1 Тб/год для покрытия всех возможных вариантов роста новостных публикаций.
- Сервис роликов: с 2020 года рост блогеров был в средующей прогрессии: 20 000(2020), 45 000(2021), 50 000(2022). Заметим, что пик прироста пользователей был пройден, так как показатели прироста резко уменьшились - в 5 раз. Таким образом, можем считать, что приток пользователей будет стабильным и меньше или равным притоку за последний год. Однако установим коэффициент запаса Кзап, равный 2, для покрытия возможных вариантов варьирования прироста. Таким образом, прирост в год будет равен (50 000 - 45 000) * Кзап = 5 000 * 2 = 10 000 блогеров/год Таким образом прирост составит (365 дней * 10 000 пользователей * 1 ролик/день * 100Мб/ролик) / год = ~0.4 Пб/год
- Сервис постов: как уже было посчитано выше, средний прирост блогеров в год составляет 10 000 пользователей. Тогда, динамический прирост размера хранилища должен быть не менее (365 дней * 10 000 пользователей * 1 пост/день * 8Мб/пост) / год = ~0.03 Пб/год
- Сервис видео: динамический прирост размера хранилища с учетом рассчитаного прироста блогеров в год должен быть не менее (365 дней * 10 000 пользователей * 1 видео/ 30 дней * 2.8Гб/видео) / год = ~0.35 Пб/год
Согласно расчетам:
- Суммарный статический размер хранилища должен быть не менее 0.5Тб + 5.4Пб + 0.6Пб + 5Пб = 15.5 Пб
- Суммарный динамический прирост размера хранилища должен быть не менее 0.1 Тб/год + 0.4 Пб/год + 0.03 Пб/год + 0.35 Пб/год = 0.8 Пб/год
Тогда суммарный размер хранилища на настоящий момент должен быть не менее:
[ Суммарный статический размер хранилища + 1 год * Суммарный динамический прирост размера хранилища / год ] = 15.5 Пб + 1 год * 0.8 Пб/год = 0.8 Пб/год
Как уже было посчитано выше, прогнозируемый прирост хранилища в год равен 0.8 Пб/год.