Ich habe mich lange gefragt, ob es Systeme gibt, die "hochskaliert" werden müssen (auf einen leistungsstärkeren, teureren Server), anstatt "herausskaliert" zu werden, indem sie auf viele kleinere Server aufgeteilt werden.
Gibt es solche Systeme, und wenn ja, gibt es etwas Besonderes, das dazu führt, dass Systeme eher vergrößert als verkleinert werden müssen? (Möglicherweise schaffen ACID-Datenbank-Transaktionen oder andere strenge Datenintegritätsanforderungen diesen Bedarf.)
Da eine Vergrößerung anscheinend viel höhere Hardwarekosten mit sich bringt als eine Verkleinerung, sollten Sie sie nach Möglichkeit vermeiden, aber ich bin mir nicht sicher, ob sie immer vermeidbar ist oder nicht.
Gibt es also Systeme, die nicht skaliert werden können und stattdessen skaliert werden müssen? Was kann dies verursachen und wie würden Sie ein solches System identifizieren? (Haben sie im Allgemeinen einige gemeinsame Merkmale, die sie leichter identifizierbar machen könnten?)
Antworten:
Ich arbeite hauptsächlich mit einer Anwendung, die kein horizontales Skalierungspotential hat . Obwohl es unter Linux läuft, zwingen mich die Anwendungs-, Datenstruktur- und E / A-Anforderungen, auf immer größere Systeme zu "skalieren", um den gestiegenen Arbeitslasten der Benutzer gerecht zu werden.
Viele ältere Branchen- und Transaktionsanwendungen unterliegen diesen Einschränkungen. Dies ist ein Grund, warum ich betone, dass der Branchenfokus auf Cloud-Lösungen und DevOps-gesteuerten Web-Scale-Architekturen einen guten Prozentsatz der Computerwelt ignoriert.
Leider sind die Scale-up-Systeme, die ich beschreibe, wirklich unsexy , so dass die Industrie dazu neigt, ihren Wert zu ignorieren oder die Fähigkeiten, die erforderlich sind, um große, kritische Systeme (z. B. Rinder gegen Haustiere ) zu adressieren, zu betonen .
quelle
Aus Entwicklersicht kann ich sagen, dass fast jede herkömmliche Mainstream-Datenbank-Engine nur skaliert werden kann und das Skalieren sehr viel nachdenklicher ist.
In den letzten Jahren wurden aufgrund des Bedarfs an größerer Skalierbarkeit und hochverfügbaren Systemen Anstrengungen unternommen, bestehende Datenbanken zu skalieren. Da die Entwürfe jedoch durch Legacy-Code behindert werden, sind sie eher an das Design gebunden als grundlegend. Dies tritt auf, wenn Sie versuchen, die meisten bekannten Datenbank-Engines zu skalieren. Das Hinzufügen von Slave-Servern kann sehr schwierig sein, und Sie werden feststellen, dass dies mit erheblichen Einschränkungen verbunden ist, von denen einige möglicherweise ein erneutes Jiggen Ihrer Datenbanktabellen erfordern.
Beispielsweise handelt es sich bei den meisten von ihnen eher um Master- / (Multi-) Slave-Designs als um Multi-Master-Designs. Mit anderen Worten, möglicherweise sitzt nur ein ganzer Server dort und kann keine Abfragen verarbeiten. Einige tun es, aber mit Einschränkungen ... zB Nur-Lese-Multi-Slave-Design. Sie haben also möglicherweise einen Server, der Schreibvorgänge durchführt, und alle anderen stellen schreibgeschützte Daten bereit. Sie werden feststellen, dass die Einrichtung dieser Systeme nicht immer einfach ist und es schwierig ist, eine gute Arbeit zu leisten. Es fühlt sich in vielen Fällen wie ein Blitz an.
Andererseits gibt es einige neuere Datenbank-Engines, die von Anfang an mit Parallelität und Multi-Master-Design entwickelt wurden. NOSQL und NewSQL sind die neuen Designklassen.
Es scheint also der beste Weg zu sein, eine bessere Leistung eines herkömmlichen SQL-Servers zu erzielen, wenn die Skalierbarkeit erhöht wird! Während es mit NOSQL & NewSQL sowohl Scale-up als auch Scale-out ist.
Der Grund, warum herkömmliche RDBMS-Systeme eng miteinander verbunden sind, liegt darin, dass sie alle eine konsistente Sicht auf dieselben Daten benötigen. Welchem Server vertrauen Sie, wenn mehrere Server Aktualisierungen derselben Daten von verschiedenen Clients akzeptieren? Jede Methode, die versucht sicherzustellen, dass die Daten durch eine Art Sperrmechanismus konsistent sind, erfordert die Zusammenarbeit von anderen Servern, die entweder die Leistung beeinträchtigen oder die Datenqualität beeinträchtigen, da alle von einem Client gelesenen Daten möglicherweise veraltet sind. Und die Server müssen selbst entscheiden, welche Daten am aktuellsten sind, wenn sie in denselben Datensatz schreiben. Wie Sie sehen, handelt es sich um ein komplexes Problem, das durch die Verteilung der Arbeitslast auf mehrere Server und nicht nur auf Prozesse oder Threads, bei denen der Zugriff auf die Daten immer noch recht schnell ist, noch komplexer wird.
quelle
Meiner Meinung nach wird die Skalierung / Verkleinerung davon bestimmt, wie parallel ein Workflow sein kann und wie eng die parallelen Threads aufeinander abgestimmt sein müssen.
Einzelthreading
Aus irgendeinem Grund kann dieser Workflow nur in einem Einzelthread ausgeführt werden.
Ein Gewindemittel ein System Mittel skaliert bis um es schneller gehen zu machen.
Eng gekoppelte Parallelität
Dies ist ein System mit mehreren Threads, bei dem die Threads eng miteinander gekoppelt werden müssen. Möglicherweise muss die Kommunikation zwischen den Prozessen sehr schnell sein oder alles muss über einen einzigen Speichermanager verwaltet werden. Die meisten RDBMS-Systeme arbeiten mit dieser Art von Parallel-Computing.
Zum größten Teil sind diese Systeme diejenigen , die Skala nach oben besser als aus , obwohl es Ausnahmen gibt. Beispielsweise können Workflows, die in einem Cluster im System-Image- Stil funktionieren, einen einzelnen Speicherplatz, aber eine hohe Latenz zwischen Threads, das Skalieren erleichtern. Die Zusammenarbeit mit solchen SSI-Systemen ist jedoch sehr schwierig, sodass die meisten Ingenieure nur eine größere Box bauen.
Locker gekoppelte Parallelität
Dies ist ein Multithread- / Prozesssystem, bei dem die Threads mit hohen Latenzen in Ordnung sind. Oder müssen überhaupt nicht miteinander reden. Skalierte Web-Serving- und Renderfarmen sind klassische Beispiele für diese Art von System. Systeme wie diese sind viel einfacher zu vergrößern als eng gekoppelte Parallelität, weshalb diese Art von System sehr aufregend ist.
Dies ist der Stil , in dem Maßstab aus viel einfacher ist.
quelle