Хранилища мессенджера
Вопрос
Какие хранилища вы выберете для мессенджера и почему?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Пользователи, чаты, участники: реляционная БД
История сообщений: шардирование по 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 ошибок.