Architecture de Facebook [fermé]

169

J'ai recherché des articles / informations sur l'architecture de Facebook, les défis et les moyens de les relever. Ce qu'ils utilisent et pourquoi ils utilisent. Comment évoluent-ils et quelles sont les décisions de conception pour ce qu'ils font, etc. Le fondement principal est d'apprendre. Connaître les sites qui gèrent un trafic aussi massif donne de nombreux conseils aux architectes, etc. pour garder à l'esprit certaines choses lors de la conception de nouveaux sites. Je partage ce que j'ai trouvé.

  1. Facebook Science & Social Graph (Vidéo)
  2. Échelle sur Facebook
  3. Architecture de chat Facebook
  4. Blog Facebook
  5. Facebook Cassandra Architecture et Design
  6. Notes d'ingénierie Facebook
  7. Quora - Architecture Facebook
  8. Facebook pour 600 millions d'utilisateurs
  9. Hadoop et son utilisation sur Facebook
  10. Erlang sur Facebook: architecture de chat
  11. Mise en cache des performances de Facebook
  12. Architecture de Facebook Connect

J'ai 2 autres liens mais je ne peux pas publier en raison de restrictions sur ce site. Veuillez également partager si quelqu'un a quelque chose de mieux (ne doit pas être lié à Facebook uniquement).

PS - Je n'ai pas pu trouver de bons endroits pour partager cette recherche, d'où cette initiative. J'espère que cela aide quelqu'un.

Srikar Appalaraju
la source
2
2. Échelle sur Facebook (vidéo) - infoq.com/presentations/Scale-at-Facebook 3. Chat Facebook - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju
2
De plus, highscalability.com semble être un excellent endroit pour en savoir plus sur les architectures de nombreux sites populaires.
Je ne sais
1
Le blog d'ingénierie de Facebook a parfois des informations importantes sur leurs défis d'architecture et d'évolutivité.
Colin Pickard
Comme ce n'est techniquement pas une vraie question, nous vous encourageons à déplacer les informations vers le wiki de la balise FB pour y conserver les informations au cas où cette question serait supprimée. Merci.
Gordon
@Gordon comment ajouter une balise FB Wiki? La balise «Facebook» n'est-elle pas déjà là? Ce n'est pas suffisant?
Srikar Appalaraju

Réponses:

33

