Architettura di Facebook [chiuso]


169

Ho cercato articoli / informazioni sull'architettura di Facebook, le sfide e i modi in cui le affrontano. Cosa usano e perché usano. Come si ridimensionano e quali sono le decisioni di progettazione per quello che fanno, ecc. Principale base è l'apprendimento. Conoscere i siti che gestiscono un traffico così intenso offre molti suggerimenti agli architetti, ecc. Per tenere a mente alcune cose durante la progettazione di nuovi siti. Sto condividendo ciò che ho trovato.

  1. Facebook Science & Social Graph (Video)
  2. Scala su Facebook
  3. Architettura della chat di Facebook
  4. Blog di Facebook
  5. Facebook Cassandra Architettura e design
  6. Note di ingegneria di Facebook
  7. Quora - Architettura di Facebook
  8. Facebook per utenti 600M
  9. Hadoop e il suo utilizzo su Facebook
  10. Erlang su Facebook: Chat Architecture
  11. Caching delle prestazioni di Facebook
  12. Architettura di Facebook Connect

Ho altri 2 link ma non riesco a pubblicare a causa di restrizioni su questo sito. Inoltre, ti preghiamo di condividere se qualcuno ha qualcosa di meglio (non è necessario che siano collegati solo a Facebook).

PS - Non sono riuscito a trovare buoni posti per condividere questa ricerca, quindi questa iniziativa. Spero che questo aiuti qualcuno.



2
Anche highscalability.com sembra essere un ottimo posto per conoscere le architetture di molti siti popolari. Non ho idea di quanto sia vero e quanto sia speculativo, ma è là fuori e solo qualcosa su cui sgranocchiare ...
Srikar Appalaraju

1
Il blog di ingegneria di Facebook occasionalmente offre approfondimenti significativi sulla loro architettura e le sfide di ridimensionamento.
Colin Pickard,

Dal momento che tecnicamente questa non è una vera domanda, ti invitiamo a spostare le informazioni nel tag FB wiki per conservare le informazioni nel caso in cui questa domanda venga eliminata. Grazie.
Gordon,

@Gordon come aggiungere il tag Wiki FB? Il tag "Facebook" non è già presente? Non è sufficiente?
Srikar Appalaraju,

Risposte:


33

Bene, Facebook ha subito MOLTE molte modifiche e non è stato originariamente progettato per essere efficiente. È stato progettato per fare il suo lavoro. Non ho assolutamente idea di come sia il codice e probabilmente non troverai molte informazioni al riguardo (per ovvi motivi di sicurezza e copyright), ma dai un'occhiata all'API. Guarda con che frequenza cambia e in che misura non funziona più, per niente o per niente.

Penso che il più grande asso nella manica sia l'hiphop. http://developers.facebook.com/blog/post/358 Puoi usare HipHop da solo: https://github.com/facebook/hiphop-php/wiki

Ma se me lo chiedi, è un compito molto ambizioso e probabilmente una perdita di tempo. Hiphop supporta solo così tanto, non può semplicemente convertire tutto in C ++. Cosa ci dice questo? Bene, ci dice che Facebook NON sta sfruttando appieno il linguaggio PHP. Non utilizza l'ultima 5.3 e sono disposto a scommettere che c'è ancora molto che è compatibile con PHP 4. Altrimenti, non potrebbero usare HipHop. HipHop È UNA BUONA IDEA e deve crescere ed espandersi, ma allo stato attuale non è davvero utile per molte persone che stanno costruendo NUOVE app PHP.

C'è anche PHP per JAVA tramite cose come Resin / Quercus. Ancora una volta, non supporta tutto ...

Un'altra cosa da notare è che se usi un modulo PHP non standard, non sarai nemmeno in grado di convertire quel codice in C ++ o Java. Tuttavia ... Diamo un'occhiata ai moduli PHP. Sono compilati in C ++. Quindi, se puoi costruire moduli PHP che fanno cose (come analizzare XML, ecc.), Allora stai fondamentalmente (meno alcune interazioni) lavorando alla stessa velocità. Ovviamente non puoi semplicemente creare un modulo PHP per ogni possibile esigenza e l'intera app perché dovresti ricompilare e sarebbe molto più difficile codificare, ecc.

Tuttavia ... Ci sono alcuni pratici moduli PHP che possono aiutarti con problemi di velocità. Sebbene alla fine della giornata, abbiamo questa fantastica cosa conosciuta come "il cloud" e con essa, possiamo ridimensionare le nostre applicazioni (incluso PHP) in modo che non contino più così tanto. L'hardware sta diventando sempre più economico. Amazon ha appena abbassato i prezzi (di nuovo) parlando.

Quindi fintanto che codifichi la tua app PHP attorno all'idea che avrà bisogno di un giorno scalare ... Quindi penso che tu stia bene e non sono davvero sicuro che guarderei anche Facebook e cosa hanno fatto perché quando l'hanno fatto, era un mondo completamente diverso e ora sta cercando di sostenere quell'infrastruttura e mantenerla ... Bene, ottieni cose come HipHop.

Ora come ti aiuterà HipHop? Non lo farà. Non può. Stai ricominciando da capo, puoi usare PHP 5.3. Consiglio vivamente di esaminare i framework PHP 5.3 e tutti i nuovi vantaggi che PHP 5.3 porta in tavola insieme alle librerie SPL e di pensare anche al vostro database. Molto probabilmente stai offrendo contenuti da un database, quindi controlla MongoDB e altri tipi di database che sono privi di schemi e orientati ai documenti. Sono molto più veloci e migliori per il tipo di sito web / app più "comune".

Guarda le NUOVE aziende come Foursquare e Smugmug e alcune altre aziende che utilizzano la NUOVA tecnologia e COME la stanno usando. Per il successo di Facebook, onestamente non li guarderei per "come" costruire un sito web / un'app efficiente. Non sto dicendo che non hanno persone molto (molto) di talento che lavorano lì che stanno risolvendo i (loro) problemi in modo creativo ... Non sto anche dicendo che Facebook non è una grande idea in generale e che non lo è successo e che non dovresti avere idee da esso .... Sto solo dicendo che se potessi visualizzare il loro intero codice sorgente, probabilmente non ne trarrai beneficio.


1
concordato sulla maggior parte di ciò che hai detto. Quei collegamenti sono solo per amor di curiosità. A volte guardi un pezzo di tecnologia e dici "ehi! È fantastico" ...
Srikar Appalaraju,

Rivisitando a caso la mia risposta qui due cose. # 1, credo che C e non C ++ siano il mio cattivo tecnico ... Ma soprattutto # 2, Phalcon è un nuovo framework PHP che converte molto in estensione PHP per la velocità. Anche se gran parte del tuo codice non verrà eseguito in C ovviamente e qualsiasi altra libreria che usi probabilmente non lo sarà neanche. Tuttavia, è un'idea intelligente molto simile a HipHop per ottenere qualche prestazione extra.
Tom,

... ed eccoci di nuovo con quell'asso nella manica. Guardando indietro di anni dopo, abbiamo questo linguaggio Hack (nato dalle cose HipHop con il suo IDE non meno). È cresciuto per essere qualcosa di meglio? Vedremo. Ti può aiutare? Forse, ma ora sembra che anche tu sarai in grado di costruire proprio come Facebook. Ci sono voluti solo circa 4 anni =) Anche se personalmente, non sarei così veloce a bere il kool-aid.
Tom,

1
Guardando la risposta ora, sono stupito di come vanno le cose nel mondo della tecnologia. HipHop non solo supportava le ultime versioni di PHP, ma Facebook ha anche sviluppato HHVM che è ancora più veloce.
Gopi Krishna,

Sì, a volte ricevo notifiche che mi riportano a questo. È davvero fantastico vedere come sono cambiate le cose e come HipHop si è evoluto in HHVM (e probabilmente come Facebook si sta reinventando sotto le coperte - guarda anche tutti gli incredibili progressi di JS che stanno facendo). Per me ha senso. Se hai un'azienda di grande successo con tonnellate di denaro e dipendenti ... Perché non reinvestire in R&S a un certo punto, giusto?
Tom,

18

Facebook utilizza la struttura LAMP . I servizi di back-end di Facebook sono scritti in una varietà di linguaggi di programmazione diversi tra cui C ++, Java, Python ed Erlang e vengono utilizzati in base alle esigenze. Con LAMPADA Facebook utilizza alcune tecnologie, per supportare un gran numero di richieste, come

  1. Memcache : è un sistema di memorizzazione nella cache che viene utilizzato per velocizzare i siti Web dinamici basati su database (come Facebook) memorizzando nella cache dati e oggetti nella RAM per ridurre i tempi di lettura. Memcache è la principale forma di memorizzazione nella cache di Facebook e aiuta ad alleviare il caricamento del database. Avere un sistema di memorizzazione nella cache consente a Facebook di essere veloce come lo è nel ricordare i tuoi dati.

  2. Thrift (protocollo) : è un framework di chiamate di procedura remota leggero per lo sviluppo di servizi multilingue multilingue. Thrift supporta C ++, PHP, Python, Perl, Java, Ruby, Erlang e altri.

  3. Cassandra (database) : è un sistema di gestione del database progettato per gestire grandi quantità di dati distribuiti su molti server.

  4. HipHop per PHP - È un trasformatore di codice sorgente per il codice di script PHP ed è stato creato per risparmiare risorse del server. HipHop trasforma il codice sorgente PHP in C ++ ottimizzato. Dopo aver fatto ciò, usa g ++ per compilarlo in codice macchina.

Se andiamo più nel dettaglio, allora la risposta a questa domanda va più a lungo. Possiamo capire di più dai seguenti post:

  1. Come funziona Facebook?
  2. Gestione dei dati, in stile Facebook
  3. Progettazione del database di Facebook?
  4. Struttura del database di Facebook wall
  5. Struttura dei dati "mi piace" di Facebook

7

"Conoscere i siti che gestiscono un traffico così intenso offre molti suggerimenti agli architetti, ecc. Per tenere a mente alcune cose durante la progettazione di nuovi siti"

Penso che probabilmente puoi imparare molto dalla progettazione di Facebook, proprio come puoi progettare da qualsiasi sistema software di grandi dimensioni di successo. Tuttavia, mi sembra che si dovrebbe non mantenere l'attuale configurazione delle Facebook in mente quando si progettano nuovi sistemi.

Perché vuoi essere in grado di gestire il traffico che Facebook deve gestire? Le probabilità sono che non dovrai mai farlo, non importa quanto talentuoso sia un programmatore. Facebook stesso non è stato progettato fin dall'inizio per una scalabilità così massiccia, che è forse la lezione più importante da imparare da esso.

Se vuoi conoscere un sistema software non banale, posso consigliare il libro "Dissezione di un'applicazione C #" sullo sviluppo dell'IDE SharpDevelop. È esaurito, ma è disponibile gratuitamente online . Il libro offre uno sguardo su una vera applicazione e fornisce approfondimenti sugli IDE che sono utili per un programmatore.


1
sì, probabilmente non molte persone devono affrontare un traffico così intenso. ma è sempre bene comprendere la scalabilità e come una grande azienda come Facebook gestisce un traffico così intenso. Potrebbero esserci dei buoni meriti di progettazione da cui si può trarre :)
trilioni del

@nanshi: sono d'accordo che è utile imparare da. Il punto è che dovresti tenere presente ciò per cui stai progettando. Progettare per la scalabilità dal primo giorno rende più difficile cambiare ciò che fa il programma. Nella maggior parte dei casi la semplicità è più importante. Inoltre, Facebook è gestito da molte persone. Ognuna di queste persone deve essere solo un esperto su parte del sistema.
Jørgen Fogh,

vedo il tuo punto. d'accordo :)
trilioni l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.