- Глобальное использование без сезонности
- Поддержка чатов и личных сообщений
- Отправка текста (до 2000 символов) и изображений (до 3шт, макс 500кб каждое)
- Поддержка мобильных, декстопных и веб-версий
- 200млн уникальных пользователей ежедневно
- В среднем 10 отправленных сообщений на пользователя в день
- В среднем 20 просмотров сообщений на пользователя в день
- Доступность 24/7 с допустимым простоем в несколько часов в год
- Отображение статусов онлайн/офлайн и времени последнего посещения
- Доставка сообщений за 3 секунды, Push-уведомления для оффлайн пользователей
- Кросс-девайсная синхронизация
- Отображение непрочитанных сообщений
- Ежедневные активные пользователи (DAU) = 200млн
- Отправленные сообщения в день = 200млн * 10 = 2млрд
- Просмотры сообщений в день = 200млн * 20 = 4млрд
- Пиковая нагрузка (предположительно в 2 раза выше средней)
- Отправка сообщений = 2млрд * 2 = 4млрд/день, в секунду = 4млрд/86400сек = 46500 в сек
- Просмотры сообщений = 4млрд * 2 = 8млрд/день, в секунду = 8млрд/86400сек = 925000 в сек
User {
id
phone_number
name
status
last_seen
}
Message {
id
sender_id
chat_id
content
type (text, image)
timestamp
read_by (array of user_ids)
}
Chat {
id
type (personal, group)
participants (array of user_ids)
last_message_id
}
UserDevice {
id
user_id
device_type (mobile, desktop, web)
push_token
}
-
Текстовые сообщения:
- 2000 символов * 2байта/символ = 4кб/сообщение
- 2млрд сообщений * 4кб/сообщение = 8ТБ/день
-
Изображения:
- 3шт * 500кб/шт = 1.5мб/сообщение
- 2млрд сообщений (10% от общего количества) * 1.5мб/сообщение = 300ТБ/день
-
Метаданные сообщений и пользователей:
- 200млн пользователей * 100 байт/пользователь = 20ГБ/день
- 2млрд сообщений * 10 байт/сообщение = 20ГБ/день
-
Итого: (8ТБ/день текстовые) + (300ТБ/день изображения) + (40ГБ/день метаданные) = 348ТБ/день. Годовое потребление: 348ТБ/день * 365дней = 127ПБ/год
Учитывая необходимость в репликации и резервном копировании, рекомендуется увеличить объем хранилища в 2-3 раза.
- Load balancer (Nginx): распределение входящих трафика
- API servers: обработка запросов от клиентов
- Websocket server: поддержка real-time обмена сообщениями
- Message queue: асинхронная обработка сообщений
- Message processing: обработка и сохранение сообщений
- User service: управление данными пользователей и их статусами
- Chat service: управление чатами и их участниками
- Notification service: отправка push-уведомлений
- Database cluster:
- Master Db: для записи
- Read replicas: для чтения
- Cache (Redis): кэширование часто запрашиваемых данных
- Blob storage: хранение больших объемов данных (изображения)
- CDN (Content delivery network): быстрая доставка изображений
- Analytics service: сбор и анализ данных для аналитики и мониторинга