Senior
150 მილიონი მომხმარებლის მხარდაჭერით მასშტაბირებადი შეტყობინებების სისტემის პროექტირება, რომელიც მხარს უჭერს 75 მილიონ DAU-ს, 225 მილიონ MAU-ს, 1.2M წაკითხვას / 300k დაწერას პიკ QPS-ზე, 5 მილიონ ერთდროულ მომხმარებელს, 60 PB ახალი მონაცემებით წელიწადში, 30%-იანი წლიური ზრდით, SLA 99.95%, p99 <200 ms წაკითხვისთვის, <300 ms დაწერისთვის. საკვანძო კონტექსტი აუცილებელია პროექტირება განაწილებული შეტყობინებების სისტემის, რომელიც მსგავსია WhatsApp-ის, რომელიც მხარს უჭერს 1:1 და ჯგუფურ ჩატებს, უზრუნველყოფს შეტყობინებების მიწოდებას, მომხმარებლების ონლაინ სტატუსებს და მულტიმედია ფაილების (ფოტოები, ვიდეოები, აუდიო) გადაცემას. სისტემა უნდა უზრუნველყოს მაღალი ხელმისაწვდომობა და დაბალი ლაგი, მხარი დაუჭიროს მაღალი პარალელიზმს და გლობალურად მასშტაბირდეს. ფუნქციური მოთხოვნები - მხარდაჭერა პირადი (1:1) და ჯგუფური ჩატებისთვის, მონაწილეების დამატებისა/ამოღების შესაძლებლობით - ტექსტური შეტყობინებების და მულტიმედია ფაილების გაგზავნა და მიღება არ ჩანს end-to-end დაშიფვრის მექანიზმის მკაფიო განხორციელება სერვისების ან მომხმარებლების დონეზე, გარდა ზოგადი შენიშვნის. - არ არის მკაფიო აღწერა sharding-ის და რეპლიკაციის შესახებ chat_id ან user_id-ის მიხედვით, მასშტაბურობის და შეცდომების წინააღმდეგობისთვის. - არ არსებობს მკაფიო კომპონენტი ან მექანიზმი offline შეტყობინებების და მიწოდების დადასტურებების სინქრონიზაციისთვის. - არ არის ნათელი, როგორ ხორციელდება დატვირთვის ბალანსი მონაცემთა ბაზებსა და სერვისებს შორის, განსაკუთრებით პიკების დროს. **მნიშვნელოვანი საკითხები, რომლებიც უნდა განიხილოს:**
sobes.tech AI
პასუხი AI-სგან
При проектировании масштабируемого мессенджера с такими требованиями важно учесть несколько ключевых аспектов:
-
Шардинг и репликация данных
- Разделение данных по
user_idилиchat_idдля распределения нагрузки между базами. - Репликация для обеспечения отказоустойчивости и быстрого чтения.
- Разделение данных по
-
Обработка офлайн-синхронизации и delivery receipts
- Хранение сообщений на сервере до подтверждения доставки.
- Механизмы push-уведомлений и синхронизации при повторном подключении.
-
Балансировка нагрузки
- Использование балансировщиков на уровне API и сервисов.
- Горизонтальное масштабирование микросервисов.
-
Обеспечение SLA и низкой задержки
- Кэширование часто запрашиваемых данных (например, online-статусов).
- Использование быстрых хранилищ (in-memory, NoSQL) для сообщений и статусов.
-
Мультимедийные файлы
- Отдельное хранилище (CDN, Object Storage) для медиа.
- Асинхронная загрузка и доставка.
-
Безопасность
- End-to-end шифрование желательно реализовать на клиенте.
- Сервер отвечает за маршрутизацию и хранение зашифрованных данных.
-
Архитектура сервисов
- Микросервисный подход: отдельные сервисы для сообщений, пользователей, мультимедиа, уведомлений.
- Очереди сообщений (Kafka, RabbitMQ) для обработки пиковых нагрузок.
-
Мониторинг и алертинг
- Метрики производительности, задержек, ошибок.
- Автоматическое масштабирование при росте нагрузки.
В итоге, архитектура должна быть распределённой, с чётким разделением ответственности, поддержкой горизонтального масштабирования и высокой доступности. Особое внимание стоит уделить механизмам доставки сообщений, синхронизации офлайн-пользователей и эффективному хранению больших объёмов данных.