Eh bien, Facebook a subi de nombreux changements et il n'a pas été conçu à l'origine pour être efficace. Il a été conçu pour faire son travail. Je n'ai absolument aucune idée de ce à quoi ressemble le code et vous ne trouverez probablement pas beaucoup d'informations à ce sujet (pour des raisons évidentes de sécurité et de droits d'auteur), mais jetez simplement un œil à l'API. Regardez à quelle fréquence cela change et dans quelle mesure cela ne fonctionne plus correctement, ou pas du tout.

Je pense que le plus grand atout dans leur manche est le Hiphop. http://developers.facebook.com/blog/post/358 Vous pouvez utiliser HipHop vous-même: https://github.com/facebook/hiphop-php/wiki

Mais si vous me demandez, c'est une tâche très ambitieuse et probablement une perte de temps. Hiphop ne prend en charge que tellement, il ne peut pas simplement tout convertir en C ++. Alors qu'est-ce que cela nous dit? Eh bien, cela nous dit que Facebook ne profite PAS pleinement du langage PHP. Il n'utilise pas la dernière version 5.3 et je suis prêt à parier qu'il y a encore beaucoup de choses compatibles avec PHP 4. Sinon, ils ne pourraient pas utiliser HipHop. HipHop EST UNE BONNE IDÉE et doit se développer et se développer, mais dans son état actuel, il n'est pas vraiment utile pour autant de personnes qui créent de NOUVELLES applications PHP.

Il y a aussi PHP vers JAVA via des choses comme Resin / Quercus. Encore une fois, cela ne supporte pas tout ...

Une autre chose à noter est que si vous utilisez un module PHP non standard, vous ne pourrez pas non plus convertir ce code en C ++ ou Java. Cependant ... Jetons un œil aux modules PHP. Ils sont compilés en C ++. Donc, si vous pouvez créer des modules PHP qui font des choses (comme analyser XML, etc.) alors vous travaillez essentiellement (moins une interaction) à la même vitesse. Bien sûr, vous ne pouvez pas simplement créer un module PHP pour tous les besoins possibles et l'ensemble de votre application, car vous auriez à recompiler et ce serait beaucoup plus difficile à coder, etc.

Cependant ... Il existe des modules PHP pratiques qui peuvent aider à résoudre les problèmes de vitesse. Bien qu'à la fin de la journée, nous ayons cette chose géniale connue sous le nom de "cloud" et avec elle, nous pouvons faire évoluer nos applications (PHP inclus) afin que cela ne compte plus autant. Le matériel devient de plus en plus bon marché. Amazon vient de baisser ses prix (encore une fois).

Donc, tant que vous codez votre application PHP autour de l'idée qu'elle devra être mise à l'échelle un jour ... Alors je pense que vous allez bien et je ne suis pas vraiment sûr que je regarderais même Facebook et ce qu'ils ont fait parce que quand ils l'ont fait, c'était un monde complètement différent et ils essayaient maintenant de maintenir cette infrastructure et de la maintenir ... Eh bien, vous obtenez des choses comme HipHop.

Maintenant, comment HipHop va-t-il vous aider? Ce ne sera pas le cas. Ça ne peut pas. Vous commencez à neuf, vous pouvez utiliser PHP 5.3. Je vous recommande vivement d'examiner les frameworks PHP 5.3 et tous les nouveaux avantages que PHP 5.3 apporte à la table avec les bibliothèques SPL et de penser également à votre base de données. Vous diffusez probablement du contenu à partir d'une base de données, alors consultez MongoDB et d'autres types de bases de données sans schéma et orientées document. Ils sont beaucoup plus rapides et meilleurs pour le type de site Web / application le plus "courant".

Regardez les NOUVELLES entreprises comme Foursquare et Smugmug et quelques autres entreprises qui utilisent la NOUVELLE technologie et COMMENT elles l'utilisent. Pour le succès de Facebook, honnêtement, je ne les regarderais pas pour savoir comment créer un site Web / une application efficace. Je ne dis pas qu'il n'y a pas de personnes très (très) talentueuses qui travaillent là-bas et qui résolvent (leurs) problèmes de manière créative ... Je ne dis pas non plus que Facebook n'est pas une bonne idée en général et que ce n'est pas réussie et que vous ne devriez pas en tirer d'idées ... Je dis simplement que si vous pouviez voir l'intégralité de leur code source, vous n'en bénéficieriez probablement pas.

À M
la source
1
d'accord sur la plupart de ce que vous avez dit. Ces liens ne sont que par curiosité. Parfois, vous regardez un morceau de technologie et dites "hé! C'est cool" ...
Srikar Appalaraju
Revisitant au hasard ma réponse ici deux choses. # 1, je crois que C et non C ++ mon mauvais technique ... Mais plus important # 2, Phalcon est un nouveau framework PHP qui convertit beaucoup en extension PHP pour la vitesse. Bien qu'une grande partie de votre propre code ne soit pas exécutée en C, bien sûr, aucune autre bibliothèque que vous utilisez ne le sera probablement non plus. Cependant, c'est une idée intelligente tout comme HipHop pour obtenir des performances supplémentaires.
Tom
... et nous y revoilà avec cet as dans leur manche. En regardant en arrière des années plus tard, nous avons ce langage Hack (né du truc HipHop avec son propre IDE pas moins). Est-ce que c'est devenu quelque chose de mieux? Nous verrons. Cela peut-il vous aider? Peut-être, mais maintenant il semble que vous pourrez vous aussi construire comme Facebook. Cela n'a pris qu'environ 4 ans =) Bien que personnellement, je ne serais pas si rapide à boire le kool-aid.
Tom
1
En regardant la réponse maintenant, je suis étonné de voir comment les choses se passent dans le monde de la technologie. Non seulement HipHop a pris en charge les dernières versions de PHP, mais Facebook a également développé HHVM qui est encore plus rapide.
Gopi Krishna
Oui, je reçois parfois des notifications qui me ramènent à cela. C'est vraiment génial de voir comment les choses ont changé et comment HipHop a évolué pour devenir HHVM (et probablement comment Facebook se réinvente sous les couvertures - regardez toutes les incroyables avancées JS qu'ils font également). Ça me semble logique. Si vous avez une entreprise très prospère avec des tonnes d'argent et d'employés ... Pourquoi ne pas réinvestir dans la R&D à un moment donné, n'est-ce pas?
Tom
18

