it-swarm-eu.dev

Proč Facebook používal C ++ vedle PHP?

Jaký je hlavní důvod, proč přiměl Facebook k používání C++ vedle PHP? Zajímalo by mě, jestli si vytvořím web se spoustou vistorů, že bych také potřeboval používat C++?

15
Goma

Zde je důvod: HipHop pro PHP: Move Fast :

Jednou z klíčových hodnot na Facebooku je rychlý pohyb. Za posledních šest let se nám podařilo dosáhnout hodně díky rychlému tempu vývoje, které PHP nabízí.) Jako programovací jazyk PHP je jednoduchý „Snadné se učit, snadno psát, snadno číst a snadno ladit. Jsme schopni získat na Facebooku nové inženýry rychlejší s PHP než s jinými jazyky, což umožňuje abychom rychleji inovovali.

Dnes jsem nadšený, že mohu sdílet projekt s malým týmem úžasných lidí a já jsem pracoval na posledních dvou letech; HipHop pro PHP. S HipHop jsme snížili využití CPU na našich webových serverech v průměru asi o padesát procent, v závislosti na stránce. Méně CPU znamená méně serverů, což znamená méně režijních nákladů. Tento projekt měl na Facebook obrovský dopad. Cítíme, že web může z HipHop těžit, a proto ho dnes večer vydáváme jako open source v naději, že to přinese nové zaměření na škálování velkých komplexních webů s PHP. Přestože nám HipHop ukázal neuvěřitelné výsledky, rozhodně to není úplné a před vyzkoušením byste měli být spokojeni s beta softwarem.

HipHop pro PHP není sám o sobě kompilátor. Spíše je to transformátor zdrojového kódu. HipHop programově transformuje váš PHP zdrojový kód do vysoce optimalizovaného C++ a poté K jeho kompilaci používá g ++. HipHop provádí zdrojový kód sémanticky ekvivalentním způsobem a obětuje některé zřídka používané funkce - například eval () - výměnou za lepší výkon. HipHop zahrnuje transformátor kódu, reimplementaci běhového systému PHP a přepište mnoho běžných PHP rozšíření), abyste mohli využít těchto optimalizací výkonu.

Měřítko PHP jako skriptovací jazyk

Kořeny PHP jsou kořeny skriptovacího jazyka, jako je Perl, Python a Ruby, z nichž všechny mají významné výhody, pokud jde o produktivitu programátora a schopnost rychle iterovat na produktech. To je ve srovnání s tradičními kompilovanými jazyky jako C++ a interpretovanými jazyky jako Java. Na druhé straně je známo, že skriptovací jazyky jsou obecně méně účinné, pokud jde o využití CPU a paměti. Z tohoto důvodu bylo náročné přizpůsobit Facebook na více než 400 miliard zobrazení stránek založených na PHP každý měsíc.

Jedním z běžných způsobů, jak řešit tyto nedostatky, je přepsat složitější části vaší aplikace PHP přímo v C++ jako PHP rozšíření). Tím se do značné míry transformuje PHP do lepivého jazyka mezi front-endem HTML a aplikační logikou v C++. Z technického hlediska to funguje dobře, ale drasticky se snižuje počet techniků, kteří jsou schopni pracovat s celou vaší aplikací. Učení C++ je pouze prvním krokem k napsání rozšíření PHP Rozšíření, druhým je porozumění rozhraní Zend API. Vzhledem k tomu, že náš inženýrský tým je relativně malý - každý inženýr má více než milion uživatelů - nemůžeme si dovolit učinit části naší kódové základny méně přístupnými než ostatní.

Změna měřítka Facebooku je obzvláště náročná, protože téměř každé zobrazení stránky je přihlášeným uživatelem s přizpůsobeným prostředím. Když si prohlížíte svou domovskou stránku, musíme vyhledat všechny své přátele, zeptat se na jejich nejrelevantnější aktualizace (z vlastní služby, kterou jsme vytvořili s názvem Multifeed), filtrovat výsledky na základě vašeho nastavení soukromí a poté vyplnit příběhy komentáři , fotky, hodnocení Líbí se a všechna bohatá data, která lidé o Facebooku milují. To vše za necelou sekundu. HipHop nám umožňuje psát logiku, která provádí sestavení závěrečné stránky v PHP a rychle iterovat a spoléhat se na vlastní back-end služby v C++, Erlang, Java nebo Python za servis zpravodajských kanálů, vyhledávání, chatu a dalších klíčových částí webu.

Od roku 2007 jsme uvažovali o několika různých způsobech, jak tyto problémy vyřešit, a dokonce jsme se pokusili některé z nich implementovat. Společným návrhem je pouze přepsat Facebook do jiného jazyka, ale vzhledem ke složitosti a rychlosti vývoje stránek by to trvalo nějakou dobu. Přepsali jsme aspekty Zend Engineu - interní PHP - a přidali jsme tyto záplaty zpět do projektu PHP), ale nakonec jsme neviděli takové zvýšení výkonu, které je potřeba. téměř transparentní pro naši rychlost vývoje.

Hacking Up HipHop

Jednu noc v Hackathonu před několika lety (viz Prime Time Hack) jsem začal svůj první kus kódu transformující PHP do C++.) Jazyky jsou docela podobné syntakticky a C++ drasticky překonává PHP, pokud jde o využití CPU i paměti. Dokonce PHP je napsán v C. Věděli jsme, že není možné úspěšně přepsat celou kódovou základnu této velikosti pomocí ruku, ale přemýšlel, co by se stalo, kdybychom vytvořili systém, který by to programoval.

Hledání nových způsobů, jak zlepšit výkon PHP výkon není nový koncept. V době běhu Zend Engine promění váš PHP zdroj) na opcodes, které jsou poté spuštěny skrz Virtuální stroj Zend: Projekty s otevřeným zdrojovým kódem, jako jsou APC a eAccelerator, ukládají tento výstup do mezipaměti a používá je většina webových stránek využívajících PHP). K dispozici je také komerční produkt, který vytváří PHP rychlejší pomocí optimalizace opcode a ukládání do mezipaměti. Místo toho jsme přemýšleli o transformaci PHP zdroj přímo do C++, který pak lze převést na nativní strojový kód. Dokonce kompilovat PHP není nový nápad, open source projekty jako Roadsend a phc compile PHP do C, Quercus compiles PHP do Java a Phalanger) kompiluje PHP do .Net.

Netřeba dodávat, že to trvalo déle než ten jediný Hackathon. O osm měsíců později jsem měl dost kódu, abych ukázal, že je skutečně možné s kompilovaným kódem běžet rychleji. Do týmu jsme rychle přidali Iain Proctor a Minghui Yang, abychom urychlili tempo projektu. Strávili jsme dalších deset měsíců dokončováním veškerého kódování a následujících šest měsíců testováním na produkčních serverech. Jsme hrdí na to, že v tuto chvíli obsluhujeme přes 90% našeho webového provozu pomocí technologie HipHop, a to vše pouze šest měsíců po nasazení.

Jak funguje HipHop

Hlavní výzvou projektu bylo překlenutí mezery mezi PHP a C++. PHP je skriptovací jazyk s dynamickým, slabým psaním). C++ je kompilovaný jazyk s statické psaní. Zatímco PHP vám umožňuje psát magické dynamické funkce, většina PHP je relativně přímočará). Je pravděpodobnější, že uvidíte if (...) {...} else {..} než to je vidět function foo($x) { include $x; }. Zde získáme výkon. Kdykoli je to možné, náš vygenerovaný kód používá statické vazby pro funkce a proměnné. Inference typu také používáme k výběru nejpřesnějšího možného typu pro naše proměnné a tak šetří paměť.

Proces transformace zahrnuje tři hlavní kroky:

  1. Statická analýza, kde shromažďujeme informace o tom, kdo deklaruje, co a jaké závislosti,
  2. Inference typu, kde vybereme nejkonkrétnější typ mezi C++ skalárem, String, Array, tříd, Object a Variant a
  3. Generování kódu, které je z velké části přímé korespondence z PHP příkazů a výrazů s příkazy a výrazy C++).

Vyvinuli jsme také HPHPi, což je experimentální tlumočník určený pro vývoj. Když používáte HPHPi, nemusíte před spuštěním kompilovat svůj zdrojový kód PHP================================================================================.

Celkově HipHop nám umožňuje zachovat ty nejlepší aspekty PHP) a zároveň využít výhody výkonu C++. Celkem jsme napsali více než 300 000 řádků kódu a více než 5 000 testů jednotek.

20
Trinidad

Krátká odpověď - ne, nepotřebujete C++.

Věřím, že máte na mysli HipHop . Pokud čtete o vylepšeních, které poskytuje, je to asi 50%. To je velmi důležité, pokud jste Facebook, který má tisíce frontend serverů. Snížení nákladů na ně znamená miliony úspor nákladů v datových centrech. V případě společnosti, která má 10-100 frontendových serverů, by náklady na vývoj výrazně vyvažovaly možné úspory. Nejtěžší zpracování se přesto provádí v back-endu, což je obvykle nějaké řešení RDBMS nebo NoSQL, vyvinuté jako vysoce optimalizovaný kód C/C++.

Samozřejmě by se podařilo dosáhnout mnohem vyšších úspor jen dumping PHP= úplně.) Ale to není něco, co můžete dělat s obrovskou kódovou základnou, jako v případě Facebooku.

Nyní, pro další část otázky: Pokud opravdu chcete vědět, jak se vypořádat s obrovským zatížením, přečtěte si blog o vysoké škálovatelnosti , zejména část Real Life Architectures.

To je možné s PHP, ale rozhodně by to nebyla moje volba. Pokud chcete dynamický jazyk, Python, Ruby nebo možná Lua by byla mnohem lepší volba.

13
vartec

Pěkná věc na přístupu FB je, že se nemuseli hned rozhodovat. Měli byste udělat totéž. Vyberte si jazyk, který vás činí nejproduktivnější, ale ujistěte se, že je snadno propojitelný s C/C++.

Jakmile budete mít miliony uživatelů a budete muset oholit milisekundy mimo dobu odezvy, můžete optimalizovat kritické cesty pomocí C/C++.

6
Scant Roger

Prvek C++ používaný Facebookem je HHVM.

To je virtuální stroj HIPHOP. Přestože je psán v jazyce C++, je v podstatě „lepší PHP interpret)“.

Php kód je kompilován do bajtového kódu, který je pak interpretován pomocí HHVM v době provádění a při spuštění podléhá optimalizaci "Just In Time".

Vývojáři na face book stále píšou většinou v PHP, a to, co vidíte ve svém prohlížeči, je téměř jistě výstupem programu PHP - program - přestože byl kompilován a interpretován runtime HHVM) .

Skutečný HHVM je volně dostupný open source. Takže pokud potřebujete obsluhovat milion obrázků roztomilých koťat za hodinu, můžete si stáhnout HHVM a zrychlit svůj server s minimálními změnami vašeho PHP.

0
James Anderson