Unterschied zwischen horizontaler und vertikaler Skalierung für Datenbanken [geschlossen]

698

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 einer davon. Was ist der Unterschied zwischen der horizontalen und vertikalen Skalierung dieser Datenbanken?

Londoner Typ
quelle
2
en.wikipedia.org/wiki/Scalability - der Begriff gilt für alle Software / Systeme
Tomasz Nurkiewicz
5
Pay spaecial Aufmerksamkeit auf die Datenbank Abschnitt en.wikipedia.org/wiki/Scalability#Database_scalability
user454322
2
stackoverflow.com/questions/5401992/…
Ciro Santilli 法轮功 病毒 审查 审查 事件 法轮功

Antworten:

1259

Horizontale Skalierung bedeutet, dass Sie skalieren, indem Sie Ihrem Ressourcenpool mehr Computer hinzufügen, während vertikale Skalierung bedeutet, dass Sie skalieren, indem Sie einem vorhandenen Computer mehr Leistung (CPU, RAM) hinzufügen .

Eine einfache Möglichkeit, sich daran zu erinnern, besteht darin, sich eine Maschine auf einem Server-Rack vorzustellen. Wir fügen mehr Maschinen in horizontaler Richtung hinzu und fügen einer Maschine in vertikaler Richtung mehr Ressourcen hinzu .

                  Horizontale Skalierung / Vertikale Skalierung Visualisierung

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 Verteilung der Last zwischen den Daten die CPU- und RAM-Ressourcen dieser Maschine.

Bei der horizontalen Skalierung ist es häufig einfacher, dynamisch zu skalieren, indem mehr Maschinen zum vorhandenen Pool 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 führt häufig zu Ausfallzeiten und einer Obergrenze.

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

In-Memory- Datenraster wie GigaSpaces XAP , Coherence 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.

Weitere Informationen zu diesem Thema finden Sie in meinen früheren Beiträgen: Scale-out vs. Scale-up und die gemeinsamen Prinzipien hinter den NOSQL-Alternativen

Nati Shalom
quelle
1
Es gibt auch Couchbase, Riak, HBase, CitrusLeaf und Infinispan, um die Liste etwas weiter zu vervollständigen (es gibt mehr).
Scalabl3
3
@Nati Shalom Skalieren die NOSQL-Datenbanken horizontal?
Bhushan Firake
2
@ BillyMoon Ich habe gehört, dass dies mit MySQL Galera
Sam Stoelinga
9
Ich bin hier ein bisschen verwirrt ... das Hinzufügen von mehr Maschinen ist effektiv dasselbe wie das Hinzufügen von mehr CPU / RAM. Dann, wie sich die beiden unterscheiden, denn wenn wir eine neue Maschine hinzufügen, die mit CPU und RAM geliefert wird, korrigieren Sie mich bitte, wenn ich bin falsch
Subham Tripathi
8
@SubhamTripathi Wie hier erläutert, ist die vertikale Skalierung auf einen Server (oder eine kleine Gruppe von Servern) beschränkt und hat eine praktische Obergrenze (dh Sie können nicht über beispielsweise 512 GB RAM hinausgehen). Die horizontale Skalierung kann dagegen praktisch unbegrenzt erfolgen.
Asgs
200

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

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

147,3k
quelle
Sehr gute Analogie!
Nikita Kurtin vor
20

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 derzeit verwenden, dh Sie erhöhen die Menge an RAM, CPU, GPU und anderen Ressourcen. Dies wird als vertikale Skalierung bezeichnet.

Vertikale Skalierung ist normalerweise teuer. Das System wird dadurch nicht fehlertolerant. Wenn Sie also eine Anwendung skalieren, die mit einem einzelnen Server ausgeführt wird, fällt Ihr System aus, wenn dieser Server ausfällt. Auch die Anzahl der Threads bleibt bei der vertikalen Skalierung gleich. Bei der vertikalen Skalierung muss Ihr System möglicherweise für einen Moment ausfallen, 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 Anforderung 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 gleichermaßen für jeden Anwendungsserver 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 aufgerufen werden. Ihr System enthält möglicherweise eine große Anzahl von Anforderungen, für die mehr Cluster wie diese erforderlich sind.

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

Yathartha
quelle
9

Es gibt eine zusätzliche Architektur, die nicht erwähnt wurde - SQL-basierte Datenbankdienste, die eine horizontale Skalierung ohne die Komplexität des manuellen Shardings ermöglichen. Diese Dienste übernehmen das Sharding im Hintergrund, sodass Sie eine herkömmliche SQL-Datenbank ausführen und wie bei NoSQL-Engines wie MongoDB oder CouchDB skalieren können. Zwei mir vertraute Dienste sind EnterpriseDB für PostgreSQL und Xeround für MySQL. Ich habe einen ausführlichen Beitrag von Xeround gesehen, in dem erklärt wird, warum das Skalieren in SQL-Datenbanken schwierig ist und wie sie es anders machen - behandeln Sie dies mit einem Körnchen Salz, da es sich um einen Anbieterbeitrag handelt. Schauen Sie sich auch Wikipedia an Cloud-DatenbankeintragEs gibt eine schöne Erklärung für SQL vs. NoSQL und Service vs. Self-Hosted, eine Liste der Anbieter und Skalierungsoptionen für jede Kombination. ;)

Dina Kaiser
quelle
Als weiteren Datenpunkt reiche ich einen weiteren Lieferantenbeitrag von Clustrix ein: clustrix.com/blog/bid/259950/scale-up-vs-scale-out
clieu
Wie wäre es mit Amazon RDS?
Raja Nagendra Kumar
1
Ich weiß, dass dies ein alter Beitrag ist ... nur ein paar Updates ... Xeround hat den Shop geschlossen. Die horizontalen Skalierungsoptionen von PostreSQL sind keine wirklich horizontalen Skalierungsoptionen. Sie sind lediglich DB-Replikationsoptionen, mit denen Sie einige Vorgänge für die replizierte DB ausführen können.
Dharmendar Kumar 'DK'
8

Ja, horizontales Skalieren bedeutet, dass mehr Maschinen hinzugefügt werden. Dies bedeutet jedoch auch, dass die Maschinen im Cluster gleich sind. MySQL kann mithilfe von Replikaten horizontal skaliert werden, um Daten zu lesen. Sobald jedoch die Kapazität des Server-Mem / der Server-Festplatte erreicht ist, müssen Sie mit dem Sharding von Daten zwischen Servern beginnen. Dies wird immer komplexer. Oft ist es ein Problem, 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 NoSQL Horizontal Scaling-Datenbank, die in vielen kommerziellen Hochverfügbarkeitsanwendungen und -spielen verwendet wird und wohl die beste Leistung in dieser Kategorie erbringt. Es partitioniert Daten automatisch über den Cluster, das Hinzufügen von Knoten ist einfach, und Sie können Standardhardware und billigere VM-Instanzen verwenden (z. B. mit Large anstelle von High Mem, High Disk-Computern bei AWS). Es basiert auf der Membase (Memcached), erhöht jedoch die Persistenz. Im Fall von Couchbase kann jeder Knoten Lese- und Schreibvorgänge ausführen und ist im Cluster gleich, nur mit Failover-Replikation (nicht vollständige Dataset-Replikation auf allen Servern wie in mySQL).

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

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

scalabl3
quelle
6

Herkömmliche 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 speicherzentrierte verteilte Datenbanksysteme, die so konzipiert sind, dass sie horizontal skaliert werden können, während die SQL / ACID-Eigenschaften herkömmlicher RDBMS beibehalten werden.

Weitere Informationen zu NuoDB finden Sie im technischen Whitepaper .

Michael Waclawiczek
quelle
5

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 unterscheidet sich jedoch von noSQL-Datenbanken (wie Mongodb, CouchDB oder IBM Cloudant) darin, dass das Daten-Sharding nicht Teil der horizontalen Skalierung ist. In noSQL-Datenbanken werden Daten während der horizontalen Skalierung geteilt.

Entmutigen
quelle
1

Sie haben eine Firma und es gibt nur 1 Mitarbeiter, aber Sie haben 1 neues Projekt zu dem Zeitpunkt, an dem Sie einen neuen Kandidaten einstellen - dies ist eine horizontale Skalierung. Wo neuer Kandidat ist neue Maschinen und Projekt ist neuer Verkehr / Anrufe an Ihre APIs.

Wobei als 1 Projekt mit einem IIT / NIT-Mitarbeiter alle Anfragen an Ihre API / Ihren Datenverkehr bearbeitet. Wenn Ihre APIs jederzeit mehr Anfragen erhalten, feuern Sie ihn und ersetzen Sie ihn durch einen NIT / IIT-Typen mit hohem IQ - dies ist eine vertikale Skalierung.

Jithin Kumar S.
quelle
0

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

Ich denke, in einem realen System sollten wir sowohl SQL- als auch NOSQL-Datenbanken verwenden, um sowohl Multicore- als auch Cloud-Computing-Funktionen heutiger 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.

farshad-nsh
quelle
0

Die akzeptierte Antwort ist genau die grundlegende Definition der horizontalen und vertikalen Skalierung. Aber im Gegensatz zu der allgemeinen Überzeugung, dass die horizontale Skalierung von Datenbanken nur mit Cassandra, MongoDB usw. möglich ist, möchte ich hinzufügen, dass die horizontale Skalierung auch mit jedem herkömmlichen RDMS sehr gut möglich ist. auch das ohne Verwendung von Lösungen von Drittanbietern.

Ich kenne viele Unternehmen, insbesondere SaaS-basierte Unternehmen, die dies tun. Dies erfolgt mithilfe einer einfachen Anwendungslogik. Grundsätzlich nehmen Sie eine Gruppe von Benutzern und teilen sie auf mehrere DB-Server auf. So haben Sie beispielsweise normalerweise eine "Meta" -Datenbank / -Tabelle, in der Clients, DB-Server- / Verbindungszeichenfolgen usw. gespeichert sind, und eine Tabelle, in der die Client / Server-Zuordnung gespeichert ist.

Leiten Sie dann einfach die Anforderungen von jedem Client an den DB-Server, dem sie zugeordnet sind.

Nun mögen einige sagen, dass dies einer horizontalen Partitionierung und nicht einer "echten" horizontalen Skalierung ähnelt, und sie werden in gewisser Weise richtig sein. Das Endergebnis ist jedoch, dass Sie Ihre Datenbank über mehrere Datenbankserver skaliert haben.

Der einzige Unterschied zwischen den beiden Ansätzen zur horizontalen Skalierung besteht darin, dass bei einem Ansatz (MongoDB usw.) die Skalierung von der DB-Software selbst durchgeführt wird. In diesem Sinne "kaufen" Sie die Skalierung. Bei dem anderen Ansatz (für die horizontale RDBMS-Skalierung) wird die Skalierung durch Anwendungscode / -logik erstellt.

Kaufen gegen Bauen

Dharmendar Kumar 'DK'
quelle