Tour de force

WooExpert Platinum WooCommerce partner - biggest elephant in the eCommerce room.
Mailchimp Partner Mailchimp partner - you know what’s the newest cutting edge customer experience solution? Great email subject!
Clutch logo Clutch - clients say we’re top dogs in eCommerce. Throw us that stick now.
WordPress Vip WordPress VIP - Enterprise hosting partner

Facebook voli svoje servere i tehnologiju [CLOUD REVIEW]

Pokušavamo vam približiti tehnologiju facebooka te opisati na koji način je posložena ova masivna infrastruktura koja opslužuje 600 milijuna korisnika…bez prekida!

Koliko je prošlo sekundi od trenutka Vašeg klika pa do učitavanja ove stranice? Već ste nakon par sekundi bili malo nervozni, a pogotovo jer na drugom tabu imate otvoren fejs s chatom, spreadsheet od Google appsa te najnovije vijesti s Vašeg omiljenog hipster-portala. Očekujete od tih svih tabova i stranica da uvijek rade, trenutno prikazuju sadržaj te nikad ne zastajkuju.

Ovi navedeni “zahtjevi” se kod facebooka uzimaju zdravo za gotovo-pogotovo ako uzmemo u obzir da najveća socijalna mreža opslužuje širok demografski raspon tj. nije čudno da Vam mama pošalje zahtjev za prijateljstvo, a takvu publiku ne zanima zašto im chat zastajkuje ili se za učitavanje inboxa troši više od par sekundi. Ok, geek u Vama će odmah skočiti te izjaviti da je dužnost svakog poslovanja i platforme “omogućavanje nesmetanog korištenja vlastitog proizvoda ili usluge” no radi li se ovdje zaista o tipičnoj usluzi? Prisjetimo se…

– facebook opslužuje već više od 600 milijuna korisnika (pomnožimo 150 sa “Hrvatska”)
– ti korisnici generiraju oko 600 milijardi pageviewsa mjesečno (1000 pageviews / user / month)
– svaki mjesec se uploada 3 milijarde fotografija
– facebook sustav isporučuje 1.2 milijuna fotografija svake sekunde
– preko platforme se pošalje više od 25 milijardi poruka (status, poruka, komentara…)
– neki analitičari kažu da facebook ima već više od 50.000 servera

Dakle, “not-your-average-Joe” ako pričamo o web aplikacijama i razina tehnologije koju većina od nas vjerojatno neće sresti na svom IT-karijernom putu. No to nas neće spriječiti da dublje zavirimo pod haubu ovog tehnološkog čuda. U članku ćemo opisati neke od slojeva i modula facebook arhitekture…

Osnovni aplikativni sloj

Osnovna tehnologija koja se koristi je LAMP (Linux-Apache-MySQL-PHP) no uz veliki broj preinaka i custom razvijenih plug-inova. Recimo, prilagođeni PHP komapajler je napisan direktno od strane facebooka kako bi se izvšavao “nativno” na fb serverima. Linux distribucija je prilagođena za veći mrežni protok, a MySQL instance služe uglavnom za konzistentno spremanje “key-value” parova transferirajući JOIN-ove te veze prema web serverima pošto je tamo lakše raditi optimalizaciju (hint: Memcached…)

MemCached

Memcached je jedna od poznatijih tehnologija kod velikih web sjedišta, a služi kao memorijski sloj između web servera i MySQL baze podataka pošto je pristup istoj relativno spor. Facebookov Memcache se vrti na tisućama servera te isporučuje desetine terabyte-a podataka svakodnevno čineći ovo jednu od največih memorijskih instalacija na svijetu.

BigPipe

BigPipe je interesantan modul koji služi za dinamičko te parcijalno isporučivanje web stranica, a čini to kroz tzv. “Pagelets”. Recimo chat prozor je jedan “pagelet”, stream vijesti je drugi itd. Svaki od njih se kompajlira te isporučuje odvojeno.

Varnish

Varnish je HTTP akcelerator koji služi kao vrsta load-balancera. Facebook ga koristi kod posluživanja profilnih slika te dnevno obrađuje više milijardi upita.

Thrift

Facebook koristi više vrsta jezika za različite servise. PHP se koristi za prezentacijski dio, Erlang se koristi za chat, Java i C++ za druge servise…Thrift povezuje sve te programske jezike kroz svoj framework te omogućuje razvojnom timu upotrebu raznih jezika pri raznovrsnim potrebama.

HipHop for PHP

PHP je relativno spor zbog svoje “skriptne” prirode, a pogotovo ako ga se uspoređuje sa nativnim jezikom web servera. HipHopstoga konvertira PHP kod u C++ koji se potom kompajlira pružajući bolje performanse. Tim stručnjaka (3) je radio na HipHopu 18 mjeseci unutar facebooka prije nego što je modul izašao u Live produkciju.

HayStack

Haystack je facebookov sustav za pohranu/dohvaćanje objekata, no najviše ga koriste za fotografije, njih 80 milijardi! 🙂

Cassandra

Cassandra je distribuirani sustav za pohranu bez točke prekida rada. Također, Cassandra je pokazni projekt NoSQL pokreta, a odnedavno je članica Apache skupine projekata. Facebook koristi Cassandru kod pretraživanja poruka tj. inboxa.

Scribe

Scribe je fleksibilan te skalabilan logging sustav prilagođen za rad na facebooku te automatski dodaje nove logging kategorije kojih facebook ima već više od stotinu.

Hadoop & Hive

Hadoop je Map-Reduce implementacija koja omogućuje velik broj kalkulacija i obrađivanja golih podataka. Ukoliko ste primjetili da Vam se na streamu vijesti pojavljuju samo bliski prijatelji, to je vjerojatno zato jer je tu kalkulaciju na temelju vaših klikova napravio Hadoop. Hive se koristi pri dohvačanju obrađenih podataka i to u SQL stilu. I Hadoop i Hive su open-source (Apache) projekti te ih koriste ostale velike stranice poput Twittera ili Yahoo-a.

Serveri & Datacentri (Hardware)

Facebook je odnedavno stavio svo svoje znanje oko slaganja servera te podatkovnih centara na javno raspolaganje. Projekt je dobio naziv Open Compute project, a pridružili su mu se i drugi “hardware provideri”… Dell, HP, Rackspace, AMD, Intel, Quanta. Više o samom projektu možete pogledati na priloženom videu.

Upravljanje

Facebook ima sustav kojeg zovu “GateKeeper”, a on im omogućuje da puštaju određene promjene određenim korisnicima, rade “A/B testiranja”, testiraju promjene samo preko zaposlenika. “Crna lansiranja” se rade na način da se određene preinake puštaju u rad bez promjene na korisničkom sučelju. Samim time se mogu rano otkriti razni software bugovi te greške na razini aplikacije ili baze podataka. Crna lansiranja se rade dva tjedna prije službenog lansiranja novog fb “fičra”.

Monitoring facebooka se odvija na razini svake PHP funkcije. Alat koji to omogućava se zove XHProf. Ukoliko se detektira velika latencija ili greška, dio facebooka se može ugasiti ili degradirati kako bi korisnici mogli pristupiti osnovnim funkcionalnostima. Upravo ovo je pokazatelj koliko je facebook tehnološki napredan te koliko zapravo brine o User-eXperience-u.

Nadamo se da Vam je članak bio informativan, a ukoliko mislite da smo išta izostavili slobodno nam pišite ili komentirajte. Izvor ovih podataka je uglavnom developerski blog facebook inženjera. 

Krešimir Končić
Krešimir Končić Owner at Neuralab

Ex QBASIC developer that ventured into a web world in 2007. Leading a team of like-minded Open Source aficionados that love design, code and a pinch of BBQ. Currently writing a book that explains why ‘coding is the easier part’ of our field.


Subscribe to our quarterly newsletter

Please fill in this field.
Please thick this field to proceed.

Related blog posts