přejít na obsah přejít na navigaci

Linux E X P R E S, HHVM: co to je, proč používat, jak na to

HHVM: co to je, proč používat, jak na to

hhvm_logo.png

Technologii PHP zná téměř každý, kdo někdy nějak „víc zavadil“ o web. Protože na tom ale PHP není moc dobře s rychlostí, vytvořila si firma Facebook rychlejší modifikaci: HHVM. Podívejme se na tuto technologii blíže.


PHP – pomalost a akcelerátory

Technologie PHP vznikla pro webové skriptování a tomu odpovídal i způsob práce. Skripty se při každém požadavku načítaly a interpretovaly. Nejmarkantnější to samozřejmě bylo, dokud by interpret PHP jako úplně samostatný program, který bylo potřeba při každém požadavku spustit. Použití modulu do webového serveru Apache, stejně jako řešení typu PHP-FPM odbourává spouštění, interpretace kódu ale zůstává.

Protože pomalost samozřejmě vadila, vznikly různé tzv. akcelerátory. Ty fungují tak, že při prvním požadavku na skript tento zpracují, zkompilují do mezijazyka (bytecode, bajtkód), ten případně dále optimalizují a kromě spuštění ho také uloží k dalšímu použití (do paměti nebo na disk). Při dalším požadavku zkontrolují, zda se skript změnil – pokud ano, zpracují ho znovu, jinak použijí zkompilovanou podobu (odbavení takového požadavku už je podstatně rychlejší než u toho prvního).

Mezi známé akcelerátory patří například eAccelerator nebo Alternative PHP Cache (APC). Dříve se používaly poměrně hojně, později byl jeden z dalších známých akcelerátorů – původně nazvaný Zend Optimizer+ – začleněn pod názvem Zend Opcachepřímo do PHP (od verze 5.5).

Cesta Facebooku

Pro sociální síť Facebook se kdysi používal již zmíněný akcelerátor APC a vývojáři Facebooku dokonce přispívali do jeho kódu. Pořád to ale výkonově nestačilo, proto vznikl HipHop for PHP (HPHPc). To byl překladač („transpilátor“) zdrojového kódu z jazyka PHP do C++, který se následně kompiloval běžným kompilátorem C++.

První HPHPc verze přišla v roce 2010 (kód byl poskytnut veřejně pod PHP License), vývojáři k němu vytvořili i interpret (HPHPi) a debugger (HPHPd), které umožňovaly snadné ladění kódu skriptů. Již o tři roky později však byl vývoj ukončen. Nevýhodou HPHPc bylo především to, že nepodporoval celou šíři platformy PHP, navíc kompilace celé aplikace mohla trvat dlouho a vyžadovat mnoho paměti.

Za ukončením vývoje stálo i to, že mezitím začala vznikat technologie HipHop Virtual Machine (HHVM). Jak název napovídá, je to virtuální stroj. Svým charakterem hodně připomíná například virtuální stroj jazyka Java. První verze spatřila světlo světa v roce 2011, aktuálně je tu verze 3.9 a stále běží aktivní vývoj.

Co umí HHVM

Prvním krokem je kompilace zdrojového kódu PHP (nebo také jazyka Hack, který je od PHP odvozen) do bytecode (HHBC). Ten se pak před spuštěním překládá do strojového kódu a optimalizuje. Výsledkem je rychlejší běh jak oproti přímé interpretaci, tak oproti interpretaci bytecode. Na druhou stranu je potřeba podstatně více paměti, s čímž je nutno počítat.

HHVM podporuje prakticky kompletní platformu PHP, takže aplikace pro jeho použití nevyžadují žádné významnější změny, pokud vůbec nějaké. Vývojáři průběžně testují kompatibilitu populárních frameworků pro PHP a lze se tedy podívat, jak si který stojí.

Zajímavostí je, že na HHVM dnes běží encyklopedie Wikipedia a příslušný software MediaWiki je s HHVM plně kompatibilní.

Kde získat a jak nainstalovat HHVM

Máte-li zájem si HHVM vyzkoušet nebo si na něm spustit i ostrou aplikaci, máte tři možnosti. První  z nich je instalace hotových balíčků. Jsou přímo k dispozici pro linuxové distribuce Ubuntu (aktuálně pro verzi 14.04 a novější; LTS verze 10.04 a 12.04 jsou také podporovány, ale nejsou pro ně nové verze HHVM, totéž se týká i distribuce Linux Mint 16) a Debian (7 a 8). Protože je k dispozici repozitář balíčků, lze je snadno udržovat aktualizované.

Druhou možností je využít řešení PuPHPet. To umožňuje vytvořit se virtuální stroj pro provoz webového serveru a jednou z možností je právě i použití HHVM. Pro vyzkoušení je to určitě nejsnazší možnost, všechno se dá snadno „naklikat“. Jako poslední možnost zbývá samozřejmě kompilace ze zdrojových kódů (které jsou k dispozici pod PHP License a Zend License).

Co se týká konfigurace, zatím nejsou k dispozici všechny konfigurační volby v souboru php.ini, které jsou zmíněny v dokumentaci. Měly by ale postupně přibývat. HHVM má naopak své vlastní konfigurační parametry v souboru server.ini. Balíčky jsou připravené pro běh s webovými servery Apache a nginx.

Standardní rozšíření obsažená v PHP jsou v HHVM k dispozici (v rozsahu popsaném v dokumentaci). Pokud si chce přidávat svá vlastní rozšíření, možnost tu je.

Závěr

HHVM je zajímavou alternativou klasického PHP. Nabízí vyšší rychlost, ale současně požaduje více paměti. Je samozřejmě potřeba brát v úvahu, že ho Facebook vyvíjí v první řadě pro sebe, takže přestože ho poskytuje veřejně pod otevřenými licencemi, nemusí příliš reflektovat požadavky jiných uživatelů. Je také možné, že bude dříve či později nahrazen nějakou lepší technologií a jeho vývoj bude ukončen, jako se to stalo třeba u HPHPc.

Nahoru

Příspěvky

HHVM: co to je, proč používat, jak na to
Daniel Kozak 21. 09. 2015, 17:26:49
Odpovědět  Odkaz 
Tak co se akceleratoru tyce, tak je urcite skoda, ze autor vynechal jeden z nejznamejsich a nejlepsich (XCache).

Co se tyce HHVM a pametove narocnosti, tak ve spouste pripadu je rozdil o proti standardni distribuci PHP (Zend PHP) velmi mizivi. Co je ale velky problem je ze HHVM "tece", to znamena ze dlouho bezici procesy mohou zrat vice a vice pameti. Da se to resit tak ze se v kodu vyhne cyklickym referencim, nebude v cyklu volat include, neustale predefinovavat promenou obsahujici anonymni funkci atd...

Facebook to resi tak ze proste jedno za cas procesy restartuje.

Dalsi co je treba si uvedomit je ze se HHVM nehodi na "one shot" pouziti. Duvodem je to ze samotna interpretace kodu (i s vypnutym JIT) je az desetinasobne pomalejsi nez u Zend PHP. Takze pokud mate nejaky jednorazovy skript ktery neco vykonava a spustite ho pravidelne treba 10x za sekundu, tak je lepsi zustat u standardniho PHP. Pripadne to prepsat tak aby se ten HHVM proces neukoncoval.

Ja to v praci resim vlastnim demonem (obdoba php-fpm). Ale opet je treba zajistit aby netekla pamet, nebo jednou za cas restartovat.

Jednou z veci jak je mozne mirne zvysit vykon u HHVM je pouziti authorativniho rezimu, jedna se o takovou predkompilaci do HHBC (zisk je okolo 20%). Nevyhodou samozrejme je ze se musi poustet pri kazde zmene, takze se to hodi zejmena jen pro produkcni nasazeni.

Mnohem zajimavejsi se posledni dobou jevi PHP 7. Velmi mile me prekvapila rychlost a celkova narocnost. Zejmena pametove naroky jsou 4x az 5x mensi a rychlost je asi o 5-15% horsi nez HHVM, coz ale neni vubec spatne, kdyz uvazime ze se stale nejedna o JIT.

Odpovědět

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz