Что такое дизайн и архитектура за механизмом обновления состояния facebook?

Я планирую создать социальную сеть, и я не думаю, что я понимаю, как разработан модуль обновления состояния в facebook. Надеюсь, я могу найти здесь какую-то помощь. На уровне алгоритмической и файловой структуры наиболее эффективный способ создания механизма обновления состояния в социальной сети?

Полное сканирование таблицы для всех друзей, а затем сортировка их обновлений очень наивно и дорого. Используем ли мы какой-то механизм, основанный на хешировании или чем-то еще? Пожалуйста, дайте мне знать.

P.S: Я не говорю об их алгоритме EdgeRank, а о базовом обновлении состояния. Как они находят и извлекают их из базы данных?

Заранее благодарим за помощь!

Ответы

Ответ 1

Вот отличная презентация, которая отвечает на ваш вопрос. Конкретный ответ возникает примерно в минуту 55:40, но я предлагаю вам посмотреть всю презентацию, чтобы понять, как решение вписывается во всю архитектуру.

Короче:

  • На конкретном сервере ( "лист" ) хранятся все элементы фида для конкретного пользователя. Таким образом, данные для каждого из ваших друзей хранятся целиком в определенном месте назначения.
  • Когда вы хотите просмотреть свою ленту новостей, один из серверов агрегаторов отправляет запрос всем листовым серверам для ваших друзей и оценивает результаты. Агрегатор знает, какие серверы отправляют запросы на основе идентификатора пользователя каждого друга.

Это ужасно упрощается, конечно. Это работает только потому, что все это memcached, система предназначена для минимизации латентности, некоторый рейтинг выполняется на листовом сервере, который содержит элементы фида друга и т.д.

Вы действительно не хотите бить базу данных, чтобы любой из них работал на разумной скорости. FB использует MySql в основном как хранилище ключей; ПРИСОЕДИНИТЬСЯ к таблицам просто невозможно в их масштабе. Затем они кладут серверы memcache перед базами данных и серверами приложений.

Сказав это, не беспокойтесь о проблемах с масштабированием, пока не получите их (если, конечно, вы не беспокоитесь о них ради удовольствия). В первый день масштабирование - это наименьшее из ваших проблем.