StudyCode
Мессенджер на миллион онлайн: шардинг WebSocket-соединений, pub/sub-маршрутизация, гарантии доставки, горячая и холодная история.
В проекте «Чат» ты соединял клиентов WebSocket-сервером: один процесс, все соединения в одной Map, broadcast циклом. Теперь спроектируем то же самое на масштабе мессенджера:
Онлайн одновременно: 1 000 000 пользователей
Сообщений в день: 100 млн
Средний размер: ~200 байт текста| Фича | Детали |
|---|---|
| Личные сообщения | 1-на-1, потом группы |
| Доставка в реальном времени | получатель онлайн → сообщение за < 500 мс |
| Статусы | отправлено ✓ / доставлено ✓✓ / прочитано |
| Онлайн-статус | «в сети», «был(а) недавно» |
| История | вся переписка доступна с любого устройства |
Сообщения:
100 млн/день ÷ 86 400 ≈ 1 200 сообщений/сек, пики ×3 ≈ 3 500/секХранилище на историю:
100 млн × (200 байт + ~100 байт метаданных) = ~30 ГБ/день ≈ 11 ТБ/годПервая цифра скромная. Вторая — уже нет: историю за годы на одном сервере не удержишь. И главный слон в комнате: миллион одновременно открытых TCP-соединений. Вот с него и начнём. 🐘