Senior
Skaleeritava sõnumside süsteemi projekteerimine, mis toetab 150 miljonit kasutajat, 75 miljonit DAU, 225 miljonit MAU, 1,2 miljonit peak QPS lugemiseks / 300k kirjutamiseks, 5 miljonit samaaegset kasutajat, 60 PB uusi andmeid aastas, 30% aastast kasvu, SLA 99,95%, p99 <200 ms lugemiseks, <300 ms kirjutamiseks. KONTEKST Vajalik on projekteerida jaotatud sõnumside süsteem, sarnane WhatsApp-ile, mis toetab 1:1 ja grupivestlusi, tagab sõnumite kohaletoimetamise, kuvab kasutajate online-olekuid ning võimaldab edastada multimeediafaile (pildid, videod, helid). Süsteem peab tagama kõrge kättesaadavuse ja madala latentsi, toetama kõrget paralleelsust ning skaleeruma globaalselt. FUNKTSIONAALSED NÕUDED - Toetab isiklikke (1:1) ja grupivestlusi koos osalejate lisamise/eemaldamise võimalusega - Tekstisõnumite ja multimeediafailide saatmine ja vastuvõtt End-to-end krüpteerimismehhanismi rakendamine tasemel teenused või kliendid ei ole selgelt nähtav, välja arvatud üldine märkus. - Puudub selge kirjeldus shardingust ja replikatsioonist andmebaasides chat_id või user_id järgi, skaleeritavuse ja tõrkekindluse tagamiseks. - Puudub selge komponent või mehhanism offline sõnumite ja kohaletoimetamise kinnituside sünkroniseerimiseks. - Ei ole selge, kuidas toimub koormuse jaotamine andmebaaside ja teenuste vahel, eriti tipptundidel. **Kriitilised punktid, mida arvestada:**
sobes.tech AI
Vastus AI-lt
При проектировании масштабируемого мессенджера с такими требованиями важно учесть несколько ключевых аспектов:
-
Шардинг и репликация данных
- Разделение данных по
user_idилиchat_idдля распределения нагрузки между базами. - Репликация для обеспечения отказоустойчивости и быстрого чтения.
- Разделение данных по
-
Обработка офлайн-синхронизации и delivery receipts
- Хранение сообщений на сервере до подтверждения доставки.
- Механизмы push-уведомлений и синхронизации при повторном подключении.
-
Балансировка нагрузки
- Использование балансировщиков на уровне API и сервисов.
- Горизонтальное масштабирование микросервисов.
-
Обеспечение SLA и низкой задержки
- Кэширование часто запрашиваемых данных (например, online-статусов).
- Использование быстрых хранилищ (in-memory, NoSQL) для сообщений и статусов.
-
Мультимедийные файлы
- Отдельное хранилище (CDN, Object Storage) для медиа.
- Асинхронная загрузка и доставка.
-
Безопасность
- End-to-end шифрование желательно реализовать на клиенте.
- Сервер отвечает за маршрутизацию и хранение зашифрованных данных.
-
Архитектура сервисов
- Микросервисный подход: отдельные сервисы для сообщений, пользователей, мультимедиа, уведомлений.
- Очереди сообщений (Kafka, RabbitMQ) для обработки пиковых нагрузок.
-
Мониторинг и алертинг
- Метрики производительности, задержек, ошибок.
- Автоматическое масштабирование при росте нагрузки.
В итоге, архитектура должна быть распределённой, с чётким разделением ответственности, поддержкой горизонтального масштабирования и высокой доступности. Особое внимание стоит уделить механизмам доставки сообщений, синхронизации офлайн-пользователей и эффективному хранению больших объёмов данных.