Welche Arten von Systemen müssen "skaliert" werden, anstatt "skaliert" zu werden?


12

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?)



7
Das Hochskalieren ist oft viel einfacher, wenn Ihre Software nicht für das Hochskalieren konzipiert wurde. Das Neuentwerfen von Software ist entweder teuer oder unmöglich, wenn Sie nicht Eigentümer der Quelle sind oder Einfluss auf die Entwickler haben.
Zoredache

Das Schreiben solcher Systeme ist ein sehr schwieriges Problem. Insbesondere Master / Master-Designs, die kommen und gehen können, wenn mehrere Master gleichzeitig auf dieselben Datensätze schreiben. Wer schreibt gewinnt?
Matt

3
Sie könnten interessiert sein CAP - Theorem . Grundsätzlich besteht ein Dienst, der sowohl Konsistenz als auch Verfügbarkeit gemäß Definition im Theorem erfordert, nicht darin, Partitionierung zu tolerieren. Die meisten Anforderungen der realen Welt können eine gewisse Konsistenz für eine spätere Konsistenz opfern (manuell oder automatisch nachträglich mit Inkonsistenzen umgehen) oder die Verfügbarkeit beeinträchtigen, indem die Verarbeitung einer Anfrage verweigert wird, wenn einige der Teilnehmer nicht verfügbar sind. Daher müssen Systeme, die sowohl absolute Konsistenz als auch absolute Verfügbarkeit erfordern, im Wesentlichen skaliert werden.
Lie Ryan

1
Wenn Sie mit "zuverlässigem LAN" "niemals einen Fehler haben" meinen, dann sind Sie nicht für die reale Welt konzipiert.
MFINNI

Antworten:


18

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 .


1
"Am einfachsten ist es, das Problem mit Hardware zu lösen." Bitte, Moores Gesetz, hören Sie nicht auf zu arbeiten!
CJC

2
@Demetri - Microsoft SQL Server ist das "bekannteste" Produkt, von dem ich denke, dass es eher ein typisches "Scale-up" als ein "Scale-out" ist. Das Skalieren ist so gut wie unmöglich, es sei denn, Sie erfüllen ganz bestimmte Kriterien für die Mergereplikation.
Mark Henderson

3
Oder wenn Sie die Lösung in mehrere Probleme zerlegen können. Führen Sie beispielsweise keine Berichterstellung für Ihre Transaktionsdatenbank durch. Hit eine Replik, die auf anderer Hardware ausgeführt wird. \
Mfinni

1
-1. Ich denke, Sie haben den Kern des Problems verfehlt. Ihr Problem muss nicht unbedingt verkleinert werden, wenn Sie das System für ein verkleinertes System umschreiben können. Diese Frage zu Systemen, deren Problemdomäne so ist, dass ein Scale-Out auch bei einer Neukonzeption überhaupt nicht möglich ist.
Lie Ryan

1
@LieRyan Verständnis. Ich behaupte, dass die von mir unterstützte Anwendung nicht verkleinert werden kann (es ist ein datenbankähnliches System) ... auch wenn sie aufgrund architektonischer Einschränkungen neu gestaltet wurde.
Ewwhite

8

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.


Hatte Oracle RAC nicht schon seit 10g Scale-Out angeboten?
Dani_l

Es hat. Aber ein RAC und ein fehlerfrei funktionierender RAC sind zwei verschiedene Dinge - dies erfordert wirklich besondere Sorgfalt, um am Laufen zu bleiben. Es ist ein schönes Design. Wenn Sie es brauchen, sind Sie wahrscheinlich bereit, den Preis zu zahlen.
TomTom

Beachten Sie auch das gemeinsam genutzte Speichersystem, das für Oracle RAC benötigt wird. Dies könnte je nach Implementierung ein Skalierungsproblem darstellen.
Matt

7

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.


Der Grund, warum RDBMS eng miteinander verbunden sind, liegt darin, dass sie eng mit den Daten verbunden sind. dh mehrere Server, die auf dieselbe Ressource zugreifen.
Matt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.