Домашнее задание по курсу System Design. Базовый API социальной сети.
- добавление и удаление друзей;
- просмотр друзей пользователя;
- просмотр анкеты пользователя;
- публикация поста в ленту;
- загрузка медиа файлов для постов;
- просмотр ленты постов (домашней и пользователей);
- просмотр диалогов и чатов пользователя;
- отправка и чтение сообщений в диалогах и чатах.
- DAU 50 000 000
- Availability 99,95%
- Посты и сообщения хранеим всегда
- Комментарии не ограничиваем
- Масимальное количество друзей 10 000
- Максимальное количество букв в посте и сообщении 2000
- Один медиа-файл в посте по 1Мб
- В среднем пользователь создает один пост в 5 дней
- Пользователь просматривает ленту 10 раз в день
- Пользователь отправляет 20 сообщений в день
- Пользователь читает сообщения 100 раз в день
- Геораспределенности нет
- Сезонности нет
Level 1. System context diagram
Level 2. User system container diagram
Level 2. Post system container diagram
Level 2. message system container diagram
Level 2. media system container diagram
Level 2. relation system container diagram
RPS posts (write):
DAU = 50 000 000
В среднем пользователь создает 1 пост раз в 5 дней
RPS = 50 000 000 / 86400 / 5 = 115
RPS posts (read):
DAU = 50 000 000
Пользователь просматривает ленту 10 раз в день
RPS = 50 000 000 * 10 / 86400 = 5787
Traffic (write):
Traffic = 115 * 4000 = 460 КБ/c
Traffic (media) = 115 * 1Мб = 115 Мб/c
Created posts for 1 year = 365 * 115 * 86400 = 3 626 640 000
Required memory for 1 year (media) = 3 626 640 000 * 1Мб = 3.6 PB
Required memory for 1 year (post) = 3 626 640 000 * 2Кб = 7.2 TB
RPS (write):
DAU = 50 000 000
Пользователь отправляет 20 сообщений в день
RPS = 50 000 000 * 20 / 86400 = 11 574
RPS (read):
DAU = 50 000 000
Пользователь читает сообщения 100 раз в день
RPS = 11 574 * 5 = 57 870
Traffic (write):
Traffic = 11574 * 4000 = 46Mb/s
Created message for 5 year = 11574 * 365 * 86400 = 364 997 664 000 * 5 = 1 824 988 320 000
Required memory for 5 year = 46 * 365 * 86400 = 1.5 PB * 5 = 7.5 PB
Shards:
Возьмем HDD на 16 TB. Объединим в рейд по 50 диск. Количество памяти на шард:
Memory for 1 shard = 800 TB
Shards = 7500 TB / 800TB = 10