Разделите записи, подписки и построение ленты; при большом числе читателей обычно нужен гибрид push и pull. Выбор определяется распределением подписчиков, а не только общим DAU.
Конструирование упрощённой соцсети в стиле Twitter
Разделите записи, подписки и построение ленты; при большом числе читателей обычно нужен гибрид push и pull. Выбор определяется распределением подписчиков, а не только общим DAU.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо спроектировать упрощённую версию микроблогинговой платформы, похожей на Twitter/X, реализующую базовый набор функций:
-
Создание записей (твитов) пользователями.
-
Подписка (following) на другие аккаунты.
-
Формирование новостной ленты (feed), содержащей:
- Сообщения от всех пользователей, на которых подписан текущий пользователь.
- Возможность упорядочивания записей по времени публикации или по популярности.
-
Масштабируемость: система должна выдерживать большие нагрузки — миллионы активных пользователей и тысячи новых твитов в секунду.
Ответ
Разделите записи, подписки и построение ленты; при большом числе читателей обычно нужен гибрид push и pull. Выбор определяется распределением подписчиков, а не только общим DAU.
Обычные публикации асинхронно добавляйте в ленты подписчиков, а посты очень популярных авторов подмешивайте при чтении. Храните стабильные ID, используйте курсорную пагинацию и идемпотентные события. Хронологическая и рейтинговая ленты требуют разных правил порядка и обновления курсора. Учтите удаление, блокировки, отписки, модерацию, кэш и восстановление очередей; оцените реальный fan-out и пиковый трафик до выбора шардирования.