Software za Facebookem
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Software za FacebookemSoftware za Facebookem

 

Software za Facebookem

Google       Google       12. 7. 2010       26 375×

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.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor je moderátorem sekce C++ na Fóru. Věnuje se programování v C++/C#, okrajově PHP, zajímá se o SW/HW novinky a o hudbu na internetu.

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý