An open API service indexing awesome lists of open source software.

https://github.com/nikitadev-work/system-design-practice

System design practice
https://github.com/nikitadev-work/system-design-practice

rest-api system-design

Last synced: 2 months ago
JSON representation

System design practice

Awesome Lists containing this project

README

          

Практика **System Design**

**Тема**: Социальная сеть

Функциональные требования:
- добавление и удаление друзей
- просмотр друзей пользователя
- просмотр профиля пользователя
- публикация поста в ленту
- загрузка медиа файлов для постов
- просмотр ленты постов
- просмотр диалогов и чатов пользователя
- отправка и чтение сообщений

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

DAU: 55 000 000 пользователей

Сообщения:
- Один пользователь в день пишет: 35 сообщений
- Один пользователь в день читает: 200 сообщений
- Средняя длина сообщения: 60 символов

Посты и лента:
- Один пользователь в день просматривает: 120 постов
- Один пользователь в день ставит: 25 лайков
- Один пользователь в день пишет: 3 комментария
- Один пользователь публикует: 0.2 поста
- Средняя длина поста: 500 символов

Профиль и социальный граф:
- Среднее количество друзей у пользователя: 200
- Среднее количество подписок: 150
- Среднее количество подписчиков: 200

Медиа:
- Один пользователь в день загружает: 0.3 медиа-файла
- Средний размер фото: 2 MB
- Средний размер видео: 50 MB

![Schema](Schema.png)

## Расчеты

### Размер базы данных для хранения сообщений на 5 лет

Размер текста сообщений за день:
55 000 000 * 35 * 60 * 2 байт = 231 GB/день

За год:
231 * 365 ≈ 84 TB

За 5 лет:
≈ 420 TB без репликации

С 2х факторной репликацией:
≈ 840 TB

### Расчет для одной реплики

Рассматриваем HDD на 6 TB:
400 / 6 = 67 дисков

Шардирование:
по 8 дисков на шарде → 9 шардов

### Входящий трафик на создание постов

Количество постов в день:
55 000 000 * 0.2 = 11 000 000

Если считать, что все посты текстовые:
11 000 000 * 500 * 2 = 11 000 000 000 байт ≈ 11 GB/день

### RPS

RPS по созданию постов:
11 000 000 / 86 400 ≈ 128 posts/s

RPS по чтению постов:
55 000 000 * 120 / 86 400 ≈ 77 000 posts/s