Senior
34
150 миллион қолданушыны қолдайтын, 75 миллион DAU, 225 миллион MAU, 1.2M оқу / 300k жазу пик QPS, 5 миллион бір уақытта қолданушы, жылына 60 PB жаңа деректер, жыл сайын 30% өсу, SLA 99.95%, p99 <200 мс оқу үшін, <300 мс жазу үшін. КОНТЕКСТ WhatsApp-қа ұқсас таралған хабарламалар жүйесін жобалау, ол 1:1 және топтық чаттарды қолдайды, хабарламаларды жеткізу, онлайн-статусты көрсету және мультимедиялық файлдарды (суреттер, видеолар, аудио) тасымалдау. Жүйе жоғары қол жетімділікті, төмен кідірісті, жоғары параллелизмді және ғаламдық масштабтауды қамтамасыз етуі керек. ФУНКЦИОНАЛДЫ ТАЛАПТАР - Жеке (1:1) және топтық чаттарды қолдау, қатысушыларды қосу/алу мүмкіндігімен - Мәтіндік және мультимедиялық файлдарды жіберу және қабылдау Қызмет немесе клиент деңгейінде end-to-end шифрлау механизмінің нақты жүзеге асырылуы байқалмайды, жалпы аннотациядан басқа. - Шардинг және репликация туралы нақты сипаттама жоқ, chat_id немесе user_id бойынша масштабтау және ақауларды төзімділікті қамтамасыз ету үшін. - Офлайн синхрондау және жеткізу туралы нақты компонент немесе механизм жоқ. - Жүктемені теңестіру қалай жүзеге асырылатыны, әсіресе пиктік жүктемелер кезінде. **Нақты мәселелер:**
Сұралған компаниялар
Яндекс
AI-дан жауап
sobes.tech AI
При проектировании масштабируемого мессенджера с такими требованиями важно учесть несколько ключевых аспектов:
-
Шардинг и репликация данных
- Разделение данных по
user_idилиchat_idдля распределения нагрузки между базами. - Репликация для обеспечения отказоустойчивости и быстрого чтения.
- Разделение данных по
-
Обработка офлайн-синхронизации и delivery receipts
- Хранение сообщений на сервере до подтверждения доставки.
- Механизмы push-уведомлений и синхронизации при повторном подключении.
-
Балансировка нагрузки
- Использование балансировщиков на уровне API и сервисов.
- Горизонтальное масштабирование микросервисов.
-
Обеспечение SLA и низкой задержки
- Кэширование часто запрашиваемых данных (например, online-статусов).
- Использование быстрых хранилищ (in-memory, NoSQL) для сообщений и статусов.
-
Мультимедийные файлы
- Отдельное хранилище (CDN, Object Storage) для медиа.
- Асинхронная загрузка и доставка.
-
Безопасность
- End-to-end шифрование желательно реализовать на клиенте.
- Сервер отвечает за маршрутизацию и хранение зашифрованных данных.
-
Архитектура сервисов
- Микросервисный подход: отдельные сервисы для сообщений, пользователей, мультимедиа, уведомлений.
- Очереди сообщений (Kafka, RabbitMQ) для обработки пиковых нагрузок.
-
Мониторинг и алертинг
- Метрики производительности, задержек, ошибок.
- Автоматическое масштабирование при росте нагрузки.
В итоге, архитектура должна быть распределённой, с чётким разделением ответственности, поддержкой горизонтального масштабирования и высокой доступности. Особое внимание стоит уделить механизмам доставки сообщений, синхронизации офлайн-пользователей и эффективному хранению больших объёмов данных.