Architektura Facebooka [zamknięte]

169

Szukałem artykułów / informacji o architekturze na Facebooku, wyzwaniach i sposobach ich rozwiązywania. Czego używają i dlaczego używają. Jak się skalują i jakie są decyzje projektowe dotyczące tego, co robią itp. Podstawą jest nauka. Wiedza o witrynach, które obsługują tak ogromny ruch, daje architektom itp. Wiele wskazówek, aby pamiętać o pewnych rzeczach podczas projektowania nowych witryn. Dzielę się tym, co znalazłem.

  1. Wykres naukowy i społeczny na Facebooku (wideo)
  2. Skaluj na Facebooku
  3. Architektura czatu na Facebooku
  4. Blog na Facebooku
  5. Facebook Cassandra Architecture and Design
  6. Uwagi techniczne na Facebooku
  7. Quora - Architektura Facebooka
  8. Facebook dla 600 milionów użytkowników
  9. Hadoop i jego użycie na Facebooku
  10. Erlang na Facebooku: Architektura czatu
  11. Buforowanie wydajności Facebooka
  12. Architektura Facebook Connect

Mam jeszcze 2 linki, ale nie mogę opublikować z powodu ograniczeń na tej stronie. Udostępnij również, jeśli ktoś ma coś lepszego (nie musi być związany tylko z Facebookiem).

PS - Nie udało mi się znaleźć dobrych miejsc do podzielenia się tymi badaniami, stąd ta inicjatywa. Mam nadzieję, że to komuś pomoże.

Srikar Appalaraju
źródło
2
2. Skalowanie na Facebooku (wideo) - infoq.com/presentations/Scale-at-Facebook 3. Czat na Facebooku - infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju
2
Również highscalability.com wydaje się być świetnym miejscem do poznawania architektur wielu popularnych witryn. Nie mam pojęcia, ile z tego jest prawdą, a ile spekulacji, ale jest tam i po prostu coś do
przekąszenia
1
Blog inżynieria facebook czasami ma znaczący wgląd w ich architekturę i skalowanie wyzwań.
Colin Pickard
Ponieważ z technicznego punktu widzenia nie jest to prawdziwe pytanie, zachęcamy do przeniesienia informacji na wiki tagów FB, aby zachować informacje na wypadek usunięcia tego pytania. Dzięki.
Gordon,
@Gordon jak dodać tag FB Wiki? Czy nie ma już tagu „Facebook”? To nie wystarczy?
Srikar Appalaraju

Odpowiedzi:

33

Cóż, Facebook przeszedł WIELE wielu zmian i pierwotnie nie był zaprojektowany jako wydajny. Został zaprojektowany, aby wykonywać swoją pracę. Nie mam absolutnie pojęcia, jak wygląda kod i prawdopodobnie nie znajdziesz na jego temat wielu informacji (z oczywistych względów bezpieczeństwa i praw autorskich), ale spójrz tylko na API. Spójrz, jak często się to zmienia i ile z tego nie działa już prawidłowo lub w ogóle.

Myślę, że największym asem w rękawie jest Hiphop. http://developers.facebook.com/blog/post/358 Możesz samodzielnie korzystać z HipHop: https://github.com/facebook/hiphop-php/wiki

Ale jeśli o mnie chodzi, jest to bardzo ambitne i prawdopodobnie marnujące czas zadanie. Hiphop obsługuje tylko tyle, że nie może po prostu przekonwertować wszystkiego na C ++. Więc co to nam mówi? Cóż, mówi nam, że Facebook NIE w pełni wykorzystuje język PHP. Nie używa najnowszej wersji 5.3 i jestem gotów się założyć, że wciąż jest wiele elementów kompatybilnych z PHP 4. W przeciwnym razie nie mogliby używać HipHop. HipHop TO DOBRY POMYSŁ i musi się rozwijać i rozszerzać, ale w obecnym stanie nie jest zbyt przydatny dla wielu osób, które tworzą NOWE aplikacje PHP.

Istnieje również PHP do JAVA poprzez rzeczy takie jak Resin / Quercus. Ponownie, nie obsługuje wszystkiego ...

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że jeśli używasz niestandardowego modułu PHP, nie będziesz w stanie przekonwertować tego kodu na C ++ lub Javę. Jednak ... Przyjrzyjmy się modułom PHP. Są skompilowane w C ++. Więc jeśli możesz zbudować moduły PHP, które robią różne rzeczy (takie jak parsowanie XML itp.), To w zasadzie (bez niektórych interakcji) pracujesz z tą samą prędkością. Oczywiście nie możesz po prostu stworzyć modułu PHP dla każdej możliwej potrzeby i całej aplikacji, ponieważ musiałbyś ponownie skompilować, a kodowanie byłoby znacznie trudniejsze itp.

Jednak ... Istnieje kilka przydatnych modułów PHP, które mogą pomóc w przypadku problemów z szybkością. Chociaż pod koniec dnia mamy tę niesamowitą rzecz zwaną „chmurą” i dzięki niej możemy skalować nasze aplikacje (w tym PHP), więc nie ma to już większego znaczenia. Sprzęt staje się coraz tańszy. Mówiąc o tym, Amazon właśnie obniżył swoje ceny.

Tak długo, jak kodujesz swoją aplikację PHP wokół idei, że będzie ona wymagała jednodniowej skali ... Wtedy myślę, że wszystko w porządku i nie jestem pewien, czy nawet spojrzałbym na Facebooka i co zrobili, ponieważ kiedy zrobili to, to był zupełnie inny świat, a teraz próbują utrzymać tę infrastrukturę i ją utrzymać ... Cóż, dostajesz rzeczy takie jak HipHop.

Jak HipHop może ci pomóc? Nie będzie. Nie może. Zaczynasz od nowa, możesz użyć PHP 5.3. Gorąco polecam przyjrzenie się frameworkom PHP 5.3 i wszystkim nowym korzyściom, które PHP 5.3 wnosi do tabeli wraz z bibliotekami SPL, a także zastanowienie się nad bazą danych. Najprawdopodobniej udostępniasz zawartość z bazy danych, więc sprawdź MongoDB i inne typy baz danych, które nie zawierają schematów i są zorientowane na dokumenty. Są znacznie szybsze i lepsze w przypadku większości „popularnych” witryn / aplikacji.

Spójrz na NOWE firmy, takie jak Foursquare i Smugmug oraz kilka innych firm, które wykorzystują NOWĄ technologię i JAK jej używają. Ponieważ Facebook odnosi sukcesy, szczerze nie patrzę na nich pod kątem „jak” zbudować wydajną witrynę / aplikację. Nie mówię, że nie mają tam bardzo (bardzo) utalentowanych ludzi, którzy tam pracują i twórczo rozwiązują (ich) problemy ... Nie mówię też, że Facebook nie jest ogólnie dobrym pomysłem i że nie jest sukces i że nie powinieneś czerpać z niego pomysłów ... Mówię tylko, że gdybyś mógł zobaczyć cały ich kod źródłowy, prawdopodobnie nie skorzystałbyś na tym.

Tomek
źródło
1
zgodził się z większością tego, co powiedziałeś. Te linki są tylko dla ciekawości. Czasami patrzysz na jakąś technologię i mówisz „hej! To super” ...
Srikar Appalaraju
Losowo wracając do mojej odpowiedzi tutaj dwie rzeczy. # 1, uważam, że C, a nie C ++, mój błąd techniczny ... Ale co ważniejsze, # 2, Phalcon jest nowszym frameworkiem PHP, który w celu zwiększenia szybkości konwertuje wiele na rozszerzenie PHP. Chociaż większość twojego własnego kodu nie będzie oczywiście działać w C, a żadna inna biblioteka, której używasz, prawdopodobnie też nie będzie. Jednak jest to sprytny pomysł, podobny do HipHop, aby wycisnąć trochę dodatkowej wydajności.
Tom
... i znowu zaczynamy z tym asem w rękawie. Patrząc wstecz po latach, mamy ten język Hack (zrodzony z rzeczy HipHop z własnym IDE). Czy stało się czymś lepszym? Zobaczymy. Czy to może ci pomóc? Może, ale teraz wygląda na to, że Ty też będziesz mógł budować tak, jak Facebook. Zajęło mi to tylko około 4 lat =) Chociaż osobiście nie byłbym tak szybki, aby wypić pomoc kool.
Tom
1
Patrząc teraz na odpowiedź, jestem zdumiony, jak sprawy potoczą się w świecie technologii. HipHop nie tylko wspierał najnowsze wersje PHP, Facebook również opracował HHVM, który jest jeszcze szybszy.
Gopi Krishna
Tak, czasami dostaję powiadomienia, które wracają do tego. To naprawdę niesamowite widzieć, jak wiele się zmieniło i jak HipHop ewoluował w HHVM (i prawdopodobnie jak Facebook zmienia się pod okładkami - spójrz na wszystkie niesamowite postępy w JS, które robią). To ma dla mnie sens. Jeśli masz szalenie dobrze prosperującą firmę, która ma mnóstwo pieniędzy i pracowników ... Dlaczego nie zainwestować w badania i rozwój w pewnym momencie, prawda?
Tom
18

Facebook używa struktury LAMP . Usługi zaplecza Facebooka są napisane w wielu różnych językach programowania, w tym C ++, Java, Python i Erlang, i są używane zgodnie z wymaganiami. Z LAMP Facebook wykorzystuje pewne technologie do obsługi dużej liczby żądań, np

  1. Memcache - Jest to system buforowania pamięci, który służy do przyspieszania dynamicznych witryn internetowych opartych na bazie danych (takich jak Facebook) poprzez buforowanie danych i obiektów w pamięci RAM w celu skrócenia czasu odczytu. Memcache to podstawowa forma buforowania Facebooka, która pomaga zmniejszyć obciążenie bazy danych. Posiadanie systemu buforowania pozwala Facebookowi przywoływać Twoje dane tak szybko, jak to jest.

  2. Thrift (protokół) - jest to lekka platforma zdalnego wywoływania procedur służąca do tworzenia skalowalnych usług w różnych językach. Thrift obsługuje C ++, PHP, Python, Perl, Java, Ruby, Erlang i inne.

  3. Cassandra (baza danych) - Jest to system zarządzania bazą danych zaprojektowany do obsługi dużych ilości danych rozrzuconych na wielu serwerach.

  4. HipHop for PHP - jest to transformator kodu źródłowego kodu skryptu PHP i został stworzony w celu oszczędzania zasobów serwera. HipHop przekształca kod źródłowy PHP w zoptymalizowany C ++. Po wykonaniu tej czynności używa g ++ do skompilowania go do kodu maszynowego.

Jeśli zajmiemy się bardziej szczegółowo, odpowiedź na to pytanie będzie dłuższa. Więcej możemy dowiedzieć się z następujących postów:

  1. Jak działa Facebook?
  2. Zarządzanie danymi w stylu Facebooka
  3. Projekt bazy danych na Facebooku?
  4. Struktura bazy danych Facebooka
  5. Struktura danych „like” Facebooka
Somnath Muluk
źródło
7

„Wiedza o witrynach obsługujących tak ogromny ruch daje architektom itp. Wiele wskazówek, aby pamiętać o pewnych kwestiach podczas projektowania nowych witryn”

Myślę, że prawdopodobnie możesz się wiele nauczyć z projektowania Facebooka, tak samo jak z projektowania każdego odnoszącego sukcesy dużego systemu oprogramowania. Wydaje mi się jednak, że projektując nowe systemy nie należy mieć na uwadze obecnego projektu Facebooka.

Dlaczego chcesz móc obsłużyć ruch, który musi obsłużyć Facebook? Szanse są takie, że nigdy nie będziesz musiał, bez względu na to, jak utalentowany jesteś programistą. Sam Facebook nie był od początku zaprojektowany z myślą o tak ogromnej skalowalności, co jest chyba najważniejszą lekcją, jaką można wyciągnąć z niego.

Jeśli chcesz się dowiedzieć o nietrywialnym systemie oprogramowania, polecam książkę „Dissecting a C # Application” o rozwoju SharpDevelop IDE. Nakład został wyczerpany, ale jest dostępny bezpłatnie online . Książka daje wgląd w prawdziwą aplikację i dostarcza wglądu w IDE, które są przydatne dla programisty.

Jørgen Fogh
źródło
1
tak, prawdopodobnie niewielu ludzi musi sobie radzić z tak dużym ruchem. ale zawsze dobrze jest zrozumieć skalowalność i to, jak świetna firma, taka jak Facebook, radzi sobie z tak dużym ruchem. Może być kilka dobrych zalet projektowych, których można się nauczyć :)
biliony
@nanshi: Zgadzam się, że warto się od nich uczyć. Chodzi mi o to, że powinieneś pamiętać, do czego projektujesz. Projektowanie pod kątem skalowalności od pierwszego dnia utrudnia zmianę tego, co robi program. W większości sytuacji prostota jest ważniejsza. Ponadto Facebook jest utrzymywany przez wiele osób. Każda z tych osób musi być tylko ekspertem w zakresie części systemu.
Jørgen Fogh
rozumiem co masz na myśli. zgadzam się :)
biliony