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é.
- Facebook Science & Social Graph (Vidéo)
- Échelle sur Facebook
- Architecture de chat Facebook
- Blog Facebook
- Facebook Cassandra Architecture et Design
- Notes d'ingénierie Facebook
- Quora - Architecture Facebook
- Facebook pour 600 millions d'utilisateurs
- Hadoop et son utilisation sur Facebook
- Erlang sur Facebook: architecture de chat
- Mise en cache des performances de Facebook
- 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.
la source
Réponses:
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.
la source
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
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.
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.
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.
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:
la source
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.
la source