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.
- Wykres naukowy i społeczny na Facebooku (wideo)
- Skaluj na Facebooku
- Architektura czatu na Facebooku
- Blog na Facebooku
- Facebook Cassandra Architecture and Design
- Uwagi techniczne na Facebooku
- Quora - Architektura Facebooka
- Facebook dla 600 milionów użytkowników
- Hadoop i jego użycie na Facebooku
- Erlang na Facebooku: Architektura czatu
- Buforowanie wydajności Facebooka
- 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.
facebook
design-patterns
architecture
Srikar Appalaraju
źródło
źródło
Odpowiedzi:
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.
źródło
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
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.
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.
Cassandra (baza danych) - Jest to system zarządzania bazą danych zaprojektowany do obsługi dużych ilości danych rozrzuconych na wielu serwerach.
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:
źródło
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.
źródło