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?
Antworten:
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:
quelle
Vom Konteradmiral Grace Hopper:
Quelle
quelle
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:
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:
Quelle: Adam Banks, in ComputerWorldUK
quelle
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.
quelle
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.
quelle
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.
quelle