Архитектура Facebook [закрыто]


169

Я изучал статьи / информацию об архитектуре в Facebook, проблемах и способах их решения. Что они используют и почему они используют. Как они масштабируются и каковы дизайнерские решения для того, что они делают, и т.д. Знание сайтов, которые обрабатывают такой большой трафик, дает архитекторам множество указаний, чтобы иметь в виду определенные вещи при разработке новых сайтов. Я делюсь тем, что нашел.

  1. Фейсбук Наука и Социальный График (Видео)
  2. Масштаб в Facebook
  3. Архитектура чата Facebook
  4. Блог Facebook
  5. Facebook Кассандра Архитектура и дизайн
  6. Инженерные заметки Facebook
  7. Quora - Архитектура Facebook
  8. Facebook для 600M пользователей
  9. Hadoop и его использование на Facebook
  10. Эрланг на Facebook: Чат Архитектура
  11. Кэширование производительности Facebook
  12. Архитектура Facebook Connect

У меня есть еще 2 ссылки, но я не могу опубликовать из-за ограничений на этом сайте. Кроме того, пожалуйста, поделитесь, если у кого-нибудь есть что-то лучше (не обязательно иметь отношение только к Facebook).

PS - Я не смог найти хорошие места, чтобы поделиться этим исследованием, отсюда и эта инициатива. Надеюсь, это кому-нибудь поможет.



2
Кроме того, highscalability.com, кажется, отличное место, чтобы узнать об архитектурах для многих популярных сайтов. Не знаю, насколько это правда и сколько спекулятивно, но это так и есть что-то, над
чем можно покушаться

1
Facebook инженерный блог иногда имеет существенные понимания их архитектура и масштабные задачи.
Колин Пикард

Поскольку это технически не реальный вопрос, вам рекомендуется переместить информацию в вики-страницу тега FB, чтобы сохранить информацию на случай, если этот вопрос будет удален. Спасибо.
Гордон

@ Гордон, как добавить тег FB Wiki? Тэга «Facebook» уже нет? Этого не достаточно?
Srikar Appalaraju

Ответы:


33

Ну, Facebook претерпел МНОГИЕ изменения, и изначально он не был разработан, чтобы быть эффективным. Он был разработан, чтобы делать свою работу. Я абсолютно не знаю, как выглядит код, и вы, вероятно, не найдете много информации о нем (по очевидным соображениям безопасности и авторского права), но просто взгляните на API. Посмотрите, как часто это меняется и сколько из этого не работает должным образом, больше или вообще.

Я думаю, что самый большой туз в их рукаве - хип-хоп. http://developers.facebook.com/blog/post/358 Вы можете использовать HipHop самостоятельно: https://github.com/facebook/hiphop-php/wiki

Но если вы спросите меня, это очень амбициозная и, вероятно, трата времени. Hiphop только поддерживает так много, он не может просто конвертировать все в C ++. Так что это говорит нам? Что ж, это говорит нам о том, что Facebook НЕ в полной мере использует язык PHP. Он не использует последнюю версию 5.3, и я готов поспорить, что многое еще совместимо с PHP 4. В противном случае они не могли бы использовать HipHop. Хип-хоп является хорошей идеей и должен расти и расширяться, но в его нынешнем состоянии он не очень полезен для многих людей, которые создают НОВЫЕ PHP-приложения.

Также есть PHP для JAVA через такие вещи, как Resin / Quercus. Опять же, это не все поддерживает ...

Следует также отметить, что если вы используете какой-либо нестандартный модуль PHP, вы также не сможете преобразовать этот код в C ++ или Java. Однако ... Давайте посмотрим на модули PHP. Они скомпилированы в C ++. Так что, если вы можете создавать модули PHP, которые делают что-то (например, синтаксический анализ XML и т. Д.), То вы в основном (без некоторого взаимодействия) работаете с той же скоростью. Конечно, вы не можете просто сделать модуль PHP для всех возможных нужд и всего вашего приложения, потому что вам придется перекомпилировать, и это будет намного сложнее для кода и т. Д.

Однако ... Есть несколько удобных модулей PHP, которые могут помочь с проблемами скорости. Хотя, в конце концов, у нас есть эта удивительная вещь, известная как «облако», и с ее помощью мы можем масштабировать наши приложения (включая PHP), чтобы это больше не имело значения. Аппаратное обеспечение становится все дешевле и дешевле. Amazon только что снизил свои цены (опять же), если говорить о.

Так что, пока вы кодируете свое PHP-приложение, основываясь на идее, что оно понадобится в один день ... Тогда я думаю, что у вас все хорошо, и я не совсем уверен, что даже посмотрю на Facebook и что они сделали, потому что когда они сделали это, это был совершенно другой мир, и теперь он пытается поддерживать эту инфраструктуру и поддерживать ее ... Ну, вы получаете такие вещи, как HipHop.

Теперь, как хип-хоп поможет вам? Не будет Не может Вы начинаете заново, вы можете использовать PHP 5.3. Я настоятельно рекомендую изучить фреймворки PHP 5.3 и все новые преимущества, которые PHP 5.3 приносит в таблицу вместе с библиотеками SPL, а также подумать о вашей базе данных. Скорее всего, вы обслуживаете контент из базы данных, поэтому проверьте MongoDB и другие типы баз данных, которые не содержат схем и ориентированы на документы. Они намного быстрее и лучше для самого «распространенного» типа веб-сайта / приложения.

Посмотрите на НОВЫЕ компании, такие как Foursquare и Smugmug, и некоторые другие компании, которые используют НОВУЮ технологию и КАК они ее используют. Несмотря на то, что Facebook настолько успешен, я, честно говоря, не стал бы рассматривать их как «как» создать эффективный веб-сайт / приложение. Я не говорю, что у них нет очень (очень) талантливых людей, которые там работают, которые творчески решают (свои) проблемы ... Я также не говорю, что Facebook вообще не очень хорошая идея и что это не так. успешный и что вы не должны получать идеи от этого .... Я просто говорю, что если бы вы могли просматривать весь их исходный код, вы, вероятно, не выиграете от этого.


1
согласился на большинство из того, что вы сказали. Эти ссылки только для любопытства. Иногда вы смотрите на образец технологии и говорите «эй! Это круто» ...
Srikar Appalaraju

Случайно вернувшись к моему ответу здесь две вещи. # 1, я считаю, что C, а не C ++ - моя техническая проблема ... Но, что еще важнее, # 2, Phalcon - это более новая PHP-инфраструктура, которая преобразует многое в расширение PHP для скорости. Хотя, конечно, большая часть вашего собственного кода не будет работать на C, и любая другая используемая вами библиотека тоже не будет работать. Однако, как и в HipHop, это умная идея выжать немного дополнительной производительности.
Том

... и вот мы снова с этим тузом в рукаве. Оглядываясь назад спустя годы, у нас есть этот язык хака (рожденный из материала HipHop с собственной IDE, не менее). Это выросло, чтобы быть чем-то лучшим? Посмотрим. Это может вам помочь? Возможно, но теперь, похоже, вы тоже сможете строить так же, как Facebook. Это заняло всего около 4 лет =) Хотя лично я бы не стал так быстро пить коул-хелп.
Том

1
Глядя на ответ сейчас, я поражен тем, как обстоят дела в мире технологий. HipHop не только поддерживал последние версии PHP, Facebook также разработал HHVM, который стал еще быстрее.
Гопи Кришна

Да, я иногда получаю уведомления, которые возвращают меня к этому. Удивительно видеть, как все изменилось и как HipHop превратился в HHVM (и, вероятно, как Facebook изобретает себя под прикрытием - посмотрите также на все удивительные достижения JS). Это имеет смысл для меня. Если у вас очень успешная компания с огромным количеством денег и сотрудников ... Почему бы не реинвестировать средства в НИОКР, не так ли?
Том

18

Facebook использует структуру LAMP . Внутренние службы Facebook написаны на различных языках программирования, включая C ++, Java, Python и Erlang, и используются в соответствии с требованиями. С LAMP Facebook использует некоторые технологии, чтобы поддерживать большое количество запросов, таких как

  1. Memcache - это система кеширования памяти, которая используется для ускорения динамических веб-сайтов, управляемых базой данных (например, Facebook), путем кэширования данных и объектов в оперативной памяти для сокращения времени чтения. Memcache является основной формой кэширования Facebook и помогает снизить нагрузку на базу данных. Наличие системы кеширования позволяет Facebook работать так же быстро, как и при вызове ваших данных.

  2. Экономия (протокол) - это легковесная инфраструктура удаленного вызова процедур для разработки масштабируемых кросс-языковых сервисов. Thrift поддерживает C ++, PHP, Python, Perl, Java, Ruby, Erlang и другие.

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

  4. HipHop for PHP - это преобразователь исходного кода для кода PHP-скрипта, созданный для экономии ресурсов сервера. HipHop преобразует исходный код PHP в оптимизированный C ++. После этого он использует g ++ для компиляции в машинный код.

Если вдаваться в подробности, то ответ на этот вопрос пойдет дольше. Мы можем понять больше из следующих постов:

  1. Как работает Facebook?
  2. Управление данными в стиле Facebook
  3. Дизайн базы данных Facebook?
  4. Структура базы данных стены Facebook
  5. Facebook "как" структура данных

7

«Знание сайтов, которые обрабатывают такой большой трафик, дает архитекторам множество указаний, чтобы иметь в виду определенные вещи при разработке новых сайтов»

Я думаю, что вы, вероятно, многому научитесь из дизайна Facebook, так же, как и из любой успешной крупной программной системы. Однако, мне кажется, что вы не должны помнить о текущем дизайне Facebook при разработке новых систем.

Почему вы хотите иметь возможность обрабатывать трафик, который должен обрабатывать Facebook? Скорее всего, вам никогда не придется, каким бы талантливым вы ни были программистом. С самого начала Facebook не был рассчитан на такую ​​масштабируемость, что является, пожалуй, самым важным уроком, который можно извлечь из него.

Если вы хотите узнать о нетривиальной системе программного обеспечения, я могу порекомендовать вам книгу «Рассечение приложения C #» о разработке IDE SharpDevelop. Это из печати, но это доступно бесплатно онлайн . Книга дает вам представление о реальном приложении и дает представление о IDE, которые полезны для программиста.


1
да, наверное, не так много людей вообще должны иметь дело с таким интенсивным движением. но всегда хорошо понимать масштабируемость и то, как такая великая компания, как Facebook, справляется с таким большим трафиком. Там могут быть некоторые хорошие дизайнерские достоинства можно извлечь из :)
триллионы

@nanshi: я согласен, что полезно учиться. Я хочу сказать, что вы должны помнить, для чего вы разрабатываете. Проектирование для масштабируемости с первого дня затрудняет изменение того, что делает программа. В большинстве ситуаций простота важнее. Кроме того, Facebook поддерживается многими людьми. Каждый из этих людей должен быть экспертом только в части системы.
Йорген Фог

я понимаю вашу точку зрения согласен :)
триллионы
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.