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


169

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

  1. Facebook Science & Social Graph (Відео)
  2. Масштаб у Facebook
  3. Facebook Архітектура чату
  4. Блог у Facebook
  5. Facebook Кассандра Архітектура та дизайн
  6. Facebook Engineering Notes
  7. Quora - Facebook Архітектура
  8. Facebook для користувачів 600M
  9. Hadoop та його використання у Facebook
  10. Erlang у Facebook: Архітектура чату
  11. Кешування продуктивності Facebook
  12. Facebook Connect Архітектура

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

PS - Мені не вдалося знайти хороших місць, щоб поділитися цим дослідженням, звідси і ця ініціатива. Сподіваюся, що це комусь допоможе.


2
2. Масштаб у Facebook (Відео) - infoq.com/presentations/Scale-at-Facebook 3. Facebook Chat - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju

2
Також highscalability.com, здається, є прекрасним місцем для ознайомлення з архітектурою для багатьох популярних сайтів.
Поняття

1
Facebook інженерний блог іноді має суттєві розуміння їх архітектура і масштабні завдання.
Колін Пікард

Оскільки це технічно не справжнє запитання, вам рекомендується перемістити інформацію на вікі з тегом FB, щоб зберегти інформацію там, якщо це питання буде видалено. Дякую.
Гордон

@Gordon як додати тег FB Wiki? Хіба тег "Facebook" вже не існує? Це недостатньо?
Шрікар Аппалараджу

Відповіді:


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. HipHop - ДОБРИЙ ІДЕЯ, і його потрібно рости і розширювати, але в його нинішньому стані це не дуже корисно для багатьох людей, які створюють нові програми PHP.

Також є PHP в JAVA через такі речі, як Смола / Кверк. Знову ж таки, він не підтримує все ...

Ще слід зазначити, що якщо ви використовуєте будь-який нестандартний модуль PHP, ви не зможете конвертувати цей код у C ++ або Java. Однак ... Давайте розглянемо модулі PHP. Вони складаються в C ++. Отже, якщо ви можете побудувати модулі PHP, які виконують такі речі (як розбір XML тощо), ви в основному (за вирахуванням деякої взаємодії) працюєте з однаковою швидкістю. Звичайно, ви не можете просто створити модуль PHP для кожної можливої ​​потреби та всього свого додатка, оскільки вам доведеться перекомпілювати, і це буде набагато складніше кодувати тощо.

Однак ... Є кілька зручних модулів PHP, які можуть допомогти вирішити проблеми з швидкістю. Хоча в кінці дня у нас є ця дивовижна річ, відома як "хмара", і ми можемо масштабувати наші програми (PHP включено), так що це вже не має значення. Апаратура стає все дешевшою та дешевшою. Амазонка просто знизила ціни (знову ж таки).

Тож поки ви кодуєте свій додаток PHP навколо думки, що це знадобиться для одноденного масштабу ... Тоді я думаю, що ви все добре, і я не дуже впевнений, що я навіть переглянув Facebook і що вони зробили, бо коли вони це зробили, це був зовсім інший світ і зараз намагаються утримати цю інфраструктуру та підтримувати її ... Ну, ви отримуєте такі речі, як HipHop.

Тепер, як 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, щоб вичавити деякі додаткові показники.
Том

... і ось ми знову йдемо з цим тузом за рукав. Озирнувшись років тому, у нас є ця мова Hack (народжена з матеріалів 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. Кассандра (база даних) - це система управління базами даних, призначена для обробки великої кількості даних, розкинутої на багатьох серверах.

  4. HipHop для PHP - це трансформатор вихідного коду для коду сценарію PHP і створений для збереження ресурсів сервера. HipHop перетворює вихідний код PHP в оптимізований C ++. Після цього він використовує g ++ для компіляції його до машинного коду.

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

  1. Як працює Facebook?
  2. Управління даними, Facebook-стиль
  3. Дизайн бази даних Facebook?
  4. Структура бази даних стіни Facebook
  5. Facebook "подобається" структурі даних

7

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

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

Чому ви хочете мати можливість обробляти трафік, який має обробляти Facebook? Шанси на те, що вам ніколи не доведеться, незалежно від того, яким талановитим ви будете програмістом. Сам Facebook не був розроблений з самого початку для такої масштабної масштабованості, що, мабуть, найважливіший урок, з якого слід дізнатися.

Якщо ви хочете дізнатися про нетривіальну систему програмного забезпечення, я можу порекомендувати книгу "Розсікання програми C #" про розробку програми SharpDevelop IDE. Він вийшов із друку, але він доступний безкоштовно в Інтернеті . Книга дає змогу ознайомитись із реальною програмою та дає змогу зрозуміти, які IDE корисні для програміста.


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

@nanshi: Я погоджуюся, що корисно вчитися. Моя думка полягає в тому, що ви повинні пам’ятати, для чого ви проектуєте. Проектування масштабованості з першого дня ускладнює зміни того, що робить програма. У більшості ситуацій простота важливіша. Крім того, Facebook підтримує багато людей. Кожен з цих людей повинен бути лише експертом у частині системи.
Jørgen Fogh

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