- Публикация постов из путешествий с фотографиями, небольшим описанием и привязкой к конкретному месту путешествия;
- Оценка и комментарии постов других путешественников;
- Подписка на других путешественников, чтобы следить за их активностью;
- Поиск популярных мест для путешествий и просмотр постов с этих мест;
- Просмотр ленты других путешественников и ленты пользователя, основанной на подписках в обратном хронологическом порядке
- DAU 10 000 000
- Пользоватли только из СНГ
- Доступно через браузер, мобилки
- Поведение пользователей - создание публикаций в день (1+1(фотки в s3) раз), оценка(1 раз), коментарии (2 раз), подписка(0.5 раз), поиск популярных мест(фид по тегу - 1 раз), просмотр ленты (30 раз), просмотр популярных тегов (0.5 раз, 50 штук), просмотр коментариев публикации (10 раз, умножить на 10 штук)
- Сезонности в приложении - наверное в летний сезон будет больше постов
- Условия хранения данных - Храним всегда (пока пользователь не удалился)
- Лимиты и ограничения - среднее количство фоток в одном посте (3), средный размер 1 фотки (0.5 МБ), средний размер тега (50 символов), средний размер описания (700 символов), средний размер комента (500 символов) максимальное количество подписчиков - 1 000 000,
- Временные ограничения - создание поста (1-2 сек), оценка и комент (1 сек), подписка (1 сек), просмотр ленты, просмотр по тегу (300-500 милисекунд), время попадания в кеш (200 секунд)
- Доступность приложения - Не более, чем 9 часов простоя в год, SLA(~99,90%)
** RPS(Write) = 10 000 000 * 1 / 86400 = ~120 req/sec
RPS(Write S3) = 120 req/sec
String unicode
User Token = ~ 200 B (Мне кажется что должен учитывать данные которые
отправляются через запрос, а не колонки в бд, поэтому во всех запросах
добавляю примерно 200 байт на токен юзера)
Такж в трафик не добавил респонсы хотя по логике должен
Photo to s3 = 3 x 0.5MB = 1 500 000 B
** Traffic = 1 500 000 B * 120 req/sec = ~0.18 GB/sec
Post (
tag - string (50) ~ 100 B
description - string (700) ~ 1400 B
photo links ~ 1000B
) ~ 2700 B
** Traffic(Write) = 2700 * 120 = ~ 0.000324 GB/sec
** RPS(Write) = 10 000 000 * 1 / 86400 = 120 req/sec
User Token + post_uid + reaction (int) = 200 + 16 + 4 = 220 B
** Traffic(Write) = 220 B * 120 req/sec = 27 KB/sec
** RPS(Write) = 10 000 000 * 2 / 86400 = 240 req/sec
User Token + post_uid + comment (string 500) = 200 + 16 + 1000 = 1216 B
** Traffic(Write) = 1216 * 240 = 2335 KB/sec
Коментарии по 1 публикации, 10 штук за 1 запрос
** RPS(Read) = 10 000 000 * 10 / 86400 = ~ 1200 req/sec
User Token + 10 * comment(1000 B) = 200 + 10000 = 10200 B
** Traffic(Read) = 10200 B * 1200 req/sec = ~ 0,013 GB/sec
** RPS(Write) = 10 000 000 * 0.5 / 86400 = 60 req/sec
User Token + follow_uid = 200 + 16 = 216 B
** Traffic(Write) = 216 B * 60 req/sec = 13 KB/sec
Я думаю создание/обновление происходит во время создания публикаций. тоесть по логике нужно рпс публикаций дублировать
** RPS(Write) = 10 000 000 * 1 / 86400 = ~120 req/sec
User Token + post_uid + tag = 200 + 16 + 100 = 316 B
** Traffic(Write) = 316 B * 120 req/sec = 304 KB/sec
** RPS(Read) = 10 000 000 * 0.5 / 86400 = ~ 60 req/sec
User Token + 50 * tag(100 B) = 200 + 5000 = 5200 B
** Traffic(Read) = 5200 B * 60 req/sec = 2496 KB/sec
Фиды по пользувателю
** RPS(Read) = 10 000 000 * 30 / 86400 = ~ 3473 req/sec
Request user token (200B)
Response (
uid
description
created_at
Photos (x3)
tag
reaction (int)
) ~ 1300B x20 = 26000 B
** Traffic(Read) = 26000 * 3473 = ~0.1 GB/sec
После получения респонса, браузер делает еще 3x20=60 запросов по картинкам на s3
** RPS(Read photos) = 10 000 000 * 60 / 86400 = ~6945 req/sec
** Traffic(Read photos) = 500000 * 6945 = ~ 3.48 GB/sec