Ответ вслух Senior Выбор хранилища обновлено

Хранилища мессенджера

Вопрос

Какие хранилища вы выберете для мессенджера и почему?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Профили, чаты и составы участников это связанные данные с небольшой записью, их держу в PostgreSQL.

Что должно прозвучать в ответе

  • Пользователи, чаты, участники: реляционная БД

  • История сообщений: шардирование по chat_id, wide-column или шардированный PostgreSQL

  • Онлайн-статусы и маршрутизация соединений: Redis

  • Медиа: объектное хранилище и CDN

  • Поиск по сообщениям: поисковый движок, наполняемый асинхронно

Что могут спросить следом

  • Как обеспечить порядок сообщений в чате?
  • Сколько места займёт история за год?

Разбор

Профили, чаты и составы участников это связанные данные с небольшой записью, их держу в PostgreSQL. История сообщений огромна и постоянно растёт, главный запрос «последние N сообщений чата», поэтому шардирую по chat_id: Cassandra или ScyllaDB с ключом партиции chat_id и сортировкой по id сообщения, либо шардированный PostgreSQL. Онлайн-статус и то, на каком gateway висит соединение пользователя, храню в Redis с TTL. Фото и голосовые в S3 через CDN. Поиск по сообщениям выношу в OpenSearch, наполняю через очередь. Оценка: 100 млн сообщений в сутки по 200 байт это 20 ГБ в сутки, около 7 ТБ в год без реплик.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме