Бэкенд мессенджера: 1×1 чаты с доставкой за секунды

System designSenior60 минпроверка — Спринт22-t001

Спроектировать бэкенд мессенджера (аналоги — Slack, Teams, Mattermost). Ограничения: до 8 000 пользователей; доставка в пределах нескольких секунд; только чаты 1×1; порядок сообщений сохраняется, дублей нет; только текст; историю можно скроллить в прошлое; клиенты — мобильные, авторизацию не проектируем. Показать архитектуру (приложение, БД, очереди, кеши), оценить нагрузку и хранилище, выбрать протокол клиент–сервер, пройти путь сообщения от отправки до доставки.

Варианты из исходника:

  • Чат продавца и покупателя на маркетплейсе (кнопка «Написать» на объявлении): отправка/чтение, список чатов (ключ шардирования не должен ломать список), пуши и картинки, доставка до 3 с. Вводные: MAU 25 млн, DAU 2,5 млн, 80 млн объявлений, пользователь пишет в 3 чата по 10 сообщений в день, ~8 чатов на объявление, сообщение ~50 символов (максимум 10 КБ), есть продавцы с огромным числом чатов. По ходу: что если клиент не умеет WebSocket (long polling), rate limiter в Redis, почему Mongo вместо SQL, какие метрики, API псевдокодом.
  • Устно: WebSocket и его плюсы, как держать соединения и кому слать, какие топики нужны в событийной архитектуре чат/сообщения/профиль.

Порядок, которого ждут: уточни требования → оцени нагрузку → API и данные → схема компонентов → узкие места и отказ. Не прыгай сразу в Kafka.

⌘ Enter — проверить