Skip to content

devel96/social_network_system_design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

System Design социальной сети

Функциональные требования

Заметкы для себя - post, photo, reaction, comment, user, subscription, feed, tag

  • Публикация постов из путешествий с фотографиями, небольшим описанием и привязкой к конкретному месту путешествия;
  • Оценка и комментарии постов других путешественников;
  • Подписка на других путешественников, чтобы следить за их активностью;
  • Поиск популярных мест для путешествий и просмотр постов с этих мест;
  • Просмотр ленты других путешественников и ленты пользователя, основанной на подписках в обратном хронологическом порядке

Нефункциональные требования

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published