J’ai toujours été intéressé par les très grosses infrastructures informatiques. J’aime bien comprendre comment ils font pour supporter d’aussi grosses charges.
Dernièrement je me suis intéressé à Facebook. Voici les informations que j’ai pu accumuler.
Le genre de charge que ceux-ci doivent supporter :
120 millions d’usagers actifs
10 milliards de photos
50 milliards de pages vues par mois
Nombre de serveurs : +10 000
Tout d’abord : une vue de ce que ça peut avoir l’air physiquement :
Du côté des composants logiciels :
Système d’exploitation : Fedora et RHEL (Linux)
Langage de programmation : PHP, C++, Python, Java
Base de données : MySQL
Le plus gros de la programmation est en PHP. La raison est qu’ils ont simplement utilisé ce langage au départ. Pendant une présentation, l’ingénieur en chef, mentionne qu’ils ont déjà pensé à utiliser Python pour le cœur du système, mais qu’ils sont restés avec PHP puisque la tâche était énorme et qu’il voulait se concentrer à faire avancé le système présent.
Mais un système nommé Thrift leur permet d’intégrer du développement fait en d’autres langages (C++, Python, Java).
Une des clefs de l’infrastructure Facebook est l’utilisation de memcache. Celui est un système qui permet de garder en mémoire vive des objets et des données. Donc, ainsi plutôt que d’aller d’exécuter le code, demander l’information dans la db, lecture des informations sur la BD, ce qui serait un processus impossible avec autant de requêtes, les informations sont lues directement en mémoire lorsque nécessaire. Ils utiliseraient maintenant plus de 25TB en memcache.
Note : Pour ceux que ça intéresse, le framework Django intègre memcache d’une façon simple et extrêmement performant.
Chose très surprenante: il n’aurait aucun SAN et il n’y a aucun serveur de base de données central, toute l’information est distribuée (souvent au hasard) sur les milliers d’instances de MySQL dont il dispose. De plus, il n’y aurait que 2 DBA dans l’organisation.
Ils modifient beaucoup des applications open source pour les optimiser, par exemple ils ont modifié memcache pour utiliser UDP au lieu de TCP pour réduire l’utilisation de la mémoire. Ils auraient fait de même avec PHP et MySQL pour que ça réponde à leurs besoins.
J’aurais pu continuer longtemps comme ça, mais je voulais présenter l’essentiel. Si ça vous intéresse d’en savoir plus je vous encourage à regarder ces liens :
http://www.infoq.com/presentations/Facebook-Software-Stack
http://venublog.com/2008/04/16/notes-from-scaling-mysql-up-or-out/
http://highscalability.com/strategy-facebook-tweaks-handle-6-time-many-memcached-requests




5 juin 2009 at 8 h 35 min
En fait FB a contribué énormément à memcached. Ils ont étés très gentils en redonnant le source code à la communauté.
5 juin 2009 at 8 h 44 min
Merci de votre commentaire.
Oui, les modifications de memcache par Facebook sont ajouté au logiciel. J’ai vérifié sur un de mes serveurs CentOS et l’option -U pour UDP dans memcached est disponible.
18 novembre 2009 at 14 h 41 min
Ce post est tres interessant et instructif. Il est clair que Facebook contribue enormement au WEb 2.0.
Merci d’avoir partager cela avec nous et Bon boulot.
18 novembre 2009 at 21 h 58 min
Merci de votre commentaire!