it-swarm.com.de

Unterschied zwischen horizontaler und vertikaler Skalierung für Datenbanken

Ich bin auf viele NoSQL-Datenbanken und SQL-Datenbanken gestoßen. Es gibt verschiedene Parameter, um die Stärken und Schwächen dieser Datenbanken zu messen, und die Skalierbarkeit ist eine davon. Was ist der Unterschied zwischen horizontaler und vertikaler Skalierung dieser Datenbanken?

610
London guy

Horizontale Skalierung bedeutet, dass Sie skalieren, indem Sie Ihrem Ressourcenpool weitere Maschinen hinzufügen, während Vertikale Skalierung bedeutet, dass Sie skalieren Hinzufügen von mehr Leistung (CPU, RAM) zu einem vorhandenen Computer .

Eine einfache Möglichkeit, sich daran zu erinnern, besteht darin, sich eine Maschine in einem Server-Rack vorzustellen. Wir fügen weitere Maschinen quer zur horizontalen Richtung hinzu und fügen einer Maschine weitere Ressourcen hinzu in der vertikalen Richtung.

Horizontal Scaling/Vertical Scaling Visualisation

In einer Datenbankwelt basiert die horizontale Skalierung häufig auf der Partitionierung der Daten, dh, jeder Knoten enthält nur einen Teil der Daten. Bei der vertikalen Skalierung befinden sich die Daten auf einem einzelnen Knoten, und die Skalierung erfolgt über mehrere Kerne, dh die Last wird zwischen diesen verteilt die CPU- und RAM Ressourcen dieses Rechners.

Bei der horizontalen Skalierung ist es häufig einfacher, eine dynamische Skalierung durchzuführen, indem dem vorhandenen Pool mehrere Maschinen hinzugefügt werden. Die vertikale Skalierung ist häufig auf die Kapazität einer einzelnen Maschine beschränkt. Eine Skalierung über diese Kapazität hinaus ist häufig mit Ausfallzeiten verbunden und mit einer Obergrenze verbunden.

Gute Beispiele für horizontale Skalierung sind Cassandra, MongoDB, Google Cloud Spanner .. und ein gutes Beispiel für vertikale Skalierung ist MySQL - Amazon RDS (Die Cloud-Version von MySQL). Es bietet eine einfache Möglichkeit zur vertikalen Skalierung, indem von kleinen zu größeren Maschinen gewechselt wird. Dieser Prozess ist häufig mit Ausfallzeiten verbunden.

In-Memory-Datengitter wie GigaSpaces XAP , Kohärenz usw. werden häufig sowohl für die horizontale als auch für die vertikale Skalierung optimiert, da sie nicht an die Festplatte gebunden sind. Horizontale Skalierung durch Partitionierung und vertikale Skalierung durch Multi-Core-Unterstützung.

Sie können mehr zu diesem Thema in meinen früheren Beiträgen lesen: Scale-out vs Scale-up und Die gemeinsamen Prinzipien hinter den NOSQL-Alternativen

1102
Nati Shalom

In einfachen Worten:

Horizontale Skalierung ===> Tausende von Dienern erledigen die Arbeit gemeinsam für Sie.

Vertikal skalieren ===> Ein großer Hulk erledigt die ganze Arbeit für Sie.

129
147.3k

Beginnen wir mit der Notwendigkeit einer Skalierung, die die Ressourcen erhöht, damit Ihr System jetzt mehr Anforderungen verarbeiten kann als früher.

Wenn Sie feststellen, dass Ihr System langsam wird und die aktuelle Anzahl von Anforderungen nicht verarbeiten kann, müssen Sie das System skalieren.

Dies bietet Ihnen zwei Möglichkeiten. Entweder erhöhen Sie die Ressourcen auf dem Server, den Sie aktuell verwenden, d. H. Erhöhen die Menge an RAM, CPU, GPU und anderen Ressourcen. Dies wird als vertikale Skalierung bezeichnet.

Vertikale Skalierung ist normalerweise teuer. Dies macht das System nicht fehlertolerant, d. H. Wenn Sie eine Anwendung skalieren, die mit einem einzelnen Server ausgeführt wird, und dieser Server ausfällt, fällt Ihr System aus. Auch die Anzahl der Threads bleibt bei der vertikalen Skalierung gleich. Bei der vertikalen Skalierung muss Ihr System möglicherweise für einen Moment heruntergefahren werden, wenn der Prozess stattfindet. Das Erhöhen der Ressourcen auf einem Server erfordert einen Neustart und das Herunterfahren Ihres Systems.

Eine andere Lösung für dieses Problem besteht darin, die Anzahl der im System vorhandenen Server zu erhöhen. Diese Lösung wird in der Technologiebranche häufig eingesetzt. Dies verringert möglicherweise die Rate der Anforderungen pro Sekunde auf jedem Server. Wenn Sie das System skalieren müssen, fügen Sie einfach einen weiteren Server hinzu, und fertig. Sie müssten das System nicht neu starten. Die Anzahl der Threads in jedem System nimmt ab, was zu einem hohen Durchsatz führt. Um die Anforderungen für jeden Anwendungsserver gleichermaßen zu trennen, müssen Sie einen Load Balancer hinzufügen, der als Reverse-Proxy für die Webserver fungiert. Dieses gesamte System kann als einzelner Cluster bezeichnet werden. Ihr System enthält möglicherweise eine große Anzahl von Anforderungen, die mehr Cluster wie diese erfordern würden.

