Na úrovni, na jaké Facebook funguje, troskotá hodně tradičních přístupů k podávání webového obsahu nebo tyto přístupy jednoduše nejsou dostatečně praktické. Výzva pro Facebookové inženýry tak sestává již ze samotného udržování hladkého chodu webu, a to pro téměř půl miliardy aktivních uživatelů. Tento článek se poohlíží po některých softwarových řešeních a technikách, které k dosažení takového stavu Facebook používá.
Než se dostaneme k podrobnostem, zde je několik faktů k vytvoření představy o „výzvě“, kterou Facebook řeší:
- Facebook zaznamená 570 miliard zobrazených stránek za měsíc (podle Google Ad Planner).
- Na Facebooku existuje více fotek než na všech ostatních foto-upload webech dohromady (včetně služeb jako Flickr apod.).
- Na Facebook jsou každý měsíc nahrány více než 3 miliardy fotek.
- Facebook obslouží 1,2 milionu fotografií za sekundu. Toto číslo nezahrnuje obrázky obsluhované přes Facebook CDN.
- Každý měsíc je sdíleno více než 25 bilionů kusů libovolného obsahu (aktualizace stavů, komentáře atd.).
- Facebook má více než 30 000 serverů (a toto číslo pochází z loňského roku!).
Software, který pomáhá Facebooku zdolávat překážky
V některých ohledech je Facebook stále trochu LAMP, ale to se s časem postupně mění. Facebook má neustálou snahu rozšířit svou činnost začleněním mnoha dalších prvků a služeb a také změnit přístup k těm existujícím.
Uveďme několik praktických příkladů:
- Facebook stále používá PHP, ale sestavil pro něj překladač, takže může být transformován na svých webových serverech do nativního kódu a zvýšit tak výkon.
- Dále používá Linux, který je už sám o sobě optimalizován (zejména pokud jde o propustnost sítě).
- A používá i MySQL databáze, ale především jako trvalé úložiště typu key-value, které přesunuje spojení a logiku čistě na webové servery, protože tam (na "druhé straně" Memcached vrstvy) je mnohem snadnější provést samotnou optimalizaci.
Dále Facebook zahrnuje custom-written systémy, jako například Haystack, což je vysoce škálovatelné objektové úložiště, používané pro zpracování nesmírného množství fotografií, nebo Scribe, logovací systém, který může pracovat přímo na bázi Facebooku (což samo o sobě není jednoduché). Ale dost už toho. Pojďme si předvést (některý) software, který Facebook používá, aby nám všem mohl bezchybně zprostředkovat svou největší světovou sociální síť.
Memcached
Memcached je v současné době jedním z nejslavnějších softwarových řešení na internetu. Je to kešovací systém s distribuovanou pamětí, který Facebook (a tuny dalších webů) používá jako cache vrstvu mezi webovými servery a servery MySQL (vzhledem k tomu, že přístup k databázi je sám o sobě poměrně pomalý). Během let Facebook učinil pro Memcached a s ním související software řadu optimalizací (jako třeba optimalizaci síťového zásobníku).
V každém okamžiku běží na Facebooku tisíce Memcached serverů s desítkami terabajtů dat uložených v mezipaměti. Je to pravděpodobně největší aplikace systému Memcached na světě.
HipHop pro PHP
PHP jako skriptovací jazyk je relativně pomalé v porovnání s kódem, který běží nativně na serveru. HipHop převádí PHP do C++ kódu, který pak může být zkompilován pro lepší výkon. To umožnilo Facebooku dostat mnohem více ze svých webových serverů, protože sám se z hlediska podávání obsahu do značné míry o PHP opírá.
Malý tým inženýrů (původně jen tři z nich) strávil vývojem HipHopu 18 měsíců, nyní je však bezproblémově nasazen v reálu.
Haystack
Haystack je Facebooková vysokovýkonná úschovna fotografií či záznamů (přesněji řečeno, Haystack je sklad jakýchkoliv objektů, nemusí to být nutně fotografie). Má sám o sobě na starost spoustu věcí. Podle odhadů existuje více než 20 miliard fotografií nahraných na Facebook, každá z nich je uložena ve čtyřech různých rozlišeních, což vede k číslu většímu než osmdesát miliard.
Celé to není jen o schopnosti zvládnout práci s miliardami fotek, požadavky na výkon obecně jsou prostě kritické. Jak již bylo zmíněno dříve, Facebook pracuje se zhruba 1,2 milionem fotografií za sekundu, tzn. s množstvím, které ještě nezahrnuje obrázky z Facebookového CDN. Jde bez debat o ohromující číslo.
BigPipe
BigPipe je systém obsluhy dynamických webových stránek, vyvinutý samotným Facebookem. Sám ho pak používá k tomu, aby obsloužil každou webovou stránku v sekcích (tzv. „pagelets“), to zajišťuje optimální výkon systému.
Například okno chatu je získáno samostatně, News Feed je získán samostatně a tak dále. Tyto „pagelets“ mohou být vyvolány paralelně, což je právě ta vlastnost, díky které nastává rapidní zvýšení výkonu. Samozřejmě tak zajišťuje funkčnost webu, i když by některé jeho části byly třeba deaktivované nebo problémové.
Cassandra
Cassandra je distribuovaný úložný systém, o kterém se říká, že je naprosto neprůstřelný. Je to jeden z následníků hnutí NoSQL a je čistě open-source (jako projekt Apache). Facebook ho používá pro své vyhledávání v doručené poště. Cassandru využívá řada dalších služeb, příkladem budiž Digg.
Scribe
Scribe je flexibilní logovací systém, který Facebook interně využívá k celé řadě účelů. Byl sestaven pro rychlé zpracování logování na Facebooku, dále pak automaticky zpracovává nové logovací kategorie, které se zobrazují (samotný Facebook jich má stovky).
Hadoop a Hive
Hadoop je open-source implementace „map-reduce“, která umožňuje provádět rychlé výpočty nad obrovským množstvím dat. Facebook používá Hadoop pro analýzu dat (a jak všichni víme, zpracovává obrovské množství dat).
Druhá aplikace – Hive – pochází přímo z jádra Facebooku a umožňuje zasílat SQL dotazy na Hadoop; celý systém je tak snazší k pochopení pro programátory-laiky.
Obě dvě služby, Hadoop a Hive, jsou open-source (projekty Apache) a využívá je řada velkých služeb, například Yahoo a Twitter.
Thrift
Facebook používá několik různých programovacích jazyků pro různé služby. PHP je určen pro front-end, Erlang pro Facebook Chat, v několika případech se také používají Java a C++ (stejně tak další různé jazyky). Thrift je interně vyvinutý cross-language framework, který zajišťuje propojení pro všechny tyto jazyky dohromady, což jim umožňuje vzájemně mezi sebou komunikovat. Pro zjevnou jednoduchost Facebook v cross-language vývoji pokračuje.
Facebook prezentuje Thrift jako open-source projekt a nedávno k němu dokonce přidal podporu pro ještě více programovacích jazyků.
Varnish
Varnish je HTTP akcelerátor, který může fungovat jako load balancer a také kešovat obsah, který je následně bleskurychle doručen k uživateli.
Konkrétně Facebook používá Varnish k obsluze fotografií a profilových obrázků, každý den tak manipuluje s asi miliardou žádostí. Stejně jako téměř vše, co Facebook používá, je Varnish open-source.
Ostatní věci, které zajišťují Facebooku rychlý běh
Uvedli jsme některé softwarové komponenty, které tvoří Facebook samotný. Ale manipulace s tak velkým systémem je tak složitý úkol, že do seznamu přidáme několik věcí, které zajišťují Facebooku bezproblémový běh.
Postupné uvolňování verzí a „dark launches“
Facebook má systém, kterému se říká Gatekeeper. Ten umožňuje spouštět různé kódy pro různé skupiny uživatelů (to v podstatě uvozuje různé podmínky v samotném kódu). Umožňuje tím postupné uvolňování verzí nových funkcí, A/B testování, aktivaci některých funkcí pouze pro zaměstnance Facebooku apod.
Gatekeeper také umožňuje Facebooku provádět tzv. „dark launches“, které zajišťují aktivaci prvků určité funkce „v zákulisí“, tzn. ještě před tím, než aplikace vyjde naostro (vše samozřejmě aniž by si uživatel něčeho všiml, protože sám neuvidí žádné odpovídající prvky UI). Tato funkce je pak nápomocná při odhalování nedostatků i jiných problémových oblastí před termínem, kdy je aplikace oficiálně spuštěna. „Dark launches“ se obvykle provádí dva týdny před skutečným spuštěním aplikace.
Profilování live systému
Facebook pečlivě sleduje své systémy a zajímavé také je, že sleduje vykonání každé jednotlivé PHP funkce v live běhu. Toto profilování live PHP prostředí se provádí pomocí open-source nástroje s názvem XHProf.
Vypnutí některých funkcí z hlediska výkonu
Pokud se Facebook dostane do problémů spojených s výkonem, pak pro takové případy existuje velké množství „pák“, které umožňují postupné vypnutí méně důležitých komponent kvůli zvýšení výkonu funkcí jádra.
Věci, které nebyly zmíněny
Příliš jsme se nezaobírali stránkou hardwaru, ta je bezpochyby také důležitým aspektem. Například stejně jako mnoho dalších velkých webů využívá Facebook pro zajištění statického obsahu CDN. A nad to samozřejmě existuje obrovské datové centrum v Oregonu, shromažďující ještě více serverů.
Kromě toho, co jsme již zmínili, existuje tuna jiných technologií, které Facebook využívá. Nicméně zde bylo snahou prezentovat to nejdůležitější a nejviditelnější.
Milostný románek Facebooku s open-source
Tento článek nelze zakončit bez zmínky o tom, jak moc má Facebook rád open-source. Facebook totiž open-source přímo „miluje“.
Nejenže používá open-source software, jako je například Linux, Memcached, MySQL, Hadoop a mnoho dalších, ale také velká část z jeho interně vyvíjeného software je k dispozici jako open-source.
Příkladem open-source projektů, které pochází přímo z dílen Facebooku, může být HipHop, Cassandra, Thrift a další. Mimo to dal Facebook k dispozici open-source projekt s názvem Tornado, což je vysokorychlostní web-server framework, konkrétně vyvinutý týmem lidí zodpovědných za FriendFeed (který Facebook koupil v srpnu 2009).
(Seznam open-source software, který Facebook využívá, lze nalézt na této stránce.)
Několik výzev navíc
Facebook roste neuvěřitelným tempem. Jeho uživatelské základny se zvyšují téměř exponenciálně a již nyní existuje téměř půl miliardy aktivních uživatelů; kdo ví, kolik to bude do konce letošního roku. Na webu se podle všeho zaregistruje každých šest měsíců přibližně 100 milionů nových uživatelů. Facebook dokonce sestavil speciální „grow-up tým", který se neustále snaží přijít na to, jak přimět lidi pracovat s Facebookem ještě více.
Tento rychlý růst s sebou samozřejmě přináší fakt, že Facebook bude mít do budoucna různé výkonostní překážky; rostoucí zobrazování jednotlivých stránek, nová vyhledávání, nahrané obrázky, statusové zprávy a všechny ostatní způsoby, jak uživatelé komunikují s ostatními.
Pro službu jako Facebook je to prostě už dané. Facebookoví inženýři však neustále přicházejí s novými způsoby, jak požadovaný výkon udržet na uzdě (a není to jen o přidávání dalších serverů). Například systém pro ukládání fotografií byl již několikrát zcela přepracován.
Takže uvidíme, na co konkrétního inženýři ještě přijdou. Určitě to bude něco zajímavého. Koneckonců se snaží „zdolat horu“, o které se většině z nás může jen zdát – budují síť pro mnohonásobně více uživatelů z ještě více zemí. Když takovou věc děláte, je bezpochyby potřeba být dostatečně kreativní.
Další zajímavé odkazy: Prezentace inženýrů Facebooku, Blog Facebookového „inženýrství“.
Článek je překladem práce redaktorů informačního serveru Pingdom.