Ich habe viele NoSQL-Datenbanken und SQL-Datenbanken kennengelernt. Es gibt verschiedene Parameter, um die Stärken und Schwächen dieser Datenbanken zu messen, und die Skalierbarkeit ist einer von ihnen. Was ist der Unterschied zwischen horizontaler und vertikaler Skalierung dieser Datenbanken?
Antworten
Zu viele Anzeigen?Horizontale Skalierung bedeutet, dass Sie durch Hinzufügen weiterer Maschinen skalieren. in Ihren Ressourcenpool, während Vertikale Skalierung bedeutet, dass Sie eine vorhandene Maschine mit mehr Leistung (CPU, RAM) ausstatten. .
Eine einfache Möglichkeit, sich dies zu merken, ist, sich eine Maschine in einem Server-Rack vorzustellen. horizontal Richtung und fügen Sie weitere Ressourcen zu einer Maschine in der vertikal Richtung.
In der Datenbankwelt basiert die horizontale Skalierung oft auf der Partitionierung der Daten, d.h. jeder Knoten enthält nur einen Teil der Daten. Bei der vertikalen Skalierung befinden sich die Daten auf einem einzigen Knoten und die Skalierung erfolgt durch Multi-Core, d.h. durch die Verteilung der Last auf die CPU- und RAM-Ressourcen dieser Maschine.
Bei der horizontalen Skalierung ist es oft einfacher, dynamisch zu skalieren, indem weitere Maschinen zum bestehenden Pool hinzugefügt werden. Die vertikale Skalierung ist oft auf die Kapazität einer einzelnen Maschine beschränkt, eine Skalierung über diese Kapazität hinaus ist oft mit Ausfallzeiten verbunden und hat eine Obergrenze.
Gute Beispiele für horizontale Skalierung sind Cassandra und MongoDB, Google Cloud Spanner und ein gutes Beispiel für vertikale Skalierung ist MySQL - Amazon RDS (die Cloud-Version von MySQL). Sie bietet eine einfache Möglichkeit zur vertikalen Skalierung durch den Wechsel von kleinen zu größeren Maschinen. Dieser Prozess ist oft mit Ausfallzeiten verbunden.
In-Memory Data Grids wie zum Beispiel GigaSpaces XAP , Kohärenz usw. sind oft sowohl für die horizontale als auch für die vertikale Skalierung optimiert, einfach weil sie nicht an die Festplatte gebunden sind. Horizontale Skalierung durch Partitionierung und vertikale Skalierung durch Multi-Core-Unterstützung.
Mehr zu diesem Thema können Sie in meinen früheren Beiträgen lesen: Scale-out vs. Scale-up y Die gemeinsamen Prinzipien hinter den NOSQL-Alternativen
Beginnen wir mit der Notwendigkeit der Skalierung, d. h. der Erhöhung der Ressourcen, so dass Ihr System nun mehr Anfragen bearbeiten kann als zuvor.
Wenn Sie feststellen, dass Ihr System langsam wird und nicht mehr in der Lage ist, die aktuelle Anzahl von Anfragen zu bewältigen, müssen Sie das System skalieren.
Dabei stehen Ihnen zwei Möglichkeiten zur Verfügung. Entweder Sie erhöhen die Ressourcen des Servers, die Sie derzeit nutzen, d. h. Sie erhöhen die Menge an RAM, CPU, GPU und anderen Ressourcen. Dies wird als vertikale Skalierung bezeichnet.
Die vertikale Skalierung ist in der Regel kostspielig. Sie macht das System nicht fehlertolerant, d.h. wenn Sie eine Anwendung skalieren, die auf einem einzigen Server läuft, wird Ihr System ausfallen, wenn dieser Server ausfällt. Auch die Anzahl der Threads bleibt bei vertikaler Skalierung gleich. Bei vertikaler Skalierung kann es erforderlich sein, dass Ihr System für einen Moment ausfällt, wenn ein Prozess stattfindet. Die Erhöhung der Ressourcen auf einem Server erfordert einen Neustart und setzt Ihr System außer Betrieb.
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 verwendet. Dadurch wird die Anzahl der Anfragen pro Sekunde auf jedem Server verringert. Wenn Sie das System skalieren müssen, fügen Sie einfach einen weiteren Server hinzu, und schon sind Sie fertig. Ein Neustart des Systems ist nicht erforderlich. Die Anzahl der Threads in jedem System nimmt ab, was zu einem hohen Durchsatz führt. Um die Anfragen gleichmäßig auf die einzelnen Anwendungsserver aufzuteilen, müssen Sie einen Load Balancer hinzufügen, der als Reverse Proxy für die Webserver fungiert. Dieses ganze System kann als ein einziger Cluster bezeichnet werden. Ihr System kann eine große Anzahl von Anfragen enthalten, die eine größere Anzahl solcher Cluster erfordern.
Ich hoffe, Sie verstehen das ganze Konzept der Einführung der Skalierung in das System.
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 führen das Sharding im Hintergrund durch, so dass Sie eine herkömmliche SQL-Datenbank betreiben und skalieren können, wie Sie es mit NoSQL-Engines wie MongoDB oder CouchDB tun würden. Zwei Dienste, mit denen ich vertraut bin, sind EnterpriseDB für PostgreSQL und Xeround für MySQL. Ich habe einen ausführlichen Beitrag von Xeround, in dem erklärt wird, warum Scale-Out bei SQL-Datenbanken schwierig ist und wie sie es anders machen - betrachten Sie dies mit Vorsicht, da es sich um einen Anbieterbeitrag handelt. Sehen Sie sich auch den Wikipedia-Artikel Eintrag in die Cloud-Datenbank gibt es eine schöne Erklärung von SQL vs. NoSQL und Service vs. selbstgehostet, eine Liste von Anbietern und Skalierungsoptionen für jede Kombination ;)
Ja, horizontale Skalierung bedeutet, dass mehr Maschinen hinzugefügt werden, aber es bedeutet auch, dass die Maschinen im Cluster gleich sind. MySQL kann durch den Einsatz von Replikaten horizontal skalieren, aber sobald die Kapazität des Serverspeicherplatzes erreicht ist, müssen Sie beginnen, die Daten auf mehrere Server aufzuteilen. Dies wird zunehmend komplexer. Oft ist es ein Problem, die Daten über die 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-Datenbank mit horizontaler Skalierung, die in vielen kommerziellen Hochverfügbarkeitsanwendungen und Spielen eingesetzt wird und wohl die leistungsfähigste in dieser Kategorie ist. Es partitioniert die Daten automatisch im Cluster, das Hinzufügen von Knoten ist einfach, und Sie können Commodity-Hardware und billigere vm-Instanzen verwenden (z. B. Large- statt High-Mem- und High-Disk-Maschinen bei AWS). Sie basiert auf der Membase (Memcached), bietet aber zusätzlich Persistenz. Außerdem kann bei Couchbase jeder Knoten Lese- und Schreibvorgänge durchführen und ist im Cluster gleichberechtigt, wobei nur eine Failover-Replikation stattfindet (keine vollständige Datensatzreplikation über alle Server wie bei mySQL).
Was die Leistung betrifft, so können Sie einen hervorragenden Cisco-Benchmark sehen: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server
Hier ist ein großartiger Blogbeitrag über die Couchbase Architektur: http://horicky.blogspot.com/2012/07/couchbase-architecture.html
- See previous answers
- Weitere Antworten anzeigen