Programovanie

Facebook vymyslí virtuálny stroj PHP

Sociálny gigant Facebook urobil ďalší krok k rýchlejšiemu spusteniu programovacieho jazyka PHP Web. Spoločnosť vyvinula virtuálny stroj PHP, ktorý podľa neho dokáže jazyk spustiť až deväťkrát rýchlejšie ako natívne spustenie PHP na veľkých systémoch.

„Naším cieľom je dosiahnuť, aby PHP fungovalo skutočne, naozaj rýchlo,“ uviedol Joel Pobar, technický manažér Facebooku. Spoločnosť Facebook používa virtuálny stroj s názvom HHVM (HipHop Virtual Machine) na všetkých svojich serveroch od začiatku tohto roka.

[Naučte sa, ako pracovať inteligentnejšie, nie ťažšie so zhrnutím všetkých tipov a trendov, ktoré musia programátori vedieť v príručke pre prežitie pre vývojárov. Stiahnite si PDF ešte dnes! | Držte krok s najnovšími správami pre vývojárov prostredníctvom informačného bulletinu Developer World. ]

Pobar diskutoval o virtuálnom stroji na konferencii OSCON (O'Reilly Open Source Conference), ktorá sa konala tento týždeň v Portlande v Oregone.

HHVM nie je prvým vpádom Facebooku do úpravy PHP pre rýchlejšie použitie. PHP je interpretovaný jazyk, čo znamená, že zdrojový kód je vykonávaný priamo procesorom. Všeobecne možno povedať, že programy napísané v interpretovaných jazykoch, ako je PHP, nebývajú spustené tak rýchlo ako jazyky, ako napríklad C alebo C ++, ktoré boli vopred skompilované do bajtového kódu strojového jazyka. Facebook zostal verný PHP, pretože je dobre pochopený mnohými webovými programátormi, ktorí pre spoločnosť pracujú.

Aby sme udržali krok s nenásytným dopytom používateľov, spoločnosť Facebook pôvodne navrhla kompilátor s názvom HipHop, ktorý preloží kód PHP do C ++, takže ho bude možné vopred skompilovať a dosiahnuť tak rýchlejší výkon.

Aj keď sa spoločnosť Facebook niekoľko rokov tešila značnému zvýšeniu výkonu tejto prvej verzie aplikácie HipHop, hľadala iné spôsoby, ako urýchliť dodanie dynamicky vytváraných webových stránok zhruba svojej miliarde používateľov. „Naša výkonnostná stratégia sa chystala prekonať,“ pripustil Pobar.

HHVM je ďalším krokom pre Facebook. Vyvíjaný asi tri roky, HHVM skutočne funguje na rovnakom princípe ako JVM (Java Virtual Machine). HHVM má kompilátor JIT (just-in-time), ktorý v prípade potreby prevádza ľudsky čitateľný zdrojový kód na strojovo čitateľný bajtový kód. (Predchádzajúci HipHop, premenovaný na HPHPc, bol teraz na Facebooku vyradený.)

Tento prístup JIT umožňuje virtuálnemu stroju „robiť inteligentnejšie rozhodnutia za behu,“ uviedol Pobar. Napríklad, ak dôjde k volaniu do databázy MySQL, aby sa načítal riadok údajov, môže server HHVM priebežne zisťovať, o aký typ údajov ide, napríklad celé číslo alebo reťazec. Potom môže za behu generovať alebo volať kód, ktorý by sa najlepšie hodil na spracovanie tohto konkrétneho typu údajov.

V prípade starého HipHop „najlepšie, čo môže urobiť, je analyzovať celú základňu kódov na Facebooku, zdôvodniť to a potom špecializovať kód na základe jeho zdôvodnenia. Nemôže však správne vyvodiť všetky dôvody. Existujú časti kódovej základne, ktoré nemôžete jednoducho odvodiť alebo o čom uvažovať, “povedal Pobar.

Pobar odhadol, že HHVM je asi dvakrát rýchlejší ako HPHPc a asi deväťkrát rýchlejší ako bežný PHP.

Facebook zverejnil kód pre HHVM na GitHub s nádejou, že ho ostatní použijú aj na zrýchlenie svojich webových stránok PHP.

HHVM je optimalizovaný na prácu s veľmi veľkými a veľmi používanými databázami kódov PHP. Pobar počítal s tým, že použitie HHVM pre štandardné webové stránky, ako je napríklad web, ktorý hostí blog Wordpress, by získalo asi päťnásobné zlepšenie výkonu.

„Ak si vezmete nejaké PHP a spustíte ho na HipHop, nemusí byť čas vykonania CPU limitujúcim faktorom výkonu. Je pravdepodobné, že [systém] trávi príliš veľa času rozhovorom s databázou alebo trávením príliš času rozhovorom [ medzipamäťová vrstva] memcache, povedal Pobar.

Joab Jackson pokrýva podnikový softvér a všeobecné technologické novinky pre Spravodajská služba. Sledujte Joaba na Twitteri na adrese @Joab_Jackson. E-mailová adresa spoločnosti Joab je [email protected]

$config[zx-auto] not found$config[zx-overlay] not found