Skalierbarkeit
Es gibt zwei gemeinsame Ansätze zur Skalierung eines Servers: vertikale Skalierung und horizontale Skalierung. Vertikale Skalierung oder Skalierung fügen Ihrem Server mehr Strom und Ressourcen hinzu, wie z. B. mehr CPUs, Speicher und Speicher, was kostspielig ist. Auf der anderen Seite fügt die horizontale Skalierung mehrere Knoten zu Ihrem vorhandenen Ressourcenpool hinzu. Dies wird als Skalierung bezeichnet. Basierend auf Ihren Einschränkungen und Anforderungen liegt es an Ihnen, eine einzelne größere Serverinstanz zu haben oder mehrere Serverknoten bereitzustellen.
Angenommen, Sie haben 100 GB RAM und müssen 200 GB Daten halten. In diesem Fall haben Sie zwei Möglichkeiten:
Wenn Sie die maximale RAM -Grenze innerhalb Ihrer Infrastruktur erreicht haben, ist Skalierung der ideale Ansatz. Darüber hinaus erhöht die Skalierung den Datenbankdurchsatz um einen riesigen Rand.
Wiedererlangung Sharding
Es ist eine bekannte Tatsache, dass Redis auf einem einzigen Thread arbeitet. Redis ist also nicht in der Lage, mehrere Kerne der CPU Ihres Servers zu verwenden, um Befehle zu verarbeiten. Das Hinzufügen von mehr CPU -Kernen bietet Ihnen daher nicht viel Durchsatz oder Leistung mit Redis. Es ist nicht der Fall, wenn Sie Ihre Daten in mehreren Serverinstanzen aufspalten. Hinzufügen mehrerer Server und Verteilung des Datensatzes unter denjenigen,. Darüber hinaus kann die Gesamtleistung nahezu linear zunehmen.
Dieser Ansatz zur Aufteilung oder Verteilung von Daten unter mehreren Servern mit Berücksichtigung der Skalierung wird genannt Sharding. Alle Server, die Teile der Daten speichern Scherben.
Wie Sharding gemacht wird - algorithmische Sharding
Eines der Hauptanliegen bei Sharding war, wie man einen bestimmten Schlüssel unter mehreren Redisknoten lokalisiert. Da ein bestimmter Schlüssel in allen verfügbaren Scherben gespeichert werden kann, ist es nicht die beste Option, alle Scherben zu finden, um einen bestimmten Schlüssel zu finden. Es sollte also eine Möglichkeit geben, jeden Schlüssel einem bestimmten Shard zuzuordnen, und Redis verwendet eine algorithmische Sharding -Strategie.
Der häufigste Ansatz ist die Berechnung eines Hash -Werts unter Verwendung des REDIS -Schlüsselnamens und des Modulo. Teilen Sie es dann durch die verfügbaren Redis -Scherben im System.
Hash_Slot = CRC16 (Schlüssel) Mod 16384Es ist eine ziemlich gute Lösung, solange die Gesamtzahl der Scherben konstant ist. Wenn Sie eine neue Reids Server -Instanz hinzufügen, kann sich der resultierende Wert für einen bestimmten Schlüssel ändern, da sich die Gesamtzahl der Scherben erhöht hat. Es wird am Ende die falsche Redis -Shard abfragen. Daher sollten Sie den Umbauprozess befolgen, indem Sie den neuen Shard für jeden Schlüssel berechnen und Daten auf den richtigen Server übertragen, der umständlich ist, und keine triviale Aufgabe, wenn Ihre Gesamtschardzahl von Zeit zu Zeit zunimmt.
Redis verwendet eine neue logische Entität namens a Hash -Slot um dieses Problem zu verhindern. Für einen bestimmten Shard sind mehrere Hash -Slots erhältlich, und ein einzelner Hash -Slot kann mehrere Redis -Schlüssel enthalten. Es gibt 16384 Hash -Slots in einem Redis -Datenbankcluster, der unverändert bleibt. Die Modulo -Division erfolgt mit der Anzahl der Hash -Slots anstelle der Shard -Anzahl. Es liefert die richtige Position des Hash -Steckplatzes für den angegebenen Schlüssel, auch wenn die Anzahl der Scherben zugenommen hat. Es vereinfacht den Umbauprozess, indem die Hash -Slots von einer Shard zu dem neuen verschoben werden, der Daten in den verschiedenen Redis -Instanzen gemäß den Anforderungen aufteilt.
Vorteile der Wiederbeschaffung von Sharding
Redis Sharding ermöglicht mehrere Vorteile für Ihr Datenbanksystem mit minimalen Änderungen.
Da Redis Single-Threaded ist, können die Verarbeitung mehrerer Clientanforderungen nicht parallel mit mehreren CPU-Kernen verarbeiten. Wenn Sie also neue Scherben oder Server -Instanzen hinzufügen, garantieren Sie also, dass Sie parallele Redis -Operationen durchführen können. Es erhöht die Vorgänge pro Sekunde in Ihrer Redis -Datenbank, die Ihnen schließlich einen hohen Durchsatz ergibt.
Mit dem Sharding-Ansatz kann der Redis-Cluster eine Master-Replica-Architektur einrichten, die eine hohe Verfügbarkeit und Haltbarkeit gewährleistet.
Mit Sharding können Sie eine genaue Kopie Ihrer Daten aufbewahren und Lesevorgänge über separate Redis -Instanzen bereitstellen, wodurch die Leistung Ihrer Lesequery -Ausführung erhöht wird.
Abgesehen von diesen Vorteilen kann Sharding zu Split-Hirn-Situationen führen, wenn Sie eine gleichmäßige Anzahl von Scherben im Redis-Cluster haben. Es wird also empfohlen, eine seltsame Anzahl von Scherben in Ihrem Redis -Cluster zu behalten.
Zusammenfassend lässt sich sagen. Wie erläutert, verwendet Redis eine algorithmische Sharding -Strategie, um Kundenanfragen auf den richtigen Shard zu weisen. Dies hat einige Nachteile, wenn die Gesamtzahl der Scherben zunimmt. Anstelle der Gesamtzahl der Scherben verwendet Redis die Anzahl der Hash -Slots, um den entsprechenden Shard zu berechnen. Mit der Einführung von Sharding bieten Redis -Datenbanken eine hohe Verfügbarkeit, einen hohen Durchsatz und eine hohe Leistung.