Zum Hauptinhalt springen

Partition

Eine Partition ist ein Ausschnitt des Keyspace eines Stores. Keys werden per Hash auf Partitionen verteilt, jede Partition gehört zu einem Zeitpunkt genau einem Node, und Partitionen tragen stabile Codewort-Namen, damit Sie ihnen im Cluster folgen können.

Was eine Partition ist​

Eine Partition ist die Einheit für Ownership und Replikation innerhalb eines Stores. Der Keyspace des Stores ist in Partitionen unterteilt; jeder Key gehört zu genau einer Partition, und jede Partition gehört zu einem Zeitpunkt genau einem Node — ihrem Primary — plus null oder mehr Replikaten auf anderen Nodes. Diese Aufteilung des Keyspace ist der Weg, wie ein Store über das hinaus skaliert, was ein einzelner Node halten und bedienen kann.

Von einem Key zu einer Partition​

Das Routing eines Keys zu einer Partition ist deterministisch, sodass jeder Client dieselbe Route ohne Abstimmung berechnet. Es geschieht in zwei Schritten.

  1. Key zu Segment. Jeder Key wird per Hash auf eines von einer festen Anzahl von Segmenten (Hash-Slots) abgebildet. Ein gegebener Key landet immer im selben Segment.
  2. Segment zu Partition. Segmente werden zu Partitionen gruppiert. Eine Partition besitzt eine zusammenhängende Menge von Segmenten.

Auf Partitionen abgebildet werden Segmente, nicht einzelne Keys. Deshalb verschiebt das Rebalancing Segmente zwischen Partitionen und Nodes, statt Keys neu zu hashen — die Keys wandern unverändert mit ihrem Segment.

Partitionsanzahl​

Üblicherweise legen Sie keine absolute Partitionsanzahl fest. Sie legen Partitionen pro Node fest, mit dem Default 1, und die Gesamtzahl ergibt sich als Partitionen pro Node × aktive Nodes. Die Gesamtzahl wird bei jeder Änderung der Mitgliedschaft neu berechnet und folgt so der Form des Clusters, statt bei der Erstellung einzufrieren.

  • Die Produktionstopologie behält den Default von einer Partition pro Node bei.
  • Beim lokalen Testen erhöhen Sie die Partitionen pro Node — zum Beispiel auf 4 — um partitionsbewusstes Verhalten wie Segment-Routing und Scale-out-Rebalancing auf einer einzelnen Maschine zu beobachten.

Codewort-Namen​

Jede Partition wird durch ein stabiles Codewort identifiziert — Amber, Onyx, Jade, Opal, Topaz und so weiter — statt durch eine nackte Zahl. Das Wort wird aus der stabilen, monotonen Seriennummer der Partition abgeleitet, sodass dieselbe Partition in jedem Prozess und über Neustarts und Ownership-Wechsel hinweg dasselbe Wort behält. Die Wortliste ist bewusst nicht geografisch (Edelsteine, Metalle, Bäume, Vögel, Wetter, Sterne und Ähnliches) und innerhalb eines 500-Wörter-Zyklus kollisionsfrei.

Der Sinn ist betrieblich: In der Konsole und in der Diagnose können Sie Amber folgen, während sie bei einem Failover oder Rebalancing von einem Node zum anderen wechselt, statt anonyme Partitionsindizes über Snapshots hinweg abzugleichen.

Partition im Vergleich zu den Begriffen, mit denen sie verwechselt wird​

Eine Partition ist ein logischer Datenausschnitt, was sie vom haltenden Prozess und von einer redundanten Kopie unterscheidet.

  • Eine Partition ist kein Node. Ein Node ist ein Prozess; eine Partition sind Daten, die der Node hält. Ein Node kann mehrere Partitionen halten.
  • Eine Partition ist kein Replikat. Ein Replikat ist eine Kopie einer Partition auf einem anderen Node. Die Partition ist das Original; ihre Replikate sind zusätzliche Kopien davon.
  • Eine Partition ist kein Store. Ein Store ist der gesamte Keyspace; eine Partition ist ein Ausschnitt davon.
tipp

Die Nodes-Ansicht der Konsole zeigt anhand des Codeworts, welche Partitionen jeder Node hält — welche er als Primary besitzt und welche er als Replikat führt.

Nächste Schritte​