HipHop Virtual Machine: le compilateur PHP just in Time de Facebook

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par JanoLapin, 13 Décembre 2011.

  1. JanoLapin
    JanoLapin WRInaute accro
    Inscrit:
    21 Septembre 2008
    Messages:
    4 226
    J'aime reçus:
    0
    Facebook avait déjà livré HipHop, son interpréteur PHP (systématisé en prod' chez FB en 2010, cela avait fait chuter le besoin CPU de 50%). Il vient maintenant de le faire évoluer en un compilateur JIT (just in time): le résultat, intitullé HHVM, pour HipHop Virtual Machine a été ouvert sur github.

    Les gains de performance attendus sont impressionnants: 60% de rapidité en plus pour 90% de mémoire en moins.

    Source: LMI


    90% de mémoire en moins, quand on a 800 millions d'utilisateurs, ça en fait des machines devenues inutiles. Que vont-ils en faire à votre avis ?
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 134
    J'aime reçus:
    325
  3. nervusdm
    nervusdm WRInaute impliqué
    Inscrit:
    5 Janvier 2008
    Messages:
    609
    J'aime reçus:
    0
    Rien, ils en remplaceront moins au pire, ou au mieu, ils s'en serviront pour gérer d'autres charges.
     
  4. swakone
    swakone Nouveau WRInaute
    Inscrit:
    18 Octobre 2011
    Messages:
    14
    J'aime reçus:
    0
    Ca a l'air intéressant, mais concrètement j'ai du mal à voir comment cela fonctionne / s'installe ?

    - Est ce toujours apache qui interprète le c++ ?
    - Comment un flux entrant en port 80 est "redirigé" vers une application interprétant du c++ ?
    - faut il installer un module c++ dans apache, et les urls qui ne sont plus en .php mais en .autrechose ???

    Beaucoup d'interrogations :)

    Si jamais vous croisez un tutoriel, n'hésitez pas...

    Très bonne soirée à tout le monde

    EDIT : de plus, FB semble utiliser beaucoup d'AJAX, cela veut il dire que c'est compatible javascript ? à moins que j'ai mal compris quelque chose... ou que le code généré reste du html ?
     
  5. working-like-a-dog
    working-like-a-dog Nouveau WRInaute
    Inscrit:
    7 Décembre 2011
    Messages:
    9
    J'aime reçus:
    0
    les utiliser pour leur futur moteur de recherche social ? y a que le temps que nous dira !
     
  6. CyberDenix
    CyberDenix Nouveau WRInaute
    Inscrit:
    19 Mars 2008
    Messages:
    3
    J'aime reçus:
    0
    /!\ Déterrage de topic, je viens de lire la news, et constatant que mon bottleneck est visiblement PHP plus que MySQL, le sujet m'intéresse.

    C'est très confus dans ta tête, je vais aborder le peu que j'ai pu appréhender.

    Déjà, laisse tomber Apache, ça tient pas la charge face à NginX.

    La conf idéale est un NginX qui écoute sur le port 80, qui via les rewrites rules détecte une url à réécrire en php et forward en 8080 cette url à la HHVM.

    On a donc schématiquement :

    NginX (listen 80, rewrite vers .php) ----> HHVM (listen 8080, conversion en bytecode ou compilation JIT)

    Il n'y a aucun module spécifique à installer sur NginX (ou Apache).
    C'est juste du forward d'url sur un port différent de celui de NginX (monurl:80 et monurl:8080 sont deux urls différentes).

    Quand Facebook dit qu'il fait beaucoup d'AJAX, c'est qu'il utilise AJAX pour charger des données en PHP

    On a le schéma suivant :

    NginX -> HHVM -> NginX -> (page complète .html) -> AJAX -> NginX -> HHVM -> NginX -> (morceau de .html/json/...)

    La problématique de Facebook n'est pas tant de faire de l'AJAX, mais de délivrer des données en live.
    C'est à dire des données qu'il est impossible de cacher.
    Autrement dit, il est obligé d'exécuter du code dynamique, et c'est ça qui est très coûteux, en temps d'exécution comme en ressources CPU.

    Maintenant, une page web, ce n'est pas que du PHP (JS, CSS, images...).
    Il y a tout un tas de choses à améliorer avant de t'attaquer à cela.

    Scorer + 95 % à Google Page Speed est, selon moi, un excellent préambule aux optimisations "lourdes" comme HHVM.
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 134
    J'aime reçus:
    325
    @CyberDenix : merci pour ton retour d'infos, c'est intéressant :wink:
     
  8. CyberDenix
    CyberDenix Nouveau WRInaute
    Inscrit:
    19 Mars 2008
    Messages:
    3
    J'aime reçus:
    0
    Je me pose deux questions existentielles sur HHVM :

    Le binaire fait-il du séquentiel ou possède-t-il un moyen de paralléliser les écoutes de fichier ?
    On sait que les "serveurs web" traditionnels possèdent ce type de feature, que ce soit Apache, NginX, PHP-FPM... etc.
    Il serait décevant que HHVM n'ai pas ce type de mécanisme, mais la documentation ne précise pas.
    Décevant dans le sens où si HHVM apporte bien un gain de 4.8 x en vitesse d'execution, il suffirait de spawner 5 threads (et plus) avec PHP-FPM pour passer devant.
    Mon PHP-FPM tourne actuellement avec 30 threads, donc c'est loin d'être anodin comme question.
    En pire cas, j'imagine qu'on doit pouvoir faire tourner manuellement 30 HHVM sur des ports différents et utiliser NginX comme load balancer
    Après, il faut bien l'avouer, j'ai tendance à préférer un mécanisme automatique à un mécanisme manuel...

    Le binaire est-il un PHP figé, avec des modules figés ?
    Est-il possible de compiler ses propres modules (GD2, PDO, Memcached, IgBinary... etc.) ?
    Je sais que c'était problématique à l'époque de HPHPc (la version C++, qui était statique).
    Le binaire était un PHP 5.2 avec une liste de modules figée car entièrement réécrite à la sauce Facebook
    C'est ce qui m'avait découragé à l'époque : j'adore utiliser une distribution PHP custom avec des modules triés sur le volet.
    HHVM pourrait être une surcouche de PHP, une machine virtuelle transformant en bytecode + compilation JIT
    Dans le cas où HHVM utiliserait réellement le binaire PHP, on aurait aucun problème de compatibilité.
    Mais j'aimerai en être sûr...

    Bref, c'est vraiment pas évident de trouver de la doc là-dessus, et quand t'en trouve, elle date de deux ans (cf les dates d'édition) et elle parle des fois de l'ancien HipHop (HPHPc).

    https://github.com/facebook/hiphop-php/wiki/Building-and-installing-HHVM-on-Ubuntu-12.04
    https://github.com/facebook/hiphop-php/wiki/Building-and-installing
    https://github.com/facebook/hiphop-php/wiki/Using-nginx-as-front-server-to-HipHop
     
Chargement...
Similar Threads - HipHop Virtual Machine Forum Date
VirtualHost : redirection 301 KO URL Rewriting et .htaccess 16 Janvier 2018
Redirection de page avec virtualhost d'apache Développement d'un site Web ou d'une appli mobile 6 Février 2017
redirection de domaine et virtual host wordpress Administration d'un site Web 29 Octobre 2014
Problème pour configurer un virtualhost avec dernière version de Easyphp Développement d'un site Web ou d'une appli mobile 17 Mai 2014
infos pour virtualbox Débuter en référencement 11 Janvier 2014
accelerer virtualpc le truc qui tue Débuter en référencement 31 Janvier 2013
Que pensez de la solution de partage de liens Virtual Mall ? Netlinking, backlinks, liens et redirections 4 Janvier 2013
VirtualHost qui accepte tous les noms de domaines. Développement d'un site Web ou d'une appli mobile 24 Janvier 2012
virtual host et .fr Administration d'un site Web 11 Juin 2011
Virtualhost par défaut : éternel problème Administration d'un site Web 25 Février 2011
Namevirtualhost has no virtualhosts Administration d'un site Web 7 Janvier 2010
Probleme avec mes virtual host :( plz help Administration d'un site Web 17 Décembre 2008
VirtualHost Référencement international (langues, pays) 30 Septembre 2008
Probleme de DNS ou de Virtual host? Noms de domaine et référencement 28 Août 2008
Virtual host et user associé Administration d'un site Web 21 Mars 2008
Avis serveur virtual. Administration d'un site Web 4 Novembre 2007
Mutualisé ou virtualisé - que choisir? Administration d'un site Web 2 Août 2007
Apache2 mod_cache & virtualhost Administration d'un site Web 31 Juillet 2007
xx.xxx.xx.xx:80 has no VirtualHosts Administration d'un site Web 10 Juillet 2007
Virtualhost sur Apache 2 Administration d'un site Web 14 Décembre 2006