HipHop : L’histoire d’un mal nécessaire

Par Maxime, le 3 février 2010.

Il y a quelques heures a eu lieu une conférence Facebook très attendue par la communauté de développeurs Web tels que votre serviteur. Facebook a annoncé un projet sur lequel 6 personnes travaillent en secret depuis deux ans. Cela s’appelle HipHop for PHP, et c’est un projet open-source visant à transformer du langage PHP en langage C++, afin de le compiler pour atteindre un niveau plus bas dans l’interprétation et accélérer le calcul de ses nombreuses pages dynamiques.

HipHop_logo_white.png

C’est un travail gigantesque qui a été accompli par cette équipe de Facebook. Même si dans l’absolu peu de gens en auront réellement besoin pour leurs sites PHP ; la plupart du temps l’exécution des scripts en eux-même est assez rapide depuis PHP 4 et son Zend Engine. Même pour WordPress, ce qui ralentit l’affichage relève en général des requêtes à la base de données ou du serveur Web (HipHop n’utilise pas Apache, Facebook l’utilisait auparavant), puisque très peu de sites peuvent se targuer d’avoir comme Facebook des pages qui sont uniques pour chaque utilisateur.

Un autre indicateur qui montre que le développeur PHP lambda n’utilisera jamais HipHop réside dans son incompréhension complète de l’utilité voire même de la définition d’HipHop en elle-même… Morceaux choisis, pour le fun :

« I think the HipHop compiler should be great for WordPress users. » — Patrick Musgrave

Le script WordPress en lui-même utilise beaucoup la fonction eval(), qui a été explicitement sacrifiée par HipHop. Impossible donc.

« il semblerait que Facebook se soit amusé à reécrire tout ou une bonne partie de PHP. [...] un compilateur de PHP ne serait pas une idée si farfelue que ça… » — Korben.info

Deux billets associant « Facebook » avec le terme « compilateur PHP ». Cela n’a rien d’un compilateur PHP, il en existe déjà plusieurs depuis des années, le plus connu étant phc. C’est dommage qu’un blog qui se veut vulgarisateur emploie des termes erronés à longueur de journée.

« @Korben: hum, je me disais surtout que vu que Java est plus proche de C++ que Php, pourquoi il n’ont pas écrit Facebook en Java directement. Enfin je me trompe peut-être. » — Tux-planet

Tu te trompes effectivement. En réfléchissant une minute il paraît évident que Facebook ne peut se permettre de re-coder tout son site, d’autant qu’un bon développeur Java se trouve plus difficilement qu’un bon développeur PHP.

08_05_php_vikinger_elephpant.jpg
Pour ceux qui se posent la question : Oui j’en ai un chez moi <3

« mais si on code avec un framework genre cakePHP, est-ce que l’on va pouvoir quand même le compiler ? » — crevette d’@cier

Faux problème : Avant d’en arriver au stade d’avoir besoin de compiler du PHP transformé en C++, il faudrait déjà penser à s’affranchir de son framework qui ne peut que ralentir l’exécution de son site.

« There’s this distinction in coding between a scripted language and a compiled language. PHP is an example of a scripted language. The computer or browser reads the program like a script, from top to bottom, and executes it in that order: anything you declare at the bottom cannot be referenced at the top. » — Une employée de Facebook

Je ne sais pas où l’auteur a récupéré cette employée de Facebook, mais je parie qu’elle s’occupe de la cantine, de la salle Guitar Hero, ou alors du ménage ; en tout cas elle ne peut pas avoir un lien avec les développeurs pour déclarer que PHP est un langage one-pass. Qu’elle demande à ses collègues, ou qu’elle se taise !

« Cela me parait étonnant tout de meme, je vois mal des .exe tourné pour une site web, http://truk.com/hu.exe?var=prout ??? loool » — krg

J’ai gardé le meilleur pour la fin… :) Ça se passe de commentaire. A noter que deux lignes plus loin, krg nous dit qu’il est un hacker. Au moins il ne se fera pas bloquer chez Korben.

Pour en revenir au titre de cet article, les gens qui me connaissent un petit peu savent que je n’ai pas Facebook en particulière adoration, je pense même que plus ça va et plus ça se transforme en un Skyblog mondialisé. Mais tout comme Facebook, Skyblog participe activement à la communauté open-source. Si leurs projets ne sont pas mis en avant de la même manière médiatique, Frank Denis fournit un travail remarquable pour la communauté PHP et open-source depuis des années.

pure-ftpd.png

Evidemment, tout comme HipHop, dans l’absolu ça ne servira qu’à peu de gens, mais allez dire à un administrateur système que sans Skyblog, son serveur FTP n’existerait pas, et qu’il aurait sûrement plus de mal à faire du cache Web efficace, et il va vous rire au nez :) Et peut-être vous frapper. Donc ne le faites pas.

HipHop for PHP sera disponible sur GitHub dans les heures qui viennent.

22 commentaires

DaPo

Sympa comme billet, mais pour en revenir au sujet principal, qu’est ce fameux compilateur: tu expliques ici tout ce qu’il ne fera pas, mais au final, et concrètement, comment ça marche? C’est genre un PhpToC++, ledit C++ pourra tourner sur un serveur web ?

J’suis pas sûr d’avoir compris le délire du truc.

Palleas

Sympa le billet, j’aurais juste une question rapport à cette phrase :
« Faux problème : Avant d’en arriver au stade d’avoir besoin de compiler du PHP transformé en C++, il faudrait déjà penser à s’affranchir de son framework qui ne peut que ralentir l’exécution de son site. »

Tu parles d’execution pure, en excluant (typiquement) la couche de cache qui vient généralement avec et qui fait que le temps de chargement d’un site pourra être très performant quand même?

(je n’arrive pas à formuler ma question, j’espère que t’as compris l’idée :/)

KelMandataire

DaPo je vais essayer de répondre correctement à ta question. Le C++ est un language compilé, tandis que le PHP est un language qui n’est pas compilé. Ton serveur web est censé compiler le php à chaque appel (ou s’il y a un système de cache, à chaque fois que celui-ci est modifié, ou au bout d’un certains nombre d’heures). Cela ralentit donc le temps nécessaire à l’affichage de la page, et c’est ce qui a amené Facebook à développer ce système.

Comme le dit très bien Maxime, avant de vouloir compiler du PHP, il serait plus intéressant d’optimiser de façon correcte ses pages : optimisation du code et des requêtes, suppression du framework, refonte de l’architecture du site, etc.

Marc —

Si tu ne clarifies pas ta phrase a propos de « s’affranchir du framework », tu pourras ajouter ta propore pierre à ce beau ramassis de conneries ;)

Maxime

@DaPo : Le serveur Web est intégré à HipHop, d’où ma réflexion sur le gain de rapidité, ils se sont affranchis d’Apache en plus de s’affranchir du PHP. Mais d’après le lead developer, le changement de serveur Web n’a pas beaucoup influé. Une version supportant Apache est prévue pour plus tard apparemment.

@Palleas : Oui, si tu as des problèmes de scalabilité, la recherche de la maîtrise complète de ton code est primordiale. Donc si tu t’affranchis de ton framework tu peux aussi faire ton propre système de cache (qui sera forcément mieux adapté à tes besoins, puisque le framework n’est qu’une réponse générique à un problème).

eMeRiKa

Mais alors c’est quoi au juste ? On reste sur sa fin là !

Joffrey

Heureusement qu’on ne reste pas sur son début.

Antwan —

@eMeRiKa et autres : Au final, sur ton serveur, au lieu d’avoir classiquement un daemon apache, son plugin php, et des scripts php qui sont parsé/interprétés à chaque fois, ben là on se retrouve juste avec un exécutable x86 (ou autre) « monapplicationweb » qui écoute sur le port 80 et qui balance des pages web aux users. Une sorte d’Apache custom pour chacune de tes appli \o/

Comme c’est dit dans l’article, ça ne servira qu’aux gens dont les performances ont un coût critique dans leur ferme, et certainement pas aux appli archi-cachées comme les wordpress.

Mathieu

C’est marrant, depuis hier je cherche un projet sur lequel j’ai travaillé et où PHP est le bottleneck. Et là impossible de mettre la main dessus : y’a tellement de choses à optimiser avant (MySQL, frameworks inefficaces, caches…) que j’ai du mal à voir l’utilité de HipHop pour le commun des mortels. Même mon application PHP la plus demandée (plusieurs milliers de hits/s) est limitée par les accès disques avant d’être limité par le code PHP.

laurentj

>Le script WordPress en lui-même utilise beaucoup la fonction eval(),

je comprend mieux les trous de sécurité à répétition de Worpress. Si un script utilise eval, c’est qu’il est mal conçu. utiliser eval, c’est une absurdité, d’une part parce que le code qu’il exécute ne peut être optimisé par le runtime php (en particulier, pas de cache d’opcode), mais en plus, c’est une porte grande ouverte à des failles potentielles, et nécessite donc un minimum de compétence pour l’utiliser.

Julien

J’aime beaucoup le logo moi en tout cas.

(Je ne peux commenter qu’à ce propos, je n’ai rien compris au reste.)

Saru —

Utiliser un framework, c’est gagner du temps. C’est utile lorsqu’on lance un site, ou que le cout des heures de dev est plus élevé que le cout des infrastructures. Mais pour Facebook, qui gère de nombreuses données en arrière plan (analyse des requêtes, des groupes, pub ciblée, fichier client…) ce n’est plus le cas.
Combien de sites peuvent se targuer d’être dans le même cas ? Surtout, combien de sites dans ce cas utilisent PHP ? Tous les gros sont déjà sur d’autres systèmes tels que Java/Tomcat ou C++/FastCGI
Amazon, Google, Twitter (bon ok, Ruby, mauvais exemple…), PagesJaunes, eBay…

Regardez eBay (avant qu’ils fassent de l’url rewriting). On voyait clairement le nom des pages: ebaySAPI.dll : Langage compilé (peut être + CGI).

Bref, Facebook a commencé comme étant un projet d’un étudiant. PHP était un très bon choix.
L’entreprise gagne du fric depuis peu, donc il n’avaient pas les moyens de tout reprendre de 0. Mais maintenant, la machine roule. Ils devraient plutôt penser a migrer vers java que de tenter de forker PHP…

My 2cents.

Maxime

@Saru : En tout cas c’est intéressant de voir qu’ils s’y tiennent :) Et merci pour l’éléphpant, quand même :D

sp7

@Julien : le java, le c++ et le php, c’est comme le coréen, le japonais et le chinois.

Quand on ne parle que français, on ne voit pas la différence même si on fait croire le contraire.

Il y a plus de gens qui parlent chinois que coréen ou japonais, et eux ils la voient la différence.

Mais les sites de vulgarisation de « références » pour ne pas les citer, c’est comme les rappeurs qui croient diffuser un niveau de rhétorique élevé de la langue française en faisant de la rime de raclure de comptoir de fond d’égout, ils se trompent et confondent les maux :)

ps : pig up mc k et mc e/d

Saru —

@Maxime c’est toujours un plaisir :)
Jvais essayer de recuperer d’autres goodies aux SL 2010.

ponce —

Intéressant l’histoire sur Skyblog !

Techniquement, Hiphop est un « compilateur » vu qu’il transforme un langage en un autre. Il a une utilité, mais surtout pour facebook qui est CPU-bound. Par ailleurs une étude montre qu’une bonne moitié des projets PHP utilisent soit eval(), soit un dynamic include ce qui ne peut pas être géré par un truc genre Hiphop.

Saru —

Pour le dynamic include, disons simplement tous les sites avec une factory soit… beaucoup :)

John —

@laurentj : sans eval tu peux aussi avoir des trous de sécurité si tu es mauvais; la réciproque est fausse.

Florent Clairambault

Pour wordpress, sur la version SVN si tu fais :

# find -name « *.php » -exec grep « eval( » {} /dev/null \;|grep -v plugins
et que tu regardes dans les détails chaque ligne, tu t’apercevras que tous les eval en question ne sont que des eval javascript.

Sinon je suis d’accord avec John, le risque est dans les mauvais, pas les outils.

Oleiade —

Moi, je trouve ca rigolo ce petit air superieur que le redacteur cherche a se donner. Avoir developpe un site a succes ne fait pas de lui un specialiste en matiere de programmation, et pourtant il semble se plaire a casser du sucre sur le dos de ses adversaires. Rafraichissant…

Maxime

@Oleiade : Je ne me proclame spécialiste en matière de rien ^^ et je ne savais pas que Facebook ou Korben étaient mes adversaires ?

Roberta —

Puisque tu veux pinailler, allons-y : PureFTPd a été écrit par Franck Denis avant même que la plateforme Skyblog n’existe. Quand à skycache, bon, c’est un peu un gadget.

Donc Skyblog n’y est pour pas grand chose (ou au pire, pour quels corrections de bugs ou fonctionnalités mineures). Autant dans ce cas diire que c’est grâce aux sites pornos que PureFTPd existe (ce qui n’est pas moins faux, sans être tout à fait vrai non plus).

Laisser un commentaire

Note : Pour qu'un commentaire soit affiché, votre e-mail doit être valide, et votre texte ne doit pas comporter d'insultes. Si vous ne respectez pas ça, n'essayez même pas de commenter.