Начните с требований к диалогам и доставке, затем разделите клиент, realtime-шлюз, сервис сообщений и постоянное хранилище.
Спроектируйте мессенджер: изучите функциональные требования, сформулируйте нефункциональные требования, выберите технический стек, опишите фронтенд-архитектуру и компонентную схему, взаимодействие с бэкендом, API и модели данных, а затем системный дизайн.
Начните с требований к диалогам и доставке, затем разделите клиент, realtime-шлюз, сервис сообщений и постоянное хранилище.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Начните с требований к диалогам и доставке, затем разделите клиент, realtime-шлюз, сервис сообщений и постоянное хранилище.
Для базовой версии: личные и групповые чаты, история с курсором, отправка и статусы. Клиент хранит нормализованные chats/messages, очередь pending и синхронизируется по HTTP плюс WebSocket. Message содержит id, chat_id, sender_id, client_id и серверную последовательность. Сервер проверяет членство, дедуплицирует client_id, сохраняет сообщение и публикует событие через outbox. Вложения идут в объектное хранилище. Нагрузку, задержку, офлайн-режим и требования к шифрованию уточняют до выбора конкретных технологий.