web-dev-qa-db-fra.com

Architecture Facebook

J'ai cherché des articles et des informations sur l'architecture de Facebook, les défis et les moyens utilisés pour les résoudre. Qu'est-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. L’objet principal est d’apprendre. Connaître les sites qui traitent un trafic aussi important donne aux architectes, etc. de nombreux conseils, pour garder à l’esprit certaines choses lors de la conception de nouveaux sites. Je partage ce que j'ai trouvé.

  1. Facebook Science et graphique social (vidéo)
  2. Échelle sur Facebook
  3. Architecture de chat Facebook
  4. Blog Facebook
  5. Facebook Cassandra Architecture et design
  6. Notes techniques Facebook
  7. Architecture de Quora - 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 Facebook
  12. Architecture de Facebook Connect

J'ai encore 2 liens mais je ne peux pas poster en raison de restrictions sur ce site. Aussi, s'il vous plaît partager si quelqu'un a quelque chose de mieux (ne doit pas être lié à Facebook uniquement).

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

166
Srikar Appalaraju

Eh bien, Facebook a subi de nombreuses modifications et n'a pas été conçu à l'origine pour être efficace. Il a été conçu pour faire son travail. Je ne sais absolument pas à quoi ressemble le code et vous ne trouverez probablement pas beaucoup d'informations à ce sujet (pour des raisons évidentes de sécurité et de copyright), mais jetez simplement un coup d'œil à l'API. Regardez combien de fois cela change et combien de fois cela ne fonctionne plus ou plus du tout.

Je pense que le plus gros 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 supporte que trop, il ne peut tout simplement pas tout convertir en C++. Alors qu'est-ce que cela nous dit? Eh bien, cela nous dit que Facebook ne tire pas pleinement parti 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 compatibilité PHP 4. Sinon, ils ne pourraient pas utiliser HipHop. HipHop IS UN BON IDEA et doit grandir et se développer, mais dans son état actuel, il n'est pas vraiment utile pour les nombreuses personnes qui construisent de NOUVELLES PHP applications.

Il y a aussi PHP à Java via des éléments tels que Resin/Quercus. Encore une fois, ça ne supporte pas tout ...

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

Cependant ... Il existe des modules pratiques PHP qui peuvent aider à résoudre les problèmes de vitesse. En fin de journée, nous avons cette chose géniale appelée "le nuage" et avec elle, nous pouvons faire évoluer nos applications (PHP inclus) pour que ce ne soit plus tout aussi important. Le matériel devient de moins en moins cher. Amazon vient d'abaisser ses prix (encore) en parlant de.

Donc, tant que vous codez votre PHP application autour de l’idée qu’elle devra être redimensionnée un jour ... Ensuite, je pense que tout va bien et que je ne suis pas vraiment sûr de regarder Facebook. et ce qu’ils ont fait parce qu’ils l’ont fait, c’était un monde complètement différent et nous essayons maintenant de retenir cette infrastructure et de l’entretenir ... Eh bien, vous obtenez des choses comme HipHop.

Maintenant, comment HipHop va-t-il vous aider? Ça ne va pas. Ça ne peut pas. Vous commencez à neuf, vous pouvez utiliser PHP 5.3. Je vous recommande vivement de vous familiariser avec les frameworks PHP 5.3 et tous les nouveaux avantages apportés par PHP 5.3 avec les bibliothèques SPL, ainsi que par votre base de données. Vous servirez probablement du contenu à partir d'une base de données, 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/application le plus "courant".

Regardez de NOUVELLES entreprises telles que Foursquare et Smugmug, ainsi que d’autres entreprises qui utilisent la nouvelle technologie et comment elles l’utilisent. Pour le succès de Facebook, honnêtement, je ne les examinerais pas pour savoir comment créer un site Web/une application efficace. Je ne dis pas qu'ils n'ont 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 le cas. réussi et que vous ne devriez pas en tirer d’idées ... Je dis simplement que si vous pouviez voir l’ensemble de leur code source, vous n’en tireriez probablement aucun avantage.

33
Tom

Facebook utilise structure LAMP . Les services back-end de Facebook sont écrits dans divers langages de programmation, notamment C++, Java, Python et Erlang, et sont utilisés en fonction des besoins. Avec LAMP, Facebook utilise certaines technologies pour prendre en charge un grand nombre de demandes, telles que

  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 les bases de données (comme Facebook) en mettant en cache des données et des objets dans RAM afin de réduire le temps de lecture Memcache est la principale forme de mise en cache de Facebook et contribue à réduire la charge de la base de données. Un système de mise en cache permet à Facebook d’être aussi rapide que de rappeler vos données.

  2. Thrift (protocol) - Il s'agit d'un cadre d'appel de procédure distant léger pour le développement de services inter-langues évolutif. Thrift prend en charge les langages C++, PHP, Python, Perl, Java, Ruby, Erlang et autres.

  3. Cassandra (database) - 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 - C’est un transformateur de code source pour PHP code de script et a été créé pour économiser les ressources du serveur. Transformations HipHop PHP code source en C++ optimisé, après quoi il utilise g ++ pour le compiler en code machine.

Si nous allons plus en détail, alors répondez à cette question plus longtemps. Nous pouvons comprendre plus de posts suivants:

  1. Comment fonctionne Facebook?
  2. Gestion des données, style Facebook
  3. conception de la base de données Facebook?
  4. structure de la base de données du mur Facebook
  5. structure de données "similaire" de Facebook
17
Somnath Muluk

"Connaître les sites qui traitent un trafic aussi important donne de nombreux conseils aux architectes, etc. pour garder à l'esprit certains éléments lors de la conception de nouveaux sites"

Je pense que vous pouvez probablement apprendre beaucoup de la conception de Facebook, tout comme de la conception de tout système logiciel réussi. Cependant, il me semble que vous devriez ne 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 le talent d'un programmeur. Facebook lui-même n'a pas été conçu dès le départ pour une telle extensibilité, ce qui est peut-être la leçon la plus importante à en tirer.

Si vous souhaitez 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’EDI SharpDevelop. Il est épuisé, mais c'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.

7
Jørgen Fogh