L'équipe de développement du site
Facebook.com a publié, dans la nuit de mardi à mercredi, une nouvelle implémentation Open Source du langage PHP, baptisée Hip Hop. Conçue dans une optique d'améliorations des performances, celle-ci traduit en fait l'essentiel du code PHP en code C++, avant de le compiler à l'aide de g++.
Le souci des performances
La rumeur courait déjà depuis quelques semaines, à cause d'une
interview d'un prétendu employé de Facebook. Dans l'article, l'ingénieur évoquait la sortie d'une version de PHP développée par Facebook même, visant à fournir de meilleures performances que l'implémentation de base du langage. Cependant,
la présentation officielle de HipHop n'a été faite que cette semaine.
L'ingénieur responsable de HipHop, Haiping Zhao, explique ainsi que le projet est vieux de quelques années. Facebook est majoritairement écrit en PHP, mais la version du langage couramment utilisée est peu performante, ce qui force les ingénieurs à recourir à d'autres langages. Ainsi, Facebook a utilisé ou utilise encore des technologies comme Java, Python (et le
serveur Tornado), Erlang (utilisé pour le chat) ou même C++. Le site participe donc à un certain nombre de projets Open Source, dont il est parfois l'initiateur, comme pour la
base de données Cassandra.
Cependant, Zhao explique que 90 % du site reste écrit en PHP, car le langage permet selon lui de développer plus simplement et plus rapidement de nouvelles fonctionnalités, sans compter qu'utiliser une autre technologie implique d'écrire un code "glu" en PHP pour pouvoir l'utiliser sur le site. Dans le développement d'un projet web, les performances des pages ne sont pas un problème, du moins au début, car la principale préoccupation est la base de données.
Mais le succès de Facebook le contraint à une forte charge (environ 350 millions d'utilisateurs, soit 400 milliards de pages vues par mois), ce qui oblige les programmeurs à recourir à des techniques de mise en cache et déplace le problème du côté du code des pages lui-même. De manière générale, les sites de la génération dite du "web 2.0" sont
souvent soumis à de cruciales questions de performances, et l'implémentation officielle de PHP n'a pas été pensée pour des sites subissant une charge aussi massive.
Un hyper-PHP
Les ingénieurs avaient alors plusieurs choix possibles : réécrire tout le site dans un autre langage (ce qui aurait pris du temps), ou continuer à recourir à des technologies tierces comme C++ en se contentant d'écrire un "code glu" en PHP pour faire la liaison avec ce code. La troisième possibilité, celle qui a été retenue, était de rendre PHP plus rapide, afin d'alléger la charge des serveurs tout en conservant le confort d'utilisation du langage.
D'autres projets plus anciens avaient déjà cet objectif. Par exemple,
Roadsend ou
PHC sont deux compilateurs qui génèrent du code C à partir d'un programme PHP,
Quercus produit du code Java, etc. Mais l'équipe du projet a préféré lancer son propre compilateur, qui traduit en fait le code PHP en un code C++, en l'intégrant dans un serveur web écrit pour l'occasion.
Les étapes de la compilationLe fait que PHP ressemble syntaxiquement à C++ permet, selon Zhao, de traduire directement une partie du code. Cependant, HipHop ne s'arrête pas là : le compilateur doit analyser les dépendances de chaque fichier afin d'optimiser les appels de fonctions ou l'utilisation de variables. De plus, C++ étant
un langage statique, le type des données doit être connu à la compilation, ce qui est réalisé par
inférence de types : les types des variables ne sont pas déclarés comme ils le seraient en C++, mais déduits du contexte d'utilisation, comme le font des langages comme OCaml (par opposition, PHP ne détermine le type d'une variable qu'à l'exécution d'un programme). C'est ensuite le compilateur g++ qui est appelé pour convertir le code C++ en un programme utilisable.
Naturellement, les fonctionnalités dynamiques de PHP (par exemple l'inclusion de code inconnu à la compilation, la fonction eval ou l'indirection de variables) sont incompatibles avec cette approche, mais, selon les auteurs du projet, leur utilisation n'est pas si fréquente que cela dans la majorité des sites, et l'essentiel du code de Facebook, par exemple, est compatible avec HipHop sans réécriture. Le projet est Open Source, publié sous la licence libre PHP, et accessible sur le site GitHub.
Pour l'instant, HipHop fonctionne avec PHP 5.2. Les premiers objectifs de l'équipe sont le support de la version 5.3, ainsi que de permettre d'utiliser le serveur web Apache plutôt que celui qui a été développé pour l'occasion.
La présentation au public de HipHop
Une approche efficace
Selon Haiping Zhao, HipHop PHP est à l'oeuvre depuis déjà plus de 6 mois, et a permis de réduire la charge des serveurs de 50 %, ce qui permet d'économiser en matériel. Naturellement, il n'est d'aucune utilité pour résoudre les problèmes liés à une base de données, et ne remplacera pas, au sein de Facebook, l'utilisation de langages comme C++ ou Erlang. Il a cependant fait ses preuves, et son caractère Open Source permet à d'autres sites de l'utiliser, voire de l'améliorer.
L'approche de Facebook, qui s'est contenté de fournir une nouvelle implémentation de PHP basée sur une technologie pré-existante (C++), est à comparer à celle de Google, qui conseille depuis quelques temps à ses ingénieurs de
ne pas utiliser des langages de scripts comme Python, et a annoncé quelques mois plus tôt
le langage Go, dont un des objectifs est de ne dépendre d'aucune autre technologie tout en étant efficace. Il ne fait aucun doute que les deux histoires apporteront beaucoup d'enseignements, car Facebook et Google ont en commun de proposer des sites web dont le nombre d'utilisateurs se compte en dizaines de millions.
Liens divers
153 Participations
Connectez-vous !
Connectez-vous !
Revenir à la liste des news