Архитектура Facebook

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

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

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

Ответ 1

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

Ответ 2

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

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

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

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

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

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

Ответ 3

  "Зная о сайтах, которые обрабатывают такой массовый трафик дает много указатели для архитекторов и т.д. иметь в виду определенные вещи при разработке новые сайты "

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

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

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