Dlaczego duże witryny używają wielu serwerów zamiast jednego z lepszymi specyfikacjami?

42

Czytam, że Stack Overflow używa 10 lub więcej serwerów do obsługi witryny Stack Overflow. Różne serwery mają różne funkcje, takie jak odwrotny serwer proxy, serwer bazy danych lub serwer HTTP.

Widziałem potężny samodzielny pojedynczy serwer z następującymi specyfikacjami:

  • 2 x Xeon E5-2630v2 @ 2,60 GHz, łącznie 12 rdzeni, 24 wątki; 30 MB
  • 64 GB ECC Reg. do 768 GB DDR3 przy 1600 MHz
  • 4 x 120 GB Intel 520/530 Series (80k losowych IOPS, ~ 550 MB / s)
  • HP iLo4 Advanced z dedykowanym portem zarządzania Ethernet.

Dlaczego nie skorzystać z jednego serwera o wyższych specyfikacjach, takich jak 768 GB RAM, 20 TB + HDD, 4+ x Xeon? Jakie są zalety korzystania z wielu serwerów lub wady korzystania z jednego serwera o wysokiej specyfikacji?

AMB
źródło
4
SE nie tylko ma ponad 10 serwerów, ale ma zduplikowaną konfigurację w innym centrum danych do przełączania awaryjnego. A serwer nie został jeszcze wynaleziony, który mógłby obsłużyć cały ruch na Facebooku lub Google.
Michael Hampton
8
Co się stanie, gdy będziesz musiał zrestartować ten super serwer?
Liath,
Redundancja ... :)
William Edwards
1
Równoległość ...
Lekkość ściga się z Moniką
1
@SSpoke: nie jesteś ograniczony do jednego połączenia na port. Liczy się tylko to, że kombinacja (adres src, port src, adres dst, port dst) jest unikalna.
David

Odpowiedzi:

58

Pojedynczy potężny serwer może być uaktualniony tylko do tej pory. Gdy masz już najpotężniejszy dostępny serwer, Twoja witryna nie może się bardziej rozwijać bez podziału na serwery lub zwiększenia wydajności.

Istnieje również czynnik kosztów. Pojedynczy serwer o dużej mocy może kosztować dziesięć razy więcej niż dwa serwery, które są o połowę słabsze. Chcesz móc kupować swój sprzęt w najtańszej cenie i nie być zablokowanym w wyższej cenie, ponieważ to jedyna rzecz, która będzie działać.

W grę wchodzą również czas pracy i niezawodność. Przy dwóch lub więcej serwerach jeden może ulec awarii lub zostać odłączony od sieci w celu konserwacji, a witryna może pozostać bezczynna. Nie możesz tego zrobić na jednym serwerze.

Większość dużych witryn korzysta z usług równoważenia obciążenia i wielu serwerów. Pracowałem dla TripAdvisor. Opublikowali świetny artykuł na temat architektury TripAdvisor i tego, jak sprawiają, że jest wysoce skalowalna na wielu serwerach.

Jest to możliwe , aby uruchomić zaawansowaną usługę na jednym serwerze. Jednym ze znanych mi przykładów jest Mailinator. Autor opublikował artykuł o architekturze Mailinator . Koncentruje się na zwiększeniu wydajności kodu zamiast kupowaniu nowych serwerów. To kończy się ograniczeniem, które decyduje o tym, jak działa jego usługa. Przechowuje pocztę tylko kilka godzin przed usunięciem jej przez pojedyncze urządzenie, aby zrobić miejsce na więcej.

Aktualizacja pojedynczego serwera jest nazywana skalowaniem w pionie . Dodanie większej liczby serwerów jest znane jako skalowanie w poziomie . Aby uzyskać więcej informacji na ten temat, oto kilka artykułów, które porównują dwa:

Stephen Ostermiller
źródło
9
Jeśli masz wiele serwerów (więcej niż kilka), a niektóre procesory umierają, masz inne serwery, aby wszystko działało. Jeśli masz 1 serwer, który zepsuje się, jesteś skończony.
Martijn,
2
Inną kwestią, o której ludzie zapominają, jest niekoniecznie dobrze, aby uruchomić serwer z maksymalną pojemnością lub w jego pobliżu. Zasadniczo oceniliśmy nasze serwery w globalnej sieci telekomunikacyjnej (która pozostanie bezimienna) przy około połowie pojemności maksymalnej z reguły (bez logiki za nią - tylko obserwowanie wskaźników). Zaczynasz mieć problemy z kolejką obliczeniową, podsystemami IO, adresowaniem i zamianą pamięci itd. W pewnym momencie, niezależnie od pojemności sprzętu, po prostu dlatego, że równowaga między podsystemami może oczywiście powodować konflikty w zależności od systemu operacyjnego. Istnieje kilka niezawodnych systemów, które pozwalają na więcej.
closetnoc
@closetnoc Myślę, że najlepszym sposobem na opisanie tego jest to, że starasz się unikać wąskich gardeł. Właściwie zrównoważony system może teoretycznie działać przy 100% wydajności bez żadnych niepożądanych skutków ubocznych, ale wszystko, na co system musi czekać (czas procesora, operacje we / wy, transfer magistrali itp.) Spowoduje problemy z wydajnością. Uruchamiając swoje systemy z połową maksymalnej wydajności, znalazłeś dobre miejsce, w którym nie napotkasz takich wąskich gardeł.
Thebluefish,
@Thebluefish Tak i nie. Jestem starym facetem od systemów wewnętrznych. Większość systemów ma wąskie gardła w systemie operacyjnym i wewnętrzny sprzęt, którego nie można nadrobić szybszymi nalotami, pamięcią, procesorami itp. Ponadto istnieją ograniczenia w systemie operacyjnym. Windows był całkiem dobry, ponieważ był oparty na VMS, ale nadal miał ograniczenia, których nie można było dostroić jak VMS. Linux jest oczywiście lepszy. Niektóre serwery zostały zaprojektowane z niewielkimi ograniczeniami sprzętowymi, takimi jak HP, z którego korzystaliśmy. Ale nawet wtedy nigdy nie jest dobrym pomysłem uruchamianie kolejki obliczeniowej o pojemności 100% ze względu na wzrost przerwań i zamian CPU.
closetnoc
2
Kolejną zaletą skalowania w poziomie: jest tylko tyle prądu, przepustowości, chłodzenia itp., Że można skierować je na pojedynczy serwer. Netflix może mieć pudełko z nieskończoną mocą obliczeniową i pamięcią, ale nie przyniosłoby im to nic dobrego bez wystarczająco grubej rurki, aby wyeliminować ruch.
Chris Hayes
32

Z kontradmirała Grace Hoppera:

O budowie większych komputerów: „W czasach pionierskich używano wołów do ciężkiego ciągnięcia, a kiedy jeden wół nie mógł ruszyć kłody, nie próbowali wyhodować większego wołu. Nie powinniśmy próbować większych komputerów, ale dla większej liczby systemów komputerowych ”.

źródło

も し も し
źródło
1
Spotkałem Grace Hopper kilka razy w mojej wczesnej karierze i spędziłem z nią trochę czasu. Ona była naprawdę czymś! Jeden fajny kot! Wszyscy ją kochaliśmy. Była tak życzliwa i hojna ze swoim czasem i łaskami (zamierzona gra słów). Uznanie za zacytowanie jej! Jeden głos w górę za wycofaniem się. Dzięki!
closetnoc
5
Chociaż jest to odpowiedni cytat, to nie odpowiada na pytanie. Nieuzasadniona opinia jednej osoby nie powinna być tutaj cenna.
TankorSmash,
7
@NoahSpurrier Ponieważ w rzeczywistości nie odpowiada na żadną część pytania? To tylko jeden cytat, który stanowi bezpodstawną analogię i nie wyjaśnia, dlaczego powinniśmy strzelać do większej liczby serwerów.
Chris Hayes
2
Powiedziałbym, że jest to użyteczna odpowiedź, ale nie należy jej uważać za odpowiedź, ponieważ nie zawiera ona szczegółowych powodów. Podaje jednak wyraźnie nadrzędny powód zasady podziału obciążenia.
Ian T. Small
1
@ Bobson Wcale nie twierdzę, że jest ważnym graczem, mówię tylko, że chciałbym zobaczyć odpowiedź z pewną zawartością zamiast zdania lub dwóch, które po prostu brzmią ładnie.
TankorSmash
10

Stephen wyjaśnia, na co należy zwrócić uwagę przy wyborze architektury systemu: kompromis w skalowaniu pionowym i poziomym. Dodam kilka innych uwag:

  • Oddzielne obawy: wspominasz o wielu radykalnie różnych systemach: odwrotnych serwerach proxy, DB, serwerach treści itp. Z punktu widzenia konserwacji i bezpieczeństwa jest wyraźnie korzystne, aby te obowiązki były rozłożone na różne systemy, aby mogły one działać w innym systemie operacyjnym (wersja) w razie potrzeby można je osobno aktualizować i nie wpływać na inne usługi w przypadku naruszenia bezpieczeństwa.
  • Dostarczanie treści: jest to ostateczny cel serwera WWW i dobrze nadaje się do modelu rozproszonego. Systemy można powielać i rozkładać geograficznie, aby zminimalizować opóźnienie połączeń na duże odległości. Pozwala również na redundancję . Duże witryny wykorzystują usługi równoważenia obciążenia (kolejny zestaw serwerów!), Aby umożliwić automatyczne przełączanie awaryjne w celu utrzymania usługi przez cały czas.

W rzeczywistości istnieje cała klasa serwerów, która przenosi skalowanie pionowe na inny poziom: komputery mainframe. Mają różne zalety (szybkość, niezawodność) i wady (koszt), ale ogólnie są one zwykle używane, gdy ogromne ilości danych muszą być przetwarzane za pomocą przetwarzania danych wejściowych i wyjściowych w tak zwanym przetwarzaniu transakcji (myślimy o zakupie kart kredytowych, bankowości , dane dotyczące wyborów i spisu ludności). Banki na przykład obsługują witryny z pionowo skalowanych serwerów internetowych, podczas gdy zaplecze kończy przetwarzanie transakcji za pośrednictwem komputera mainframe.

Co ciekawe, firmy takie jak Paypal i Visa odchodzą od systemów mainframe w kierunku systemów klastrowych tysięcy systemów o skali poziomej. W szybko ewoluującym świecie cyfrowym nawet komputery mainframe uderzają w poziomy sufit skalowania:

„Przy wszystkich wymaganiach dotyczących dostępności i wydajności nie mogliśmy kontynuować przetwarzania płatności na komputerach mainframe,

Źródło: Adam Banks, w ComputerWorldUK

Lilienthal
źródło
8
  • Limit rozmiaru Lubimy udawać, że jedno pudełko z wieloma procesorami, układami pamięci i dyskami jest jednolite. To nie do końca prawda, ale wystarcza, jeśli twoje liczby nie stają się zbyt duże. Istnieją techniczne ograniczenia ciepła, energii, bliskości itp., Co oznacza, że ​​zawsze będzie praktyczny limit wielkości pojedynczego serwera.

  • Skalowalność - istnieje ogromna różnica między systemem z jednym serwerem, korzystającym z pamięci współużytkowanej dla IPC a systemem z wieloma serwerami, który korzysta z sieci lub klastrowania. Jednak różnica między dwoma serwerami a 200 jest znacznie mniejsza - jeśli zbudowałeś system, który skaluje się, możesz skalować go DUŻO, zanim pojawi się problem ... a jeśli tak, to tak naprawdę nie ma potrzeby posiadania ogromnego pojedynczego serwera na pierwszym miejscu.

  • Odporność - jeden serwer to miejsce, które jeden administrator może „ups”. Lub istnieje problem fizyczny, który oznacza, że ​​obsługa całego kawałka cyny jest przerywana. (Wyciek wody z centrum danych, ktoś uderza w stojak i przewraca go, tego typu rzeczy). Wiele serwerów może być rozproszonych w centrum danych lub lepiej, jeszcze rozproszonych geograficznie. A jeśli już dystrybuujesz swoją aplikację, skalowanie na „średnich” maszynach jest prawie zawsze tańsze niż ta sama ilość procesora / pamięci / IO na mniejszej liczbie większych maszyn.

  • Aktualizacje - jeśli załatam serwer, może to spowodować niestabilność usługi, wymagać ponownego uruchomienia lub w inny sposób wymagać przestoju. Jeśli mam 4 serwery z tą samą rzeczą, mogę na chwilę wyłączyć jeden z nich, aby to zrobić. I wyłącz go z użytku, jeśli cykl łatania / aktualizacji pójdzie źle.

Sobrique
źródło
7

Weźmy problem na małą skalę. Małe biuro z jednym serwerem, na którym działa poczta, ActiveDirectory, udział plików i strona internetowa firmy.

Hakerzy go uderzyli i musisz zrestartować komputer, ponieważ IIS jest popsuty. Lub Exchange wymaga aktualizacji i ponownego uruchomienia. Lub usługa Active Directory uległa uszkodzeniu.

Każdy z tych izolowanych problemów „jedna usługa nie działa” wpływa na cały serwer, więc każde udostępnianie na tym serwerze wpłynie na nie z powodu konieczności ponownego uruchomienia komputera lub czegokolwiek innego.

Gdy pojawi się prawdziwy informatyk i zobaczy ten serwer, zaleci podzielenie ich na osobne serwery (i posiadanie zapasowego serwera kontrolera domeny).

Jest to stare powiedzenie: „nie wkładaj wszystkich jajek do jednego koszyka”

Teraz ta filozofia jest stosowana do serwerów sieciowych. Jeśli mam tylko jeden serwer WWW i publikuję swoją aplikację internetową (nowa MyFaceLink.com) i staje się ona bardzo popularna, mam nowe problemy. Nie mogę zdjąć strony z serwisu w celu konserwacji, gdy użytkownicy są na niej. A jeśli się zawiesi lub otrzymam zbyt wielu użytkowników, jestem chory. Nawet największy na świecie pojedynczy serwer zostanie przytłoczony nadchodzącym 1 miliardem konwersji FB.

Dlatego w grę wchodzi równoważenie obciążenia z tego samego powodu „jaja w koszyku”. Rozłóż witrynę na 3 serwerach, a jeśli jeden ulegnie awarii, pozostałe 2 zajmą pojemność. Jeśli muszę robić łatki, robię je pojedynczo i nikt tego nie zauważa.

Mówiąc najprościej, nie chodzi o cenę mega-serwera ani o to, czy może on naprawdę poradzić sobie z obciążeniem (choć może być). Chodzi o pojedynczy punkt awarii. Gdy firma jest wystarczająco zajęta i dzieje się 24x7 zamiast 5 użytkowników pracujących w wieku 8-5 lat, przestoje są niedopuszczalne. Zaplanowane przerwy są trudniejsze do zaplanowania. Więc rozkładasz obciążenie.

Ken Forslund
źródło
+1 za nazwanie problemu pojedynczego punktu awarii .
David Cary,
1

Jeśli ktoś chce, aby jedna maszyna wykonywała pracę dwóch, niektóre części maszyny będą musiały być większe, ale będą działać z tą samą prędkością, niektóre mogą pozostać tego samego rozmiaru, ale będą musiały działać szybciej, a niektóre będą musiały być większe i szybciej. Zakres, w jakim sensowne jest łączenie ról mniejszych maszyn w większe lub dzielenie ról większych maszyn na mniejsze, zależy w dużej mierze od tego, jakiego rodzaju skalowanie dotyczyłoby najdroższych części maszyn. Jeśli obciążenia zbyt wielu maszyn zostaną połączone w jeden ogromny kolos, wówczas koszty będą zdominowane przez rzeczy, które musiałyby się zwiększyć iszybciej radzi sobie ze zwiększonymi obciążeniami. Nawet gdyby koszty takich rzeczy były liniowe w stosunku do prędkości i wielkości, podwojenie obciążenia pracy zwiększyłoby ponad dwukrotnie koszt maszyny do jej przetworzenia. Fakt, że prędkość wzrasta powyżej pewnego punktu powoduje (znacznie) większy niż liniowy wzrost kosztów, zwiększa efekt.

Tak naprawdę nie ma ustalonego punktu, w którym praktyczność wymusza podział pracy; w zależności od rodzaju pracy, jaką należy wykonać, maszyna łącząca obciążenia dwóch osób może uzyskać mniej niż dwa razy więcej pamięci lub działać z prędkością mniejszą niż dwukrotnie. Z drugiej strony, im więcej zadań jest do wykonania, tym większy jest zakres, w jakim wymagania dotyczące pamięci i prędkości zaczynają skalować się liniowo wraz z obciążeniem. Im dalej idzie się dalej, tym większy wzrost względnego kosztu każdego podwojenia obciążenia.

supercat
źródło