Ich hoffe, Sie erhalten das gesamte Konzept der Einführung der Skalierung in das System.

15
yathartha

Es gibt eine zusätzliche Architektur, die nicht erwähnt wurde - SQL-basierte Datenbankdienste, die eine horizontale Skalierung ohne die Komplexität manueller Shards ermöglichen. Diese Dienste werden im Hintergrund ausgeführt, sodass Sie eine herkömmliche SQL-Datenbank ausführen und skalieren können, wie Sie es mit NoSQL-Engines wie MongoDB oder CouchDB tun würden. Zwei mir vertraute Dienste sind EnterpriseDB für PostgreSQL und Xeround für MySQL. Ich habe ein ausführliches post von Xeround gesehen, das erklärt, warum das Skalieren in SQL-Datenbanken schwierig ist und wie sie es anders machen. Lesen Sie auch Wikipedia's Cloud Database entry , es gibt eine nette Erklärung von SQL vs. NoSQL und Service vs. Self-Hosted, eine Liste von Anbietern und Skalierungsoptionen für jede Kombination. ;)

9
Dina Kaiser

Ja. Horizontales Skalieren bedeutet, dass weitere Computer hinzugefügt werden. Dies bedeutet jedoch auch, dass die Computer im Cluster gleich sind. MySQL kann mithilfe von Replikaten horizontal skaliert werden, um Daten zu lesen. Sobald jedoch die Speicherkapazität des Servers erreicht ist, müssen Sie damit beginnen, Daten zwischen Servern zu verschieben. Dies wird zunehmend komplexer. Oft ist es ein Problem, die Daten über Replikate hinweg konsistent zu halten, da die Replikationsraten oft zu langsam sind, um mit den Datenänderungsraten Schritt zu halten.

Couchbase ist auch eine fantastische horizontale NoSQL-Skalierungsdatenbank, die in vielen kommerziellen Hochverfügbarkeitsanwendungen und Spielen verwendet wird und wahrscheinlich die beste Leistung in dieser Kategorie erbringt. Es partitioniert Daten automatisch über Cluster, das Hinzufügen von Knoten ist einfach, und Sie können Standardhardware und billigere VM-Instanzen verwenden (z. B. Large anstelle von High Mem, High Disk-Maschinen bei AWS). Es basiert auf der Membase (Memcached), fügt jedoch Persistenz hinzu. Im Falle von Couchbase kann jeder Knoten nur mit Failover-Replikation lesen und schreiben und ist im Cluster gleich (nicht mit vollständiger Dataset-Replikation auf allen Servern wie in mySQL).

In Bezug auf die Leistung sehen Sie einen ausgezeichneten Cisco-Benchmark: http://blog.couchbase.com/understanding-performance-benchmark-published-Cisco-and-solarflare-using-couchbase-server

Hier ist ein großartiger Blogbeitrag über Couchbase Architecture: http://horicky.blogspot.com/2012/07/couchbase-architecture.html

8
scalabl3

Traditionelle relationale Datenbanken wurden als Client/Server-Datenbanksysteme konzipiert. Sie können horizontal skaliert werden, aber der Prozess dazu ist in der Regel komplex und fehleranfällig. NewSQL-Datenbanken wie NuoDB sind speicherorientierte verteilte Datenbanksysteme, die horizontal skaliert werden können und gleichzeitig die SQL/ACID-Eigenschaften herkömmlicher RDBMS beibehalten.

Weitere Informationen zu NuoDB finden Sie in deren technisches Whitepaper .

6

SQL-Datenbanken wie Oracle und DB2 unterstützen auch die horizontale Skalierung über Shared Disk Cluster. Zum Beispiel Oracle RAC, IBM DB2 Purescale oder Sybase ASE Cluster Edition. Dem Oracle RAC-System oder dem DB2-Purescale-System kann ein neuer Knoten hinzugefügt werden, um eine horizontale Skalierung zu erreichen.

Der Ansatz, der sich von noSQL-Datenbanken (wie Mongodb, CouchDB oder IBM Cloudant) unterscheidet, besteht darin, dass das Daten-Sharding nicht Teil der horizontalen Skalierung ist. In noSQL-Datenbanken werden Daten während der horizontalen Skalierung gelöscht.

5
Debasish

Alle anderen Antworten scheinen bereits vollständig zu sein, aber ich habe Google Cloud Spanner nicht als Beispiel für eine relationale Datenbank mit horizontaler Skalierung gesehen. Deshalb füge ich meinen kleinen Beitrag hinzu.

2
Erickson Filipe

Das Hinzufügen zahlreicher Load Balancer verursacht zusätzlichen Overhead und zusätzliche Latenz. Dies ist der Nachteil beim horizontalen Skalieren in NOSQL-Datenbanken. Es ist wie die Frage, warum Leute sagen, dass RPC nicht empfohlen wird, da es nicht robust ist.

In einem realen System sollten wir SQL- und NOSQL-Datenbanken verwenden, um die Multicore- und Cloud-Computing-Funktionen der heutigen Systeme zu nutzen.

Auf der anderen Seite weisen komplexe Transaktionsabfragen eine hohe Leistung auf, wenn SQL-Datenbanken wie Oracle verwendet werden. NoSql kann für BigData und horizontale Skalierbarkeit durch Sharding verwendet werden.

0
farshad-nsh