Проектирование системы новостных лент

Храните записи ленты в БД, медиа и снимки внешних страниц — в объектном хранилище, а сниппеты загружайте фоновыми задачами. Чтение ленты не должно синхронно ждать сторонний сайт.

Короткий ответ

Что ответить на собеседовании

Храните записи ленты в БД, медиа и снимки внешних страниц — в объектном хранилище, а сниппеты загружайте фоновыми задачами. Чтение ленты не должно синхронно ждать сторонний сайт.

Подробный разбор

Ответ с пояснениями

Условие

Создать архитектуру сервиса новостных лент, обеспечивающего публикацию, отображение и кэширование материалов из внешних источников.

Требования к функционалу:

  • Пользователь может публиковать сообщения в свой персональный новостный поток (в том числе с указанием ссылок на оригинальные ресурсы).
  • Возможен просмотр как собственного, так и чужих потоков с прокруткой полного списка записей.
  • Для новостей, ссылающихся на внешние ресурсы, выводится сниппет (заголовок, описание, изображение) с переходом к оригиналу.
  • Предоставляется возможность увидеть содержимое оригинального ресурса внутри системы без перенаправления наружу (кеширование).

Нефункциональные требования:

  • Доступность API не ниже 99.9%.
  • Максимальное время отклика API — 100 мс.
  • Сохранность данных минимум 5 лет.

Необходимо спроектировать:

  • Хранилища и кэширующие слои для внешнего контента.
  • API для создания и чтения лент.
  • Асинхронные обработчики, отвечающие за загрузку и обновление сниппетов.
  • Механизмы масштабирования и обеспечения отказоустойчивости.

Ответ

Храните записи ленты в БД, медиа и снимки внешних страниц — в объектном хранилище, а сниппеты загружайте фоновыми задачами. Чтение ленты не должно синхронно ждать сторонний сайт.

POST /feeds/{user}/posts сохраняет запись и событие outbox; GET использует cursor-пагинацию по времени и id. Worker получает URL, извлекает заголовок/описание/изображение и сохраняет версионированный снимок. При ошибке остаётся исходная ссылка.

Защитите загрузчик от SSRF, ограничьте размер/время, очистите HTML и отображайте его изолированно без чужих скриптов. БД реплицируется, API масштабируется горизонтально, Redis кеширует горячие страницы. Пятилетняя сохранность требует резервных копий и проверок восстановления. Для 100 мс уточните перцентиль и нагрузку: жёсткий максимум в распределённой системе гарантировать нельзя. Обновления внешнего контента выполняются асинхронно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее