177 votes

Architecture de Facebook

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

  1. La science et le graphique social de Facebook (vidéo)
  2. L'échelle chez Facebook
  3. Architecture du chat Facebook
  4. Facebook Blog
  5. Architecture et conception de Facebook Cassandra
  6. Notes d'ingénierie sur Facebook
  7. Quora - Architecture de Facebook
  8. Facebook pour 600M d'utilisateurs
  9. Hadoop et son utilisation chez Facebook
  10. Erlang chez Facebook : Architecture de chat
  11. Évolution de la mise en cache des performances de Facebook
  12. Architecture de Facebook Connect/Login

J'ai deux autres liens mais je ne peux pas les afficher en raison des restrictions de ce site. N'hésitez pas à partager si quelqu'un a une meilleure idée (qui ne doit pas nécessairement être liée à Facebook).

P.S. - Je n'ai pas réussi à trouver de bons endroits pour partager ces recherches, d'où cette initiative. J'espère que cela aidera quelqu'un.

2 votes

2. L'échelle chez Facebook (vidéo) - infoq.com/presentations/Scale-at-Facebook 3. Chat sur Facebook - infoq.com/news/2008/05/facebookchatarchitecture

2 votes

También highscalability.com semble être un endroit idéal pour découvrir les architectures de nombreux sites populaires. Je n'ai aucune idée de la part de vérité et de la part de spéculation, mais c'est là et c'est juste quelque chose à grignoter...

1 votes

El facebook engineering blog dispose à l'occasion d'un aperçu important de leur architecture et des problèmes de mise à l'échelle.

34voto

Tom Points 920

Facebook a subi de très nombreux changements et 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 à son sujet (pour des raisons évidentes de sécurité et de droits d'auteur), mais jetez simplement un œil à l'API. Regardez combien de fois elle change et combien de fois elle ne fonctionne pas correctement, plus 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 le HipHop vous-même : https://github.com/facebook/hiphop-php/wiki

Mais si vous voulez mon avis, c'est une tâche très ambitieuse et probablement une perte de temps. Hiphop ne supporte pas tout, 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 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 choses qui sont compatibles avec PHP 4. HipHop EST UNE BONNE IDÉE et doit se développer et s'étendre, mais dans son état actuel, il n'est pas vraiment utile pour les nombreuses personnes qui créent de NOUVELLES applications PHP.

Il existe également des passerelles entre PHP et JAVA, par exemple via Resin/Quercus. Encore une fois, il 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 en Java. Cependant... Jetons un coup d'oeil aux modules PHP. Ils sont compilés en C++. Donc si vous pouvez construire des modules PHP qui font des choses (comme analyser le 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 chaque besoin possible et pour l'ensemble de votre application, car vous devriez recompiler et ce serait beaucoup plus difficile à coder, etc.

Cependant... Il existe quelques modules PHP pratiques qui peuvent aider à résoudre les problèmes de vitesse. Cependant, à la fin de la journée, nous avons cette chose géniale connue sous le nom de "cloud" et avec elle, nous pouvons faire évoluer nos applications (PHP inclus) de sorte que cela n'a plus autant d'importance. Le matériel devient de moins en moins cher. Amazon vient juste de baisser ses prix (encore) en parlant de ça.

Tant que vous codez votre application PHP autour de l'idée qu'elle devra un jour évoluer... Alors je pense que tout va bien et je ne suis pas vraiment sûr que je regarderais Facebook et ce qu'ils ont fait parce que quand ils l'ont fait, c'était un monde complètement différent et maintenant essayer de maintenir cette infrastructure et la maintenir... Eh bien, vous avez des choses comme HipHop.

Maintenant, comment le HipHop va-t-il vous aider ? Il ne le fera pas. Il ne peut pas. Vous repartez de zéro, vous pouvez utiliser PHP 5.3. Je vous recommande vivement de regarder les frameworks PHP 5.3 et tous les nouveaux avantages que PHP 5.3 apporte, ainsi que les bibliothèques SPL, et de penser aussi à votre base de données. Il est fort probable que vous serviez du contenu à partir d'une base de données. Jetez donc un coup d'œil à MongoDB et à d'autres types de bases de données sans schéma et orientées vers les documents. Elles sont beaucoup plus rapides et mieux adaptées au type de site/application web le plus "commun".

Regardez les NOUVELLES entreprises comme Foursquare et Smugmug et d'autres entreprises qui utilisent une NOUVELLE technologie et COMMENT elles l'utilisent. Malgré le succès de Facebook, je ne m'inspirerais pas d'eux pour savoir "comment" construire un site web ou une application efficace. Je ne dis pas qu'il n'y a pas de personnes très (très) talentueuses qui y travaillent 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, qu'il n'a pas de succès et que vous ne devriez pas y puiser des idées... ..... Je dis simplement que si vous pouviez consulter l'intégralité de son code source, vous n'en tireriez probablement pas profit.

1 votes

Je suis d'accord sur la plupart de ce que vous avez dit. Ces liens sont juste pour la curiosité. Parfois, on regarde un élément de technologie et on se dit "hé ! c'est cool"...

0 votes

En revisitant au hasard ma réponse ici, deux choses. #1, je crois que C et non C++ ma mauvaise technique... Mais plus important encore, Phalcon est un framework PHP plus récent qui convertit beaucoup de code en extension PHP pour plus de rapidité. Bien que la plupart de votre propre code ne sera pas exécuté en C, bien sûr, et toute autre bibliothèque que vous utilisez ne le sera probablement pas non plus. Cependant, c'est une idée intelligente, comme HipHop, qui permet d'obtenir des performances supplémentaires.

0 votes

...et nous revoilà avec cet atout dans leur manche. Des années plus tard, nous avons ce langage Hack (né du hip-hop avec son propre IDE, rien de moins). A-t-il évolué pour devenir quelque chose de mieux ? Nous verrons bien. Peut-il vous aider ? Peut-être, mais il semble maintenant que vous aussi pourrez construire comme Facebook. Cela n'a pris que 4 ans =) Bien que personnellement, je ne serais pas si rapide à boire le kool-aid.

20voto

Somnath Muluk Points 10173

Facebook utilise Structure de LAMP . Les services dorsaux 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 en fonction des besoins. Avec LAMP, Facebook utilise certaines technologies ,pour supporter un grand nombre de requêtes, comme

  1. Memcache - Il s'agit d'un système de mise en cache de la mémoire qui est utilisé pour accélérer les sites web dynamiques basés sur des bases de données (comme Facebook) en mettant en cache les données et les objets dans la RAM afin de 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. Le fait de disposer d'un système de mise en cache permet à Facebook d'être aussi rapide dans le rappel des données.

  2. Thrift (protocole) - Il s'agit d'un cadre léger d'appel de procédure à distance pour le développement de services inter-langues évolutifs. Thrift est compatible avec C++, PHP, Python, Perl, Java, Ruby, Erlang, etc.

  3. Cassandra (base de données) - Il s'agit d'un système de gestion de base de données conçu pour traiter 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 le code PHP script et a été créé pour économiser les ressources du serveur. HipHop transforme le code source PHP en C++ optimisé. Après avoir fait cela, il utilise g++ pour le compiler en code machine.

Si nous entrons dans les détails, la réponse à cette question sera plus longue. Nous pouvons comprendre davantage en lisant les articles suivants :

  1. Comment fonctionne Facebook ?
  2. Gestion des données, à la manière de Facebook
  3. Conception de la base de données de Facebook ?
  4. Structure de la base de données du mur Facebook
  5. Structure de données "like" de Facebook

7voto

Jørgen Fogh Points 3579

"Connaître les sites qui gèrent un trafic aussi massif donne beaucoup de d'indications pour les architectes, etc. de garder à l'esprit certaines choses en concevant de nouveaux sites.

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

Pourquoi voulez-vous être capable de 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 évolutivité aussi 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 "Dissecting a C# Application" 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.

1 votes

Oui, il est probable que peu de gens aient besoin de gérer un trafic aussi important. Mais il est toujours bon de comprendre l'évolutivité et la façon dont une grande entreprise comme Facebook gère un trafic aussi important. Il y a peut-être des mérites de bonne conception dont on peut s'inspirer :)

0 votes

@nanshi : Je suis d'accord pour dire qu'il est utile d'en tirer des enseignements. Ce que je veux dire, c'est que vous devez garder à l'esprit ce pour quoi vous concevez. Concevoir pour l'évolutivité dès le premier jour rend plus difficile de changer ce que fait le programme. Dans la plupart des situations, la simplicité est plus importante. En outre, Facebook est géré par de nombreuses personnes. Chacune de ces personnes ne doit être experte que sur une partie du système.

0 votes

Je vois votre point de vue. d'accord :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X