Warum verwenden große Sites mehrere Server anstelle eines Servers mit besseren Spezifikationen?

42

Ich habe gelesen, dass Stack Overflow 10 oder mehr Server verwendet, um die Stack Overflow-Site zu bedienen. Verschiedene Server haben unterschiedliche Funktionen, z. B. Reverse Proxy, Datenbankserver oder HTTP-Server.

Ich habe einen leistungsstarken Standalone-Einzelserver mit folgenden Spezifikationen gesehen:

  • 2 x Xeon E5-2630v2 bei 2,60 GHz, insgesamt 12 Kerne, 24 Threads; 30 MB
  • 64 GB ECC-Reg. bis zu 768 GB DDR3 bei 1600 MHz
  • 4 x 120 GB Intel 520/530 Series (80.000 zufällige IOPS, ~ 550 MB / s)
  • HP iLo4 Advanced mit dediziertem Ethernet-Management-Port.

Verwenden Sie einen einzelnen Server mit höheren Spezifikationen wie 768 GB RAM, 20 TB + Festplatte, 4+ x Xeon. Was sind die Vorteile der Verwendung vieler Server oder die Nachteile der Verwendung eines einzelnen hochspezifizierten Servers?

AMB
quelle
4
SE verfügt nicht nur über mehr als 10 Server, sondern verfügt auch über ein doppeltes Setup in einem anderen Datencenter für das Failover. Und der Server wurde noch nicht erfunden, der den gesamten Verkehr von Facebook oder Google verarbeiten könnte.
Michael Hampton
8
Was passiert, wenn Sie diesen Super-Server neu starten müssen?
Liath
Redundanz ... :)
William Edwards
1
Parallelität ...
Leichtigkeit Rennen mit Monica
1
@SSpoke: Sie sind nicht auf eine Verbindung pro Port beschränkt. Wichtig ist nur, dass die Kombination aus (Quelladresse, Quellport, Zieladresse, Zielport) eindeutig ist.
David

Antworten:

58

Ein einzelner leistungsstarker Server kann nur bis jetzt aktualisiert werden. Sobald der leistungsstärkste Server verfügbar ist, kann Ihre Site nicht größer werden, ohne ihn auf mehrere Server aufzuteilen oder effizienter zu gestalten.

Es gibt auch den Kostenfaktor. Ein einziger Server, der überaus leistungsstark ist, kann zehnmal so viel kosten wie zwei Server, die halb so leistungsstark sind. Sie möchten in der Lage sein, Ihre Hardware zum günstigsten Preis zu kaufen und nicht an einen höheren Preis gebunden zu sein, da dies das einzige ist, was funktioniert.

Verfügbarkeit und Zuverlässigkeit spielen ebenfalls eine Rolle. Bei zwei oder mehr Servern kann einer ausfallen oder zur Wartung offline geschaltet werden, und die Site kann in Betrieb bleiben. Sie können das nicht mit einem einzelnen Server tun.

Die meisten großen Websites verwenden Load Balancer und mehrere Server. Ich habe für TripAdvisor gearbeitet. Sie veröffentlichten einen großartigen Artikel über die TripAdvisor-Architektur und wie sie sie mit mehreren Servern hoch skalierbar machen.

Es ist möglich , einen erweiterten Dienst auf einem einzelnen Server auszuführen. Ein mir bekanntes Beispiel ist Mailinator. Der Autor hat einen Artikel über die Architektur von Mailinator veröffentlicht . Er konzentriert sich darauf, seinen Code effizienter zu gestalten, anstatt neue Server zu kaufen. Dies ist letztendlich eine Einschränkung, die die Funktionsweise seines Dienstes bestimmt. E-Mails werden nur wenige Stunden aufbewahrt, bevor sie vom einzelnen Computer gelöscht werden, um Platz für weitere zu schaffen.

Das Aktualisieren eines einzelnen Servers wird als vertikale Skalierung bezeichnet . Das Hinzufügen weiterer Server wird als horizontales Skalieren bezeichnet . Weitere Informationen zu diesem Thema finden Sie in den folgenden Artikeln, in denen die beiden Elemente verglichen werden:

Stephen Ostermiller
quelle
9
Wenn Sie mehrere Server haben (mehr als ein paar) und einige CPUs ausfallen, haben Sie die anderen Server, um alles am Laufen zu halten. Wenn Sie einen Server haben und die Pausen erledigt sind, sind Sie erledigt.
Martijn
2
Ein weiterer Punkt, den die Leute vergessen, ist, dass es nicht unbedingt gut ist, einen Server mit maximaler Kapazität oder in der Nähe davon zu betreiben. Wir haben unsere Server bei einer globalen Telekommunikation (die namenlos bleiben soll) in der Regel auf etwa die Hälfte der Kapazität ausgelastet (keine wirkliche Logik dahinter - nur Metriken beobachten). Es treten Probleme mit der Rechenwarteschlange, den E / A-Subsystemen, der Speicheradressierung und dem Speicheraustausch usw. auf, und zwar unabhängig von der Hardwarekapazität, da das Gleichgewicht zwischen den Subsystemen natürlich je nach Betriebssystem zu Konflikten führen kann. Es gibt einige robuste Systeme, die mehr ermöglichen.
Closetnoc
@closetnoc Ich denke, der beste Weg, es zu beschreiben, ist, dass Sie versuchen, Engpässe zu vermeiden. Ein richtig ausbalanciertes System könnte theoretisch zu 100% ausgelastet sein und keine negativen Nebenwirkungen haben. Alles, worauf das System warten muss (CPU-Zeit, E / A, Busübertragung usw.), führt jedoch zu Leistungsproblemen. Wenn Sie Ihre Systeme mit der halben maximalen Kapazität betreiben, haben Sie eine gute Stelle gefunden, an der Sie nicht auf solche Engpässe stoßen.
Thebluefish
@Thebluefish Ja und nein. Ich bin ein alter Systeminternalist. Die meisten Systeme haben Engpässe im Betriebssystem und in der internen Hardware, die durch schnellere Überfälle, Speicher, CPU usw. nicht ausgeglichen werden können. Außerdem gibt es Einschränkungen im Betriebssystem. Windows war ziemlich gut, weil es auf VMS basierte, aber dennoch Grenzen hatte, die nicht wie VMS angepasst werden konnten. Linux ist offensichtlich besser. Einige Server sind mit kleinen Hardwareeinschränkungen ausgestattet, wie z. B. HP, die wir verwendet haben. Aber selbst dann ist es keine gute Idee, eine Rechenwarteschlange mit einer Kapazität von 100% auszuführen, da die Anzahl der Interrupts und CPU-Auslagerungen zunimmt.
Closetnoc
2
Ein weiterer Vorteil der horizontalen Skalierung: Es gibt nur so viel Strom, Bandbreite, Kühlung usw., dass Sie auf einen einzelnen Server zugreifen können. Netflix könnte eine Box mit unendlicher Rechenleistung und unendlichem Speicher haben, aber ohne eine ausreichend dicke Leitung, um den Datenverkehr abzuleiten, würde das nichts nützen.
Chris Hayes
32

Vom Konteradmiral Grace Hopper:

Über den Bau größerer Computer: "In Pioniertagen verwendeten sie Ochsen zum Ziehen, und wenn ein Ochse keinen Stamm rühren konnte, versuchten sie nicht, einen größeren Ochsen zu züchten. Wir sollten uns nicht um größere Computer bemühen, aber für mehr Computersysteme. "

Quelle

も も も も
quelle
1
In meiner frühen Karriere habe ich Grace Hopper ein paar Mal getroffen und einige Zeit mit ihr verbracht. Sie war wirklich etwas! Eine coole Katze! Wir alle haben sie geliebt. Sie war so nett und großzügig mit ihrer Zeit und Anmut (Wortspiel beabsichtigt). Ein dickes Lob für ihr Zitat! Eine Gegenstimme für den Rückweg. Vielen Dank!
Closetnoc
5
Dies ist zwar ein relevantes Zitat, es beantwortet jedoch nicht die Frage. Die unbegründete Meinung einer Person sollte hier nicht wertvoll sein.
TankorSmash
7
@NoahSpurrier Weil es eigentlich keinen Teil der Frage beantwortet? Es ist nur ein Zitat, das eine unbegründete Analogie darstellt und nicht erklärt, warum wir nach mehr Servern suchen sollten.
Chris Hayes
2
Ich würde sagen, dass es eine nützliche Antwort ist, aber nicht als DIE Antwort akzeptiert werden sollte, da es die spezifischen Gründe nicht ausführlich beschreibt. Es wird jedoch deutlich der Grund für die Überbiegung des Lastteilungsprinzips angegeben.
Ian T. Small
1
@ Bobson Ich behaupte überhaupt nicht, dass sie eine wichtige Spielerin ist, ich sage nur, dass ich eine Antwort mit etwas Inhalt sehen möchte, anstelle von ein oder zwei Sätzen, die einfach nur nett klingen.
TankorSmash
10

Stephen erklärt die wichtigsten Überlegungen, die bei der Entscheidung für eine Systemarchitektur zu treffen sind: die Kompromisse bei der vertikalen und horizontalen Skalierung. Ich werde ein paar andere Überlegungen hinzufügen:

  • Trennung von Bedenken: Sie erwähnen mehrere radikal unterschiedliche Systeme: Reverse-Proxies, DB, Content-Server usw. Aus Wartungs- und Sicherheitssicht ist es eindeutig vorteilhaft, diese Verantwortlichkeiten auf verschiedene Systeme zu verteilen, damit sie ein anderes Betriebssystem (Version) ausführen können. Kann bei Bedarf separat aktualisiert werden und hat keine Auswirkungen auf andere Dienste, wenn diese gefährdet sind.
  • Content Delivery: Dies ist das ultimative Ziel eines Webservers und eignet sich gut für ein verbreitetes Modell. Systeme können geografisch dupliziert und verteilt werden, um die Latenz von Fernverbindungen zu minimieren. Es ermöglicht auch Redundanz . Große Websites verwenden Load Balancer (noch eine Reihe von Servern!), Um ein automatisches Failover zu ermöglichen, damit der Dienst jederzeit verfügbar bleibt .

Tatsächlich gibt es eine ganze Serverklasse, die die vertikale Skalierung auf eine andere Ebene bringt: Mainframes. Sie haben eine Vielzahl von Vorteilen (Geschwindigkeit, Zuverlässigkeit) und Nachteilen (Kosten), werden jedoch im Allgemeinen verwendet, wenn enorme Datenmengen über die Eingabe-Ausgabe-Verarbeitung in der sogenannten Transaktionsverarbeitung verarbeitet werden müssen (z. B. Kreditkartenkäufe, Bankgeschäfte) , Wahl- und Volkszählungsdaten). Banken bedienen beispielsweise Websites von vertikal skalierten Webservern, während das Back-End Transaktionen über den Mainframe verarbeitet.

Interessanterweise haben sich Unternehmen wie Paypal und Visa vom Mainframe zu geclusterten Systemen mit Tausenden von horizontal skalierten Systemen entwickelt. In der sich schnell entwickelnden digitalen Welt treffen sogar Großrechner auf die horizontale Skalierungsgrenze:

„Bei all den Verfügbarkeits- und Leistungsanforderungen konnten wir Zahlungen nicht auf Großrechnern verarbeiten.

Quelle: Adam Banks, in ComputerWorldUK

Lilienthal
quelle
8
  • Größenbeschränkung. Wir möchten vorgeben, dass eine einzelne Box mit mehreren Prozessoren, Speicherchips und Festplatten einheitlich ist. Dies ist nicht ganz richtig, aber es ist richtig genug, wenn Ihre Zahlen nicht zu groß werden. Es gibt technische Grenzen für Wärme, Energie, Nähe usw., was bedeutet, dass die Größe eines einzelnen Servers praktisch immer begrenzt ist.

  • Skalierbarkeit - Es gibt einen großen Unterschied zwischen einem einzelnen Serversystem, das Shared Memory für IPC verwendet, und einem Multiserversystem, das Netzwerke oder Cluster verwendet. Der Unterschied zwischen zwei Servern und 200 ist jedoch erheblich geringer. Wenn Sie ein skalierbares System erstellt haben, können Sie es VIEL größer skalieren, bevor ein Problem auftritt. Wenn dies der Fall ist, ist eigentlich kein großer einzelner Server erforderlich an erster Stelle.

  • Ausfallsicherheit - Ein Server ist ein Ort, den ein Administrator möglicherweise "oops". Oder es gibt ein physikalisches Problem, das bedeutet, dass der Service für das gesamte Blech unterbrochen wird. (Im Datenzentrum ist Wasser ausgetreten, jemand kracht gegen ein Gestell und stürzt es um, so etwas). Mehrere Server können innerhalb eines Rechenzentrums oder besser geografisch verteilt sein. Wenn Sie Ihre App bereits vertreiben, ist die Skalierung auf "mittelgroßen" Computern fast immer billiger als die gleiche Menge an CPU / Arbeitsspeicher / E / A auf einer kleineren Anzahl größerer Computer.

  • Updates - Wenn ich einen Server patche, kann dies einen Dienst instabil machen, einen Neustart erfordern oder auf andere Weise Ausfallzeiten verursachen. Wenn ich 4 Server habe, auf denen dasselbe ausgeführt wird, kann ich einen für eine Weile außer Betrieb setzen, um dies zu tun. Und lassen Sie es außer Betrieb, wenn der Patch- / Update-Zyklus schief geht.

Sobrique
quelle
7

Nehmen wir das Problem im kleinen Maßstab. Ein winziges Büro mit einem Server, auf dem Mail, ActiveDirectory, Dateifreigabe und die Website des Unternehmens ausgeführt werden.

Hacker treffen es und Sie müssen neu starten, weil IIS durcheinander ist. Oder Exchange benötigt ein Update und einen Neustart. Oder Active Directory wurde beschädigt.

Jedes dieser isolierten "One Service Is Down" -Probleme wirkt sich auf den gesamten Server aus. Jede Freigabe auf diesem Server wirkt sich auf den gesamten Server aus, da ein Neustart oder etwas anderes erforderlich ist.

Sobald ein echter IT-Mann auftaucht und diesen Server sieht, wird er empfehlen, ihn in separate Server aufzuteilen (und einen Backup-Domänencontrollerserver zu haben).

Es ist das alte Sprichwort von "nicht alle Eier in einen Korb legen"

Nun wird diese Philosophie auf Webserver angewendet. Wenn ich nur einen einzigen Webserver habe und meine Web-App (die neue MyFaceLink.com) veröffentliche und diese sehr beliebt wird, treten neue Probleme auf. Ich kann die Site nicht ausschalten, um Wartungsarbeiten durchzuführen, während Benutzer auf der Site sind. Und wenn es abstürzt oder ich zu viele User bekomme, bin ich abgespritzt. Selbst der weltweit größte einzelne Server wird von 1 Milliarde FB-Konvertern überfordert sein.

Aus dem gleichen Grund kommt der Lastenausgleich ins Spiel. Verteilen Sie die Site auf 3 Server, und wenn einer ausfällt, übernehmen die restlichen 2 die Kapazität. Wenn ich Patches machen muss, mache ich nur einen nach dem anderen und niemand merkt es.

Im einfachsten Fall geht es nicht um den Preis des Megaservers oder darum, ob er die Last wirklich bewältigen kann (obwohl dies möglich ist). Es geht um Single Point of Failure. Sobald das Geschäft ausgelastet ist und 5 Benutzer rund um die Uhr und nicht mehr 8-5 arbeiten, sind Ausfallzeiten nicht mehr akzeptabel. Geplante Ausfälle sind schwerer einzuplanen. Sie verteilen also die Last.

Ken Forslund
quelle
+1 für die Benennung des Single Point of Failure- Problems.
David Cary
1

Wenn versucht wird, dass eine Maschine die Arbeit von zwei macht, müssen einige Teile der Maschine größer sein, aber mit der gleichen Geschwindigkeit laufen, einige können die gleiche Größe behalten, müssen aber schneller laufen, und einige müssen größer sein und schneller. Inwieweit es sinnvoll ist, die Rollen kleinerer Maschinen in eine größere zu kombinieren oder die Rollen größerer Maschinen in kleinere zu unterteilen, hängt zu einem großen Teil davon ab, welche Art von Skalierung für die teuersten Maschinenteile gelten würde. Wenn die Arbeitslasten zu vieler Maschinen zu einem riesigen Koloss zusammengefasst werden, werden die Kosten von Dingen dominiert, die größer und größer werden müsstenSchnellerer Umgang mit erhöhten Arbeitslasten. Selbst wenn die Kosten solcher Dinge in Bezug auf Geschwindigkeit und Größe linear wären, würde eine Verdoppelung der Arbeitslast die Kosten einer Maschine für deren Verarbeitung mehr als verdoppeln. Die Tatsache, dass die Geschwindigkeit über einen bestimmten Punkt hinaus ansteigt, führt zu einer (viel) höheren als der linearen Kostensteigerung und verstärkt den Effekt.

Es gibt keinen festen Punkt, an dem die Praktikabilität die Unterteilung der Arbeit erzwingt. Abhängig von der Art der auszuführenden Arbeit kommt eine Maschine, die zwei Arbeitslasten kombiniert, möglicherweise mit weniger als dem Doppelten des Arbeitsspeichers aus oder läuft mit weniger als der doppelten Geschwindigkeit. Auf der anderen Seite, je mehr Aufgaben eine Maschine zu erledigen hat, desto stärker skalieren Speicher- und Geschwindigkeitsanforderungen linear mit der Arbeitslast. Je weiter man darüber hinausgeht, desto höher sind die relativen Kosten für jede Verdoppelung der Arbeitslast.

Superkatze
quelle