Facebook utilise la structure LAMP . Les services back-end de Facebook sont écrits dans une variété de langages de programmation différents, notamment C ++, Java, Python et Erlang et ils sont utilisés selon les besoins. Avec LAMP, Facebook utilise certaines technologies, pour prendre en charge un grand nombre de demandes, comme

  1. Memcache - Il s'agit d'un système de mise en cache de la mémoire utilisé pour accélérer les sites Web dynamiques basés sur des bases de données (comme Facebook) en mettant en cache des données et des objets dans la RAM pour réduire le temps de lecture. Memcache est la principale forme de mise en cache de Facebook et permet d'alléger la charge de la base de données. Avoir un système de mise en cache permet à Facebook d'être aussi rapide que de rappeler vos données.

  2. Thrift (protocole) - Il s'agit d'un cadre d'appel de procédure à distance léger pour le développement de services multilingues évolutifs. Thrift prend en charge C ++, PHP, Python, Perl, Java, Ruby, Erlang et autres.

  3. Cassandra (base de données) - Il s'agit d'un système de gestion de base de données conçu pour gérer de grandes quantités de données réparties sur de nombreux serveurs.

  4. HipHop pour PHP - Il s'agit d'un transformateur de code source pour le code de script PHP et a été créé pour économiser les ressources du serveur. HipHop transforme le code source PHP en C ++ optimisé. Après cela, il utilise g ++ pour le compiler en code machine.

Si nous entrons plus en détail, la réponse à cette question est plus longue. Nous pouvons en comprendre plus à partir des articles suivants:

  1. Comment fonctionne Facebook?
  2. Gestion des données, style Facebook
  3. Conception de base de données Facebook?
  4. Structure de la base de données du mur Facebook
  5. Structure de données Facebook "like"
Somnath Muluk
la source
7

"Connaître les sites qui gèrent un trafic aussi massif donne de nombreux conseils aux architectes, etc. pour qu'ils gardent à l'esprit certaines choses lors de la conception de nouveaux sites"

Je pense que vous pouvez probablement apprendre beaucoup de la conception de Facebook, tout comme vous pouvez le faire de la conception de tout grand système logiciel réussi. Cependant, il me semble que vous ne devriez pas garder à l'esprit la conception actuelle de Facebook lors de la conception de nouveaux systèmes.

Pourquoi voulez-vous pouvoir gérer le trafic que Facebook doit gérer? Il y a de fortes chances que vous n'ayez jamais à le faire, quel que soit votre talent de programmeur. Facebook lui-même n'a pas été conçu dès le départ pour une telle évolutivité massive, ce qui est peut-être la leçon la plus importante à en tirer.

Si vous voulez en savoir plus sur un système logiciel non trivial, je peux vous recommander le livre "Dissection d'une application C #" sur le développement de l'IDE SharpDevelop. Il est épuisé, mais il est disponible gratuitement en ligne . Le livre vous donne un aperçu d'une application réelle et fournit des informations sur les IDE qui sont utiles pour un programmeur.

Jørgen Fogh
la source
1
oui, probablement peu de gens ont besoin de faire face à un trafic aussi dense. mais il est toujours bon de comprendre l'évolutivité et la façon dont une grande entreprise telle que Facebook gère un trafic aussi dense. Il peut y avoir de bons mérites de conception peuvent être tirés de :)
billions
@nanshi: Je reconnais qu'il est utile de tirer des leçons. Mon point est que vous devez garder à l'esprit ce pour quoi vous concevez. La conception de l'évolutivité dès le premier jour rend plus difficile le changement de ce que fait le programme. Dans la plupart des situations, la simplicité est plus importante. De plus, Facebook est maintenu par de nombreuses personnes. Chacune de ces personnes doit seulement être un expert d'une partie du système.
Jørgen Fogh
Je vois ce que tu veux dire. d'accord :)
trillions