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?
Odpowiedzi:
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:
źródło
Z kontradmirała Grace Hoppera:
źródło
źródło
Stephen wyjaśnia, na co należy zwrócić uwagę przy wyborze architektury systemu: kompromis w skalowaniu pionowym i poziomym. Dodam kilka innych uwag:
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:
Źródło: Adam Banks, w ComputerWorldUK
źródło
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.
źródło
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.
źródło
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.
źródło