SYSTEM DESIGN социальной сети для курса по системному дизайну balun.courses.system-design
Социальная сеть для путешественников - Wayfarer
- Публикация постов в виде текста и фотографий
- полный CRUD
- Просмотр своих постов и др путешественников
- Оценка на посты
- Можно менять/удалять
- Добавлять комментарии к постам
- Можно удалять и редактировать
- Привязка фотографий к географическим местам
- по координатам из метаданных фотографий
- в ручном режиме пользователем
- Подписка на посты др путешественников
- Отписка
- Поиск популярных мест для путешествий
- Просмотр постов к этим местам
- Показ постов
- Глубина просмотра ленты бесконечно
- …
- Количество пользователей (DAU) = 10_000_000 активных пользователей в день
- Поведение пользователей - в среднем один пользователь
- просматривает ленту 1 раз в день
- пишет новый пост 1 раз в 10 дней
- пишет комментарий 2 раза в день
- ставит оценку посту 5 раз в день
- …
- География аудитории соцсети - страны СНГ
- Сезонность - да, летние каникулы нагрузка выше в 2 раза, новогодние праздники - нагрузка выше в 1,5 раза
- Время хранения постов и фотографий условно бесконечно
- Лимиты и ограничения
- Максимальное число подписчиков не ограничено
- проблему с мега популярными путешественниками (celebrity) будем решать
- Максимальный размер текста одного поста - 5000 символов
- Средний размер одного поста - 680 символов (в среднем 2000Байт)
- Максимальное кол-во фотогафий в одном посте - 10
- Максимальный размер одной фотографии - 512Kб
- В среднем один пост содержит 5 фотографий
- В среднем размер оригинала одной фотографии - 200Kб
- Комментарии в основном без фотографий
- Максимальный размер одного комментария - 800 символов
- Размер фотографии в ленте в среднем 200Кб
- Один пользователь в среднем просматривает 5 оригиналов фотографии из ленты
- …
- Максимальное число подписчиков не ограничено
- Временные ограничения
- Пользователь публикует среднего размера пост менее чем за 1 секунду
- Пользователь получает последние 10 постов ленты менее чем за 1 секунду
- Пользователь получает последующие 10 постов ленты менее чем за 3 секунды
- Пользователь публикует комментарий к посту менее чем за 1 секунду
- Пользователь ставит оценку посту менее чем за 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 |