HHVM onze bevindingen

De Magento-trein dendert almaar door en er wordt van alles uit de kast getrokken om deze zware e-commerce oplossing goed te laten draaien.

In deze techtalk gaan we verder in op een mogelijke oplossing, namelijk: HHVM (HipHop Virtual Machine). HHVM is een PHP JIT (Just in Time) virtual machine welke PHP-code omzet naar computercode. Hierdoor zou elke PHP-applicatie (dus niet alleen Magento) een stuk sneller moeten draaien. Leuk om te weten is dat HHVM bedacht is door Facebook en deze het ook zelf gebruiken voor Facebook.com. Is dit de heilige graal? Wanneer je normaliter een PHP-script start zal PHP elke keer de PHP-code omzetten naar iets bruikbaars voor het PHP-proces. Vooral frameworks, zoals Zend Framework, bevatten vaak vele bestanden met code wat dit omzetten een erg (CPU) kostbaar proces maakt. Stel je voor dat je dit proces maar een keer hoeft te doen? Dit is wat een JIT compiler doet!

PHP heeft hier zelf ook een oplossing voor: PHP OPcache. Onze HPW-servers maken reeds gebruik van PHP OPcache en dit levert al een redelijke winst op in vergelijking met PHP zonder OPcache. Uit wat snelle testen (mbv Apache Benchmark) tussen PHP 5.5 + OPcache en HHVM blijkt HHVM zo’n 2 keer sneller te zijn per pageview.

Nadelen:

HHVM is een product wat redelijk actief wordt ontwikkeld. De “show-stoppers” voor ons op dit moment zijn:

  • Niet alle PHP functionaliteiten zijn 1 op 1 aanwezig op dit moment. Op http://hhvm.com/frameworks/ staat de status van de compatibiliteit met de verschillende frameworks.
  • Geen multipool support. Ons security policy vereist dat elke website onder zijn eigen proces draait. Een workaround hiervoor zou zijn om voor elke website een serverconfiguratie aan te maken en deze te laten luisteren op een eigen poort. En deze vervolgens te starten met Supervisord of systemd (we love systemd :-))
  • Op dit moment draait HHVM onder een unconfined selinux domain. Dit houdt in dat er praktisch geen bescherming is voor websites die draaien met HHVM. De huidige PHP-FPM pools draaien onder het httpd_t domain en zijn erg beperkt en hebben dan ook de hoogst mogelijk veiligheidgraad.
  • We hebben enkele inhouse patches aangebracht in onze standaard PHP-packages. Hier zit nog wat uitzoekwerk voor ons in. (updated feb 2015)
  • Nog geen packages voor RHEL7. Hier zijn we druk mee bezig. (updated feb 2015)

Conclusie:

HHVM is een erg mooie oplossing en doet wat het beloofd. Op dit moment (december 2014) zitten er nog wat ruwe randjes aan en voldoet het nog niet helemaal aan onze eisen. Zodra onze “show-stoppers” zijn verholpen gaan we kijken hoe we HHVM aan onze klanten kunnen gaan bieden.