Skip to content

art-frela/social_network_system_design

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SYSTEM DESIGN социальной сети для курса по системному дизайну balun.courses.system-design

Социальная сеть для путешественников - Wayfarer

logo

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

  1. Публикация постов в виде текста и фотографий
    1. полный CRUD
  2. Просмотр своих постов и др путешественников
  3. Оценка на посты
    1. Можно менять/удалять
  4. Добавлять комментарии к постам
    1. Можно удалять и редактировать
  5. Привязка фотографий к географическим местам
    1. по координатам из метаданных фотографий
    2. в ручном режиме пользователем
  6. Подписка на посты др путешественников
    1. Отписка
  7. Поиск популярных мест для путешествий
    1. Просмотр постов к этим местам
  8. Показ постов
  9. Глубина просмотра ленты бесконечно

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

  1. Количество пользователей (DAU) = 10_000_000 активных пользователей в день
  2. Поведение пользователей - в среднем один пользователь
    1. просматривает ленту 1 раз в день
    2. пишет новый пост 1 раз в 10 дней
    3. пишет комментарий 2 раза в день
    4. ставит оценку посту 5 раз в день
  3. География аудитории соцсети - страны СНГ
  4. Сезонность - да, летние каникулы нагрузка выше в 2 раза, новогодние праздники - нагрузка выше в 1,5 раза
  5. Время хранения постов и фотографий условно бесконечно
  6. Лимиты и ограничения
    1. Максимальное число подписчиков не ограничено
      1. проблему с мега популярными путешественниками (celebrity) будем решать
    2. Максимальный размер текста одного поста - 5000 символов
    3. Средний размер одного поста - 680 символов (в среднем 2000Байт)
    4. Максимальное кол-во фотогафий в одном посте - 10
    5. Максимальный размер одной фотографии - 512Kб
    6. В среднем один пост содержит 5 фотографий
    7. В среднем размер оригинала одной фотографии - 200Kб
    8. Комментарии в основном без фотографий
    9. Максимальный размер одного комментария - 800 символов
    10. Размер фотографии в ленте в среднем 200Кб
    11. Один пользователь в среднем просматривает 5 оригиналов фотографии из ленты
  7. Временные ограничения
    1. Пользователь публикует среднего размера пост менее чем за 1 секунду
    2. Пользователь получает последние 10 постов ленты менее чем за 1 секунду
    3. Пользователь получает последующие 10 постов ленты менее чем за 3 секунды
    4. Пользователь публикует комментарий к посту менее чем за 1 секунду
    5. Пользователь ставит оценку посту менее чем за 1с
  8. Доступность приложения - Не более, чем несколько часов простоя в год.
    1. Уровень доступности - 3 девятки вполне достаточно

Расчет нагрузки

RPS = dau * avg_requests_per_day_by_user / 86 400 
Traffic = rps * avg_request_size
Connections = dau * 0.1

dau = 10000000
Операция RPS Traffic Connections Comment
Создание новых постов 10_000_000*0.1/86400 ~ 12 12 * 2,5Mb = 30Mb 10_000_000*0.1 = 1_000_000 Раз в 10 дней это оптимистично - обычно гораздо реже - раз в неделю если за каждые выходные отчитываться, но про дачу 5 раз писать не будешь же. но есть более активные пользователи, которые будут и поход в магазин освещать
Редактирование постов 0 Если фотки новые добавлять, но это оч редко
Удаление постов 0 редко
Просмотр ленты 10_000_000*1/86400 ~ 120 120*0.5Mb = 60Mb
Просмотр оригиналов фотографий в посте 10_000_000*5/86400 ~ 600 600*2.5Mb ~ 1.5Gb Преимущественно чтение
Создание комментариев 10_000_000*2/86400 ~ 240 240*50B ~ 12KB
Редактирование комментариев 0
Удаление комментариев 0
Подписка 10_000_000*0.1/86400 ~ 12 12*16B = 192B
Отписка 10_000_000*0.03/86400 ~ 4 4*16B = 64B

About

balun.courses.system-design home-work

Topics

Resources

Stars

Watchers

Forks