Routingoptionen

Wenn Sie Anfragen von einer Anwendung an Bigtable senden, verwenden Sie ein Anwendungsprofil, das Bigtable mitteilt, wie die Anfragen zu verarbeiten sind. In einem Anwendungsprofil wird die Routingrichtlinie für die Anfragen angegeben. Bei Instanzen mit Replikation steuert die Routingrichtlinie, welche Cluster die Anfragen erhalten und wie Failovers gehandhabt werden.

In diesem Dokument werden die Routingrichtlinien beschrieben, die für ein standardmäßiges Anwendungsprofil verfügbar sind.

Routingrichtlinien sind besonders wichtig für Anwendungsfälle der Arbeitslastisolierung, wenn Data Boost (Vorschau) nicht verwendet werden kann. Sie können sie zusammen mit Anfrageprioritäten konfigurieren.

Routingrichtlinien wirken sich nicht auf die Replikation aus. Sie sollten jedoch mit der Funktionsweise der Bigtable-Replikation vertraut sein, bevor Sie diese Seite lesen. Weitere Informationen finden Sie unter Failovers.

Single-Cluster-Routing

Eine Single-Cluster-Routingrichtlinie leitet alle Anfragen an einen Cluster in Ihrer Instanz weiter. Wenn dieser Cluster nicht mehr verfügbar ist, müssen Sie ein manuelles Failover auf einen anderen Cluster durchführen.

Dies ist die einzige Routingrichtlinie, mit der Sie Transaktionen für einzelne Zeilen aktivieren können.

Eine replizierte Instanz bietet normalerweise Eventual Consistency. Sie können jedoch Read-Your-Writes-Konsistenz für eine Arbeitslast in einer replizierten Instanz erreichen, wenn Sie ein Anwendungsprofil für diese Arbeitslast so konfigurieren, dass Single-Cluster-Routing zum Senden von Lese- und Schreibanfragen an denselben Cluster verwendet wird. Je nach Arbeitslastanforderungen können Sie Traffic für zusätzliche Arbeitslasten auf der replizierten Instanz an andere Cluster in der Instanz weiterleiten.

Multi-Cluster-Routing

Eine Multi-Cluster-Routingrichtlinie leitet Anfragen, die Sie an eine Instanz senden, an die nächstgelegene Region weiter, in der sich die Instanz befindet. Wenn der Cluster nicht mehr verfügbar ist, wird für den Traffic automatisch ein Failover auf den nächstgelegenen verfügbaren Cluster durchgeführt.

Diese Konfiguration bietet Eventual Consistency. Sie können Transaktionen für einzelne Zeilen nicht mit Multi-Cluster-Routing aktivieren, da Transaktionen für einzelne Zeilen Datenkonflikte verursachen können, wenn Sie Multi-Cluster-Routing verwenden. Weitere Informationen finden Sie unter Transaktionen für einzelne Zeilen.

Verwenden Sie Multi-Cluster-Routing, wenn Sie Hochverfügbarkeit (HA) wünschen. Empfohlene Instanzkonfigurationen und weitere Details finden Sie unter Hochverfügbarkeit erstellen.

Die zwei Arten von Multi-Cluster-Routing sind beliebige Cluster und Clustergruppen.

Beliebiges Clusterrouting

Jegliches Clusterrouting macht jeden Cluster in der Instanz für den Empfang von Anfragen und für das Failover verfügbar.

Clustergruppen-Routing

Wenn Sie einen oder mehrere Cluster einer Instanz von einem möglichen Failover ausschließen möchten, können Sie Clustergruppen-Routing verwenden. Mit dieser Form des Multi-Cluster-Routings können Sie eine Teilmenge von Clustern angeben, an die ein Anwendungsprofil Traffic senden kann. Dies kann hilfreich sein, wenn Sie einen Cluster für eine separate Arbeitslast reservieren möchten.

Transaktionen für einzelne Zeilen

In Bigtable-Mutationen, wie Lese-, Schreib- und Löschanfragen, sind sie auf Zeilenebene immer atomar. Dazu gehören Mutationen in mehreren Spalten in einer einzelnen Zeile, solange sie im selben Mutationsvorgang enthalten sind. Bigtable unterstützt keine Transaktionen, die mehr als eine Zeile atomar aktualisieren.

Allerdings unterstützt Bigtable verschiedene Schreibvorgänge, die eine Transaktion in anderen Datenbanken erfordern. In der Praxis verwendet Bigtable Transaktionen für einzelne Zeilen, um diese Vorgänge auszuführen. Diese Vorgänge umfassen sowohl Lese- als auch Schreibzugriffe, die alle atomar ausgeführt werden. Trotzdem sind die Vorgänge nur auf Zeilenebene atomar:

  • Read-Modify-Write-Vorgänge, einschließlich Inkremente und Anhänge. Ein Read-Ändern-Write-Vorgang liest einen vorhandenen Wert, erhöht den vorhandenen Wert oder ergänzt ihn und schreibt den aktualisierten Wert in die Tabelle.
  • Check-Mutate-Vorgänge, die auch bedingte Mutationen oder bedingte Schreibvorgänge genannt werden. Bei einem Check-Mutate-Vorgang prüft Bigtable eine Zeile, um festzustellen, ob eine angegebene Bedingung erfüllt wird. Wenn dies der Fall ist, schreibt Bigtable neue Werte in die Zeile.

Konflikte zwischen Transaktionen für einzelne Zeilen

Jeder Cluster in einer Bigtable-Instanz ist ein primärer Cluster, der sowohl Lese- als auch Schreibvorgänge akzeptiert. Daher können Vorgänge, die Transaktionen für einzelne Zeilen erfordern, Probleme in replizierten Instanzen verursachen.

Angenommen, Sie haben eine Tabelle, in der Sie Daten für ein Ticketsystem speichern. Sie verwenden einen Ganzzahlzähler, um die Anzahl der verkauften Tickets zu speichern. Jedes Mal, wenn Sie ein Ticket verkaufen, sendet Ihre App einen Read-Modify-Write-Vorgang, um den Zähler um 1 zu erhöhen.

Wenn Ihre Instanz über einen Cluster verfügt, können Clientanwendungen gleichzeitig Tickets verkaufen und die Zähler ohne Datenverlust erhöhen, da die Anfragen atomar in der Reihenfolge verarbeitet werden, in der sie von diesem einzelnen Cluster empfangen werden.

Wenn Ihre Instanz dagegen mehrere Cluster hat und Ihr Anwendungsprofil Multi-Cluster-Routing zulässt, werden gleichzeitige Anfragen zur Erhöhung des Zählers möglicherweise an verschiedene Cluster gesendet und dann an die anderen Cluster in der Instanz repliziert. Wenn Sie zwei Erhöhungsanfragen zur gleichen Zeit senden, die an verschiedene Cluster weitergeleitet werden, beendet jeder seine Transaktion, ohne vom anderen zu „wissen“. Der Zähler für jeden Cluster wird um eins erhöht. Wenn die Daten in den anderen Cluster repliziert werden, kann Bigtable nicht wissen, dass Sie den Wert um 2 erhöhen möchten.

Damit Sie unbeabsichtigte Ergebnisse vermeiden, führt Bigtable Folgendes aus:

  • Jedes Anwendungsprofil muss angeben, ob Transaktionen für einzelne Zeilen zulässig sind.
  • Außerdem wird verhindert, dass Sie Transaktionen für einzelne Zeilen in einem Anwendungsprofil mit Multi-Cluster-Routing aktivieren, da es keine sichere Möglichkeit zur gleichzeitigen Aktivierung beider Funktionen gibt.
  • Sie erhalten eine Benachrichtigung, wenn Transaktionen für einzelne Zeilen in zwei oder mehr Anwendungsprofilen aktiviert werden, die Single-Cluster-Routing verwenden und auf verschiedene Cluster verweisen. Achten Sie beim Erstellen dieses Konfigurationstyps darauf, dass Sie keine in Konflikt stehenden Read-Modify-Write- oder Check-and-Mutate-Anfragen an verschiedene Cluster senden.

Nächste Schritte