Senior
Navrhněte škálovatelný systém pro zasílání zpráv, který podporuje 150 milionů uživatelů, 75 milionů DAU, 225 milionů MAU, 1,2 milionu peak QPS čtení / 300k zápisů, 5 milionů současných uživatelů, 60 PB nových dat ročně, růst o 30 % ročně, SLA 99,95 %, p99 <200 ms pro čtení, <300 ms pro zápis. KONTEKST Je třeba navrhnout distribuovaný systém zasílání zpráv, podobný WhatsApp, který podporuje 1:1 a skupinové chaty, zajišťuje doručování zpráv, zobrazuje online statusy uživatelů a umožňuje přenos multimediálních souborů (fotky, videa, audio). Systém musí zajistit vysokou dostupnost a nízkou latenci, podporovat vysoký paralelismus a škálovat na globální úrovni. POŽADAVKY NA FUNKCE - Podpora osobních (1:1) a skupinových chatů s možností přidávat/odstraňovat účastníky - Odesílání a přijímání textových zpráv a multimediálních souborů Není zřejmá jasná implementace end-to-end šifrovacího mechanismu na úrovni služeb nebo klientů, kromě obecné poznámky. - Chybí explicitní popis sharding a replikace databází podle chat_id nebo user_id pro škálovatelnost a odolnost vůči chybám. - Neexistuje jasná komponenta nebo mechanismus pro offline synchronizaci zpráv a potvrzení doručení. - Není jasné, jak je prováděno vyvažování zátěže mezi databázemi a službami, zejména při špičkových zatíženích. **Kritické body k zvážení:**
sobes.tech AI
Odpověď od AI
При проектировании масштабируемого мессенджера с такими требованиями важно учесть несколько ключевых аспектов:
-
Шардинг и репликация данных
- Разделение данных по
user_idилиchat_idдля распределения нагрузки между базами. - Репликация для обеспечения отказоустойчивости и быстрого чтения.
- Разделение данных по
-
Обработка офлайн-синхронизации и delivery receipts
- Хранение сообщений на сервере до подтверждения доставки.
- Механизмы push-уведомлений и синхронизации при повторном подключении.
-
Балансировка нагрузки
- Использование балансировщиков на уровне API и сервисов.
- Горизонтальное масштабирование микросервисов.
-
Обеспечение SLA и низкой задержки
- Кэширование часто запрашиваемых данных (например, online-статусов).
- Использование быстрых хранилищ (in-memory, NoSQL) для сообщений и статусов.
-
Мультимедийные файлы
- Отдельное хранилище (CDN, Object Storage) для медиа.
- Асинхронная загрузка и доставка.
-
Безопасность
- End-to-end шифрование желательно реализовать на клиенте.
- Сервер отвечает за маршрутизацию и хранение зашифрованных данных.
-
Архитектура сервисов
- Микросервисный подход: отдельные сервисы для сообщений, пользователей, мультимедиа, уведомлений.
- Очереди сообщений (Kafka, RabbitMQ) для обработки пиковых нагрузок.
-
Мониторинг и алертинг
- Метрики производительности, задержек, ошибок.
- Автоматическое масштабирование при росте нагрузки.
В итоге, архитектура должна быть распределённой, с чётким разделением ответственности, поддержкой горизонтального масштабирования и высокой доступности. Особое внимание стоит уделить механизмам доставки сообщений, синхронизации офлайн-пользователей и эффективному хранению больших объёмов данных.