Unterschied zwischen horizontaler und vertikaler Skalierung für Datenbanken
Habe ich über viele NoSQL-Datenbanken und SQL-Datenbanken. Es gibt unterschiedliche Parameter zu Messen und die stärken und Schwächen dieser Datenbanken und Skalierbarkeit ist einer von Ihnen. Was ist der Unterschied zwischen horizontal und vertikal skalieren diese Datenbanken?
InformationsquelleAutor der Frage London guy | 2012-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Horizontale Skalierung bedeutet, dass Sie die Skalierung durch hinzufügen weiterer Maschinen in den pool von Ressourcen in der Erwägung, dass Vertikale Skalierung bedeutet, dass Sie die Skala, indem Sie mehr power (CPU, RAM), der eine bestehende Maschine.
Eine einfache Möglichkeit, sich daran zu erinnern ist, zu denken, eine Maschine, die auf einem server-rack, fügen wir weitere Maschinen in der horizontale Richtung und weitere Ressourcen hinzufügen, um eine Maschine in der vertikale Richtung.
In einer Datenbank Welt horizontalen Skalierung wird oft basierend auf der Partitionierung der Daten, d.h. jeder Knoten enthält nur einen Teil der Daten, in der vertikalen Skalierung der Daten auf einem einzelnen Knoten und die Skalierung erfolgt durch multi-core-d.h. Verteilung der Last zwischen den CPU-und RAM-Ressourcen der Maschine.
Mit horizontal-Skalierung oft ist es einfacher, eine dynamische Skalierung durch hinzufügen weiterer Maschinen in die vorhandene pool - Vertikal-Skalierung wird oft nur die Kapazität einer einzelnen Maschine, Skalierung jenseits dieser Kapazität oft mit Ausfallzeiten und kommt mit eine Obere Grenze.
Gute Beispiele für die horizontale Skalierung sind Cassandra, MongoDB, Google Cloud Spanner .. und ein gutes Beispiel für die vertikale Skalierung von MySQL - Amazon RDS (Die cloud-Variante von MySQL). Es bietet eine einfache Möglichkeit zur Skalierung vertikal durch den Wechsel von kleinen zu größeren Maschinen. Dieser Prozess ist oft mit Ausfallzeiten.
In-Memory Daten Grids wie GigaSpaces XAPKohärenz etc.. oft sind optimiert für horizontale und vertikale Skalierung ganz einfach, weil Sie sind nicht gebunden an die Scheibe. Horizontale Skalierung durch Partitionierung und vertikale Skalierung über multi-core-Unterstützung.
Lesen Sie mehr über dieses Thema in meinen früheren posts:
Scale-out vs Scale-up und Die Gemeinsamen Prinzipien, die Hinter der NOSQL-Alternativen
InformationsquelleAutor der Antwort
Horizontale Skalierbarkeit ist die Fähigkeit zur Erhöhung der Kapazität durch Verbindung mehrerer hardware-oder software-Entitäten, so dass Sie als eine einzige logische Einheit.
Wenn die Server gruppiert ist, wird der ursprüngliche server wird skaliert horizontal. Wenn ein cluster erfordert mehr Ressourcen, um die Leistung zu verbessern und bieten eine hohe Verfügbarkeit (HA), ein administrator kann die Skalierung durch hinzufügen weiterer Server zum cluster.
Einen wichtigen Vorteil der horizontalen Skalierbarkeit ist, dass es Administratoren mit der Fähigkeit zur Erhöhung der Kapazität on-the-fly. Ein weiterer Vorteil ist, dass in der Theorie, horizontale Skalierbarkeit ist nur begrenzt durch wie viele Personen können erfolgreich miteinander verbunden werden. Das verteilte storage-system Cassandra, zum Beispiel, läuft auf Basis von Hunderten von commodity-nodes verteilt auf verschiedene Rechenzentren. Da der commodity-hardware horizontal skaliert horizontal, Cassandra ist fehlertolerant und nicht einen single point of failure (SPoF).
Vertikale Skalierbarkeit auf der anderen Seite erhöht sich die Kapazität durch hinzufügen von weiteren Ressourcen, wie mehr Speicher oder eine zusätzliche CPU, zu einer Maschine. Vertikal zu skalieren, die auch als Skalierung erfordert normalerweise Ausfallzeiten während neue Ressourcen Hinzugefügt werden und hat Grenzen, die definiert sind durch die hardware. Wenn Amazon RDS-Kunden benötigen, um vertikal skalieren, zum Beispiel, können Sie den Wechsel von einer kleineren auf eine größere Maschine, sondern Amazon der größte RDS-Instanz nur 68 GB Speicher.
Horizontaler Skalierung hat sowohl Vorteile als auch Nachteile. Zum Beispiel, hinzufügen preiswerte Ware Computer zu einem cluster erscheinen mag, um eine kostengünstige Lösung, auf den ersten Blick, aber es ist wichtig für den administrator, um zu wissen, ob die Lizenz-Kosten für die zusätzlichen Server, die zusätzliche Operationen, Kosten für Stromversorgung und Kühlung sowie die große Stellfläche, die Sie einnehmen wird in der data-center macht wirklich Skalierung horizontal besser als vertikal zu skalieren.
InformationsquelleAutor der Antwort seriy23
Horizontale Skalierung - auch bezeichnet als "scale-out" ist im Grunde die Zugabe von mehr Maschinen oder die Einrichtung einer cluster-oder einer verteilten Umgebung für Ihr software-system. Dies erfordert in der Regel einen load-balancer-Programm, das ist eine Middleware-Komponente, die in der standard 3-tier-client-server-Architektur-Modell.
Load-Balancer ist dafür verantwortlich, verteilen von Benutzer-Anforderungen (Last) zwischen den verschiedenen back-end-Systemen/Maschinen/Knoten im cluster. Jede dieser back-end-Maschinen ausführen, eine Kopie der software und somit in der Lage Wartung Anfragen. Dies ist nur eine der verschiedenen Funktionen, die load balancer können performt werden. Eine weitere, sehr häufige Aufgabe ist die "health-check", wo der load balancer verwendet die "ping-echo" Protokoll oder Austausch heartbeat-Nachrichten mit allen Servern, um sicherzustellen, dass Sie sind und laufen einwandfrei.
Load-Balancer verteilt die Belastung durch das aufrechterhalten des Zustands der einzelnen Maschinen -- wie viele Anforderungen bedient werden, die von jeder Maschine, die Maschine ist im Leerlauf, die Maschine ist überlastet mit Anforderungen in der Warteschlange etc. Also die load-balancing-Algorithmus betrachtet solche Dinge, die vor der Umleitung der Anfrage an einen geeigneten server-Maschine. Es berücksichtigt auch die Netzwerk-overhead und könnte wählen Sie den server in der nächsten Daten-center verfügbar ist, um die Anfragen.
Des Anfrage-Antwort kann man auch auf 2 verschiedene Wege:
Load Balancer immer agiert als Vermittler-Programm für jede Antwort - In diesem Fall, wenn der request übergeben worden ist, um den server durch den load-balancer, keine Antwort vom server an den Benutzer wird durch den load-balancer. So der server-Computer, die tatsächlich in der Verarbeitung der Anforderung wird nie direkt-Schnittstelle mit dem Computer des Benutzers ausführen der client-Anwendung. Der Computer mit den load-balancer-Programms wird die Bearbeitung der Anfragen/Antworten an und von dem Benutzer.
Load Balancer fungiert nicht als Vermittler für die Antworten von der server-Maschine - In diesem Fall, sobald der server hat die Anfrage erhalten von load-balancer, umgeht es den Lastenausgleich und kommuniziert er die Antworten direkt an den client.
Aufbau eines cluster und load-balancer als front-end-Schnittstelle für die client-Anwendung nicht wirklich unsere scale-out-Architektur und design. Es gibt noch viele kritische Fragen zu beantworten und eine Reihe von wichtigen design-Entscheidungen getroffen werden, die Auswirkungen auf die Allgemeinen Eigenschaften des Systems.
Müssen wir uns zuerst um unsere business Ziele und Bereiche, in denen wir möchte hinzufügen Wert. Diese Ziele ergeben sich auch verschiedene Anforderungen. Dann müssen wir uns Fragen, verschiedene Fragen mit Bezug zu unterschiedlichen systemischen Eigenschaften.
Wird so ein design-Adresse unsere performance-Anforderungen ?
Welche Leistungsmerkmale kümmern uns ?
Ist es der Gesamtdurchsatz des Systems, wo sind wir daran interessiert, im Dienste maximale Anzahl der Anfragen in einer bestimmten Zeit ?
Oder ist es die Reaktionszeit des Systems, wo wir design für die Rücksendung der Antwort an den Kunden in weniger Zeit wie möglich ?
Diese beiden und viele andere Arten von performance-Eigenschaften sind miteinander verwandt.
Wird so ein design-Adresse unsere Anforderungen an die Verfügbarkeit ? Ist das system fehlertolerant ? Wenn ja, was ist das Grad ?
Ist so ein design zuverlässig ? Hat es Auswirkungen auf die Richtigkeit ? Wir sollten nicht vergessen, dass die 100% Richtigkeit ist ein implizites Ziel eines jeden Systems.
Sind wir wirklich treffen unsere Skalierbarkeit Ziele ? Könnte sein, die Erreichung der kurzfristigen oder unmittelbaren, aber was passiert auf lange Sicht ?
Alle diese Arten von Anforderungen sollten quantifizierbar sind Maßnahmen, die mit Ihnen verbunden sind.
Sollten wir dann machen, wichtige design-Entscheidungen durch die Befragung selbst, die Entwicklung von Prototypen und Verfeinerung der Gestaltung.
Erstens, ist der Einsatz von load-balancer der einzige Ansatz, um eine Lastverteilung und horizontal skalieren Sie das system ?
Haben die verschiedenen back-end-Servern oder Knoten mit jedem anderen kommunizieren ?
Wenn ja, wie funktioniert dann das system-Adresse die situation, wo ein oder mehr Knoten nach unten gehen -- dauerhaft oder vorübergehend ?
Wenn ja, wie funktioniert dann das system-Adresse die situation, wo die Netzwerk-Verbindung der Knoten down ist, aber alle Knoten, die in Betrieb sind ? Am wichtigsten ist, müssen wir unterscheiden zwischen diesen beiden Situationen ? Wie ?
An jedem Punkt in der Zeit, die Daten über alle Knoten sollte konsistent sein.
Oder später einem Punkt in der Zeit, die Daten über alle Knoten konsistent sein. Wenn dem so ist, was ist dann dieses "später" ? Wie und Wann werden alle Knoten, die zusammenlaufen, um einen konsistenten Zustand ? Wie erreichen wir "Gesamt-Ordnung" von Operationen über alle Knoten ? Wir haben einen globalen Uhr ? Wenn wir abhängig sind, die auf jeden Knoten der lokalen Uhr, so wie wir die Synchronisierung der Uhren aller Maschinen. Sie können einfach scheinen zu regredieren oder eine Maschine mit einer out-of-order-Uhr kann dem cluster beitreten. Als Folge können wir ignorieren Sie die neuesten Daten und betrachten alte/veraltete Daten als die Letzte.
Ist es eine "Replik" cluster, wobei die Daten auf jedem Knoten repliziert, um einige oder alle anderen Knoten. Im Fall des ehemaligen, ist, was die Replikation Faktor, und wie wir es entscheiden ?
Oder ist es ein sharded cluster-cluster gliedert sich in verschiedene Splitter oder Einheiten. Ein shard ist einer bestimmten Gruppe von Knoten. Jeder Splitter kümmert sich um eine bestimmte partition Daten. Daten über Scherben ist nicht repliziert, aber jeder shard übernehmen können Replikations-Strategie in sich selbst.
Was auch immer verteilte Systeme, die wir entwerfen, es sollte idealerweise in der Lage sein eine Antwort auf die oben genannten und viele andere ähnliche Fragen.
All dies ist, was macht ein verteiltes system so interessant und herausfordernd zu gestalten und umzusetzen.
Vertikale Skalierung - auch bezeichnet als "scale-up" - Ansatz ist ein Versuch zur Erhöhung der Kapazität einer einzelnen Maschine :
Durch das hinzufügen von mehr Rechenleistung
Durch das hinzufügen von mehr Speicher
Mehr Speicher etc
Zusammenfassung:
Wichtig ist hier zu verstehen, die Unterschiede zwischen diesen 2 scaling-Ansätze identifizieren, welche für unsere Anforderungen, und sehen, ob Sie die Anwendung wirklich passt das Modell, das wir wählen.
Als hätten Sie es Begriffen, horizontale Skalierung kommt mit Aufwand in form von cluster-setup, die Verwaltung und die Wartung Kosten und Komplexität. Das design wird zunehmend komplexer und Programmier-Modell ändert.
So einfach werfen Sie in neue hardware, und das hinzufügen von Knoten oder Maschinen ist nicht der Weg, um zu starten. Zunächst sehen, wenn die Anforderungen erfüllt werden können, durch die Erhöhung der Kapazität oder tuning Merkmale einer einzelnen Maschine. Wenn nicht, dann gehen Sie mit dem scale-out-Ansatz oder eine Kombination von beiden.
InformationsquelleAutor der Antwort Vivek Gyaneshwar
Ja horizontaler Skalierung bedeutet das hinzufügen von mehr Maschinen, aber es bedeutet auch, dass die Maschinen gleich sind, im cluster. MySQL skalieren können, horizontal in Bezug auf das Lesen von Daten, durch die Verwendung von Repliken, aber sobald es erreicht die Kapazität der server mem/disk, müssen Sie beginnen Splitter von Daten zwischen Servern. Dies wird zunehmend komplexer. Häufig hält die Daten konsistent replicas ist ein problem, da die Replikation Tarife sind oft zu langsam, um mit Daten zu ändern, Tarife.
Couchbase ist auch eine fantastische NoSQL-Horizontale Skalierung der Datenbank, verwendet in vielen kommerziellen Anwendungen mit hoher Verfügbarkeit und Spiele und wohl auch die höchste Darsteller in der Kategorie. Es partitioniert die Daten automatisch im cluster das hinzufügen von Knoten ist einfach, und Sie können die Verwendung von Standardhardware, billiger vm-Instanzen (mit Großem anstelle von High-Mem, High-Disk-Maschinen bei der AWS zum Beispiel). Es ist gebaut aus den Membase (Memcached) fügt aber hinzu, Persistenz. Auch im Fall von Couchbase, jeder Knoten kann tun, liest und schreibt, und sind gleich in den cluster, mit nur failover Replikation (nicht vollständige Datensatz Replikation auf allen Servern wie in mySQL).
Performance-Weise, können Sie sehen, eine ausgezeichnete Cisco-benchmark: http://blog.couchbase.com/understanding-performance-benchmark-published-cisco-and-solarflare-using-couchbase-server
Hier ist eine große blog-post über Couchbase Architektur: http://horicky.blogspot.com/2012/07/couchbase-architecture.html
InformationsquelleAutor der Antwort scalabl3
Gibt es eine weitere Architektur, das wurde nicht erwähnt - SQL-basierte Datenbank-services, die die horizontale Skalierung ermöglicht, ohne die Komplexität der manuellen Splitter. Diese Dienste tun, die Splitter in den hintergrund, so dass Sie ermöglichen es Ihnen, eine traditionelle SQL-Datenbank und skalieren, wie Sie es mit NoSQL-engines wie MongoDB oder CouchDB. Zwei Dienste, die ich bin vertraut mit sind EnterpriseDB für PostgreSQL und Xeround für MySQL. Ich sah eine Tiefe post von Xeround, die erklärt, warum scale-out auf SQL-Datenbanken ist schwierig und wie Sie es anders tun - behandeln Sie dies mit einem Körnchen Salz, wie es ein vendor-post. Auch check out Wikipedia ist Cloud-Datenbank-Eintrages gibt eine schöne Erklärung von SQL vs. NoSQL und service vs. self-hosted, eine Liste von Herstellern und Skalierungsoptionen für jede Kombination. 😉
InformationsquelleAutor der Antwort Dina Kaiser
Fangen wir mit der Notwendigkeit einer Skalierung, die Erhöhung der Ressourcen, so dass Ihr system kann nun mit mehr Anfragen, als es früher konnte .
Wenn Sie erkennen , dass Ihr system wird immer langsamer und ist nicht in der Lage zu handhaben, die aktuelle Anzahl der Anforderungen , die Sie benötigen, um das system zu skalieren .
Diese bietet Ihnen zwei Optionen , entweder Sie erhöhen die Ressourcen der server, die Sie verwenden derzeit ich.e Erhöhung der Menge von ram , cpu -, gpu-und anderen Ressourcen .Dies ist bekannt als die vertikale Skalierung .
Vertikale Skalierung ist in der Regel teuer .
Es ist nicht die system fault-tolerant , ich.e wenn Sie die Skalierung der Anwendung mit einem server , wenn dieser server ausfällt , wird Ihr system wird nach unten gehen .
Auch die Menge der threads bleibt in der vertikalen Skalierung .
Die vertikale Skalierung kann verlangen, dass Ihr system zu gehen für einen moment, wenn der Prozess stattfindet . Erhöhung der Ressourcen auf einem server, erfordert einen Neustart und setzen Sie Ihr system herunter .
Andere Lösung für dieses problem ist die Erhöhung der Menge an Servern im system vorhanden sind . Diese Lösung ist sehr verwendet in der tech-Industrie .
Dies wird schließlich verringern die Anforderung pro Sekunde rate in jedem server .
Wenn Sie brauchen, um das system zu skalieren , fügen Sie einfach einen anderen server , und Sie sind fertig . Sie würden nicht erforderlich, das system neu zu starten .
Anzahl der threads in jedem system abnimmt, führt zu einem hohen Durchsatz .
Zu trennen die Anfragen gleichmäßig auf die einzelnen von der application-server , müssen Sie die load-balancer, welcher als reverse-proxy auf den web-Server . Dieses ganze system kann man als ein einziges cluster .
Ihr system enthält eine große Anzahl von Anfragen, die erfordern weitere Anzahl von Clustern wie diese .
Hoffe, Sie bekommen das ganze Konzept der Einführung Skalierung auf das system
InformationsquelleAutor der Antwort yathartha
Traditionellen, relationalen Datenbanken, in denen die konzipiert als client - /server-Datenbank-Systeme. Sie können horizontal skaliert werden, aber der Prozess dazu neigt, zu Komplex und fehleranfällig. NewSQL-Datenbanken likeNuoDB sind memory-centric distributed database systems skalieren horizontal, während die Aufrechterhaltung der SQL/ACID-Eigenschaften von traditionellen RDBMS.
Weitere Informationen über NuoDB, Lesen Sie Ihre technischen whitepaper unter http://goo.gl/uzLIWB.
InformationsquelleAutor der Antwort Michael Waclawiczek
SQL-Datenbanken wie Oracle, db2 unterstützt auch die Horizontale Skalierung durch Shared-disk-cluster. Beispielsweise Oracle RAC, IBM DB2 purescale-oder Sybase-ASE-Cluster-edition. Neue Knoten Hinzugefügt werden können, um Oracle RAC-system oder DB2 purescale-Systems zu erreichen und horizontale Skalierung.
Aber der Ansatz unterscheidet sich von noSQL-Datenbanken (wie z.B. mongodb, CouchDB oder IBM Cloudant) ist, dass die Daten der Splitter ist nicht Teil der Horizontalen Skalierung. In noSQL-Datenbanken Daten shraded während die horizontale Skalierung.
InformationsquelleAutor der Antwort Debasish
Alle anderen Antworten scheinen schon ziemlich fertig, aber ich wollte nicht sehen, Google Cloud Spanner als ein Beispiel für eine relationale Datenbank mit horizontaler Skalierung, das ist, warum ich füge meinen kleinen Beitrag.
InformationsquelleAutor der Antwort Erickson Filipe
Hinzufügen viele Lastenausgleich schafft zusätzlichen overhead und Latenz, und das ist der Nachteil für die Skalierung horizontal im nosql-Datenbanken. Es ist wie die Frage, warum die Leute sagen RPC wird nicht empfohlen, da es nicht robust ist.
Ich denke, dass in einem realen system, das wir verwenden sollten, sql-und nosql-Datenbanken zu nutzen, sowohl multicore und cloud-computing-Funktionen der heutigen Systeme.
Auf der anderen Seite, komplexe Transaktions-Abfragen hat eine hohe Leistung, wenn sql-Datenbanken wie oracle verwendet wird. NoSql verwendet werden könnte, für bigdata und horizontale Skalierbarkeit durch Splitter.
InformationsquelleAutor der Antwort farshad-nsh