Я изучал статьи / информацию об архитектуре в Facebook, проблемах и способах их решения. Что они используют и почему они используют. Как они масштабируются и каковы дизайнерские решения для того, что они делают, и т.д. Знание сайтов, которые обрабатывают такой большой трафик, дает архитекторам множество указаний, чтобы иметь в виду определенные вещи при разработке новых сайтов. Я делюсь тем, что нашел.
- Фейсбук Наука и Социальный График (Видео)
- Масштаб в Facebook
- Архитектура чата Facebook
- Блог Facebook
- Facebook Кассандра Архитектура и дизайн
- Инженерные заметки Facebook
- Quora - Архитектура Facebook
- Facebook для 600M пользователей
- Hadoop и его использование на Facebook
- Эрланг на Facebook: Чат Архитектура
- Кэширование производительности Facebook
- Архитектура Facebook Connect
У меня есть еще 2 ссылки, но я не могу опубликовать из-за ограничений на этом сайте. Кроме того, пожалуйста, поделитесь, если у кого-нибудь есть что-то лучше (не обязательно иметь отношение только к Facebook).
PS - Я не смог найти хорошие места, чтобы поделиться этим исследованием, отсюда и эта инициатива. Надеюсь, это кому-нибудь поможет.
facebook
design-patterns
architecture
Срикар Аппалараджу
источник
источник
Ответы:
Ну, 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 вообще не очень хорошая идея и что это не так. успешный и что вы не должны получать идеи от этого .... Я просто говорю, что если бы вы могли просматривать весь их исходный код, вы, вероятно, не выиграете от этого.
источник
Facebook использует структуру LAMP . Внутренние службы Facebook написаны на различных языках программирования, включая C ++, Java, Python и Erlang, и используются в соответствии с требованиями. С LAMP Facebook использует некоторые технологии, чтобы поддерживать большое количество запросов, таких как
Memcache - это система кеширования памяти, которая используется для ускорения динамических веб-сайтов, управляемых базой данных (например, Facebook), путем кэширования данных и объектов в оперативной памяти для сокращения времени чтения. Memcache является основной формой кэширования Facebook и помогает снизить нагрузку на базу данных. Наличие системы кеширования позволяет Facebook работать так же быстро, как и при вызове ваших данных.
Экономия (протокол) - это легковесная инфраструктура удаленного вызова процедур для разработки масштабируемых кросс-языковых сервисов. Thrift поддерживает C ++, PHP, Python, Perl, Java, Ruby, Erlang и другие.
Cassandra (база данных) - это система управления базами данных, предназначенная для обработки больших объемов данных, распределенных по многим серверам.
HipHop for PHP - это преобразователь исходного кода для кода PHP-скрипта, созданный для экономии ресурсов сервера. HipHop преобразует исходный код PHP в оптимизированный C ++. После этого он использует g ++ для компиляции в машинный код.
Если вдаваться в подробности, то ответ на этот вопрос пойдет дольше. Мы можем понять больше из следующих постов:
источник
Я думаю, что вы, вероятно, многому научитесь из дизайна Facebook, так же, как и из любой успешной крупной программной системы. Однако, мне кажется, что вы не должны помнить о текущем дизайне Facebook при разработке новых систем.
Почему вы хотите иметь возможность обрабатывать трафик, который должен обрабатывать Facebook? Скорее всего, вам никогда не придется, каким бы талантливым вы ни были программистом. С самого начала Facebook не был рассчитан на такую масштабируемость, что является, пожалуй, самым важным уроком, который можно извлечь из него.
Если вы хотите узнать о нетривиальной системе программного обеспечения, я могу порекомендовать вам книгу «Рассечение приложения C #» о разработке IDE SharpDevelop. Это из печати, но это доступно бесплатно онлайн . Книга дает вам представление о реальном приложении и дает представление о IDE, которые полезны для программиста.
источник