Мерж ленты

Мерж ленты — это процесс объединения и сортировки постов от всех пользователей, на которых подписан текущий пользователь, чтобы сформировать его персонализированную ленту из последних 10 постов.

Что именно происходит при мерже:

  1. Сбор данных:
    1. Для каждой подписки пользователя система запрашивает последние N постов (например, 10).
    2. Если пользователь подписан на 1000 аккаунтов, на этом этапе собирается до 10 000 постов (1000 подписок × 10 постов).
  2. Сортировка:
    1. Все собранные посты объединяются в единый список.
    2. Сортируются по времени публикации (от новых к старым).
  3. Выбор топ-10:
    1. Из отсортированного списка выбираются 10 самых свежих постов.

Почему мерж ленты может стать узким местом?

Проблема Пример Последствия
Высокий объем данных 10k постов для пользователя с 1k подписок Затраты CPU/RAM на сортировку
Конкуренция за ресурсы Параллельные запросы от миллионов пользователей Деградация производительности

Как это связано с масштабируемостью?

Если система не оптимизирует мерж ленты:

  • При росте числа подписок/пользователей время формирования ленты превысит 400 мс.
  • CPU воркеров будет перегружен сортировкой больших списков.
  • Балансировка нагрузки (API Gateway) не решит проблему, так как «бутылочное горло» находится на этапе обработки данных, а не распределения запросов.

Решения для оптимизации мержа:

  1. Кеширование ленты:
    1. Готовые топ-10 постов хранятся в Redis для активных пользователей
    2. Для селебрити — отдельный кеш с их последними 100 постами.
  2. Фоновая предобработка:
    1. Асинхронное обновление ленты при публикации нового поста (например, через Kafka).
  3. Шардирование данных:
    1. Распределение подписок по кластерам для параллельного сбора данных.