Ответ 1
Вот отличная презентация, которая отвечает на ваш вопрос. Конкретный ответ возникает примерно в минуту 55:40, но я предлагаю вам посмотреть всю презентацию, чтобы понять, как решение вписывается во всю архитектуру.
Короче:
- На конкретном сервере ( "лист" ) хранятся все элементы фида для конкретного пользователя. Таким образом, данные для каждого из ваших друзей хранятся целиком в определенном месте назначения.
- Когда вы хотите просмотреть свою ленту новостей, один из серверов агрегаторов отправляет запрос всем листовым серверам для ваших друзей и оценивает результаты. Агрегатор знает, какие серверы отправляют запросы на основе идентификатора пользователя каждого друга.
Это ужасно упрощается, конечно. Это работает только потому, что все это memcached, система предназначена для минимизации латентности, некоторый рейтинг выполняется на листовом сервере, который содержит элементы фида друга и т.д.
Вы действительно не хотите бить базу данных, чтобы любой из них работал на разумной скорости. FB использует MySql в основном как хранилище ключей; ПРИСОЕДИНИТЬСЯ к таблицам просто невозможно в их масштабе. Затем они кладут серверы memcache перед базами данных и серверами приложений.
Сказав это, не беспокойтесь о проблемах с масштабированием, пока не получите их (если, конечно, вы не беспокоитесь о них ради удовольствия). В первый день масштабирование - это наименьшее из ваших проблем.