Führende Routenplanung

Auf dieser Seite wird das Leader-spezifische Routing in Spanner und seine Verwendung beschrieben. Spanner verwendet Leader-spezifisches Routing für die dynamische Weiterleitung von Lese-/Schreibvorgängen. Transaktionen in Dual- und multiregionalen Instanzkonfigurationen, um und die Leistung Ihrer Datenbank zu verbessern. Führende Routenführung ist ist standardmäßig aktiviert.

Spanner-Routing für Lese-Schreib-Transaktionen

Spanner repliziert Daten, um zusätzliche Daten bereitzustellen und geografischer Standort. In Spanner dual-regionale und multiregionale Instanzkonfigurationen eine Region in der Konfiguration der Dual- und Multi-Region wird als führende Region festgelegt und enthält die Leader-Replikate. der Datenbank. Wenn Sie eine Instanz mit zwei oder mehreren Regionen verwenden Konfiguration und Ihr Client gibt eine Lese-Schreib-Transaktion an Ihre Datenbank aus. aus einer nicht führenden Region stammen, wird der Schreibvorgang immer in der führenden Region verarbeitet. und anschließend zurück an die nicht führende Region gesendet. Daher werden Lese-Schreib-Transaktionen aus einer Region führen, die keine führende Lösung ist, erfordern mehrere Umwege zum Führenden. für das Replikat.

Leader-aware Routing ist ein Mechanismus, der die Latenz bei Lese-/Schreibvorgängen verbessert durch intelligentes Routing. Wenn die Führungsebene bekannt ist ist das Routing aktiviert, auch wenn der Schreibvorgang nicht aus der führenden Region stammt. werden die Anfragen zur Sitzungserstellung an die führende Region weitergeleitet, Spanner Front End (SpanFE) mit der führenden Region. Diese Route Der Mechanismus verbessert die Latenz für Lese-Schreib-Transaktionen, indem er die Anzahl der Netzwerk-Roundtrips zwischen der Region erforderlich sind, in der der Client Anwendung) und die führende Region auf zwei.

Screenshot eines Spanner-Routings mit aktiviertem Leader-aware-Routing Abbildung 1. Beispiel für ein Spanner-Routing mit aktiviertem Leader-aware-Routing

Wenn das Leader-spezifische Routing deaktiviert ist, leitet die Clientanwendung zuerst weiter Die Anfrage an einen SpanFE-Dienst in der Region der Clientanwendung (keine führende Region). Dann erstellen Sie aus dem SpanFE in der Region der Clientanwendung drei oder mehr Umläufe an den Spanner-Server durchgeführt werden. (SpanServer) in der führenden Region, um den Schreibvorgang festzuschreiben, wodurch die Latenz erhöht wird. Diese zur Unterstützung sekundärer Indexe sind zusätzliche Umläufe erforderlich, Einschränkung prüft und liest Ihre Schreibvorgänge.

Screenshot-Spanner-Routing mit deaktiviertem Leader-aware-Routing Abbildung 2. Beispiel für ein Spanner-Routing mit deaktiviertem Leader-aware-Routing

Anwendungsfälle

Die Verwendung der Leader-gestützten Weiterleitung hat für folgende Anwendungsfälle Vorteile: durch niedrigere Latenz:

  • Bulk-Aktualisierungen: Dataflow-Importe ausführen oder Hintergrund ausführen Änderungen (z. B. Batch-DMLs) aus einer Region, die keine führende Lösung ist.
  • Notfalltoleranz und erhöhte Verfügbarkeit: Client bereitstellen in führenden und nicht führenden Regionen anwenden, um regionale während Schreibvorgänge aus nicht führenden Regionen initiiert werden.
  • Globale Anwendung: Clientanwendungen global bereitstellen mit weit verteilten regionalen Standorten, die Daten bereitstellen.

Beschränkungen

Wenn Ihre Clientanwendung außerhalb der führenden Region bereitgestellt wird und Sie Werte schreiben, ohne die Daten zu lesen ("blind Write"), kann es zu Latenzen kommen, wenn die Leader-spezifische Weiterleitung aktiviert ist. Denn wenn die Führungskraft Routing ist aktiviert, es gibt zwei interregionale Umläufe (beginTransaction). und der commit-Anfrage) zwischen der Kundenanwendung in der nicht führenden Rolle und der SpanFE in der führenden Region. Mit der Leader-Erkennung deaktiviert, Schreibvorgänge ohne Lesevorgänge erfordern nur einen interregionalen Umlauf für die commit-Anfrage (beginTransaction wird im lokalen SpanFE verarbeitet). Für Wenn Sie beispielsweise Dateidaten im Bulk in eine neu erstellte Tabelle laden, werden die Transaktionen Es ist unwahrscheinlich, dass Daten aus der Tabelle gelesen werden. Wenn Sie häufig einen Commit für Schreibvorgänge ausführen Vorgänge ausführen, ohne sie in der Anwendung zu lesen, die richtungsweisende Routenführung deaktiviert. Weitere Informationen finden Sie unter Erkennung des Leaders deaktivieren

Führende Routenplanung verwenden

Leader-aware-Routing ist im Spanner-Client standardmäßig aktiviert Bibliotheken.

Wir empfehlen, Ihre Lese-/Schreibanfragen mit Leader-fähigem Routing zu verarbeiten aktiviert. Sie können sie deaktivieren, um Leistungsunterschiede zu vergleichen.

Führende Routenführung aktivieren

Sie können die Spanner-Clientbibliotheken verwenden, um die Leader-Erkennung zu aktivieren manuell umzustellen.

C++

Verwenden Sie den RouteToLeaderOption. Struktur zur Konfiguration Ihrer Clientanwendung mit Leader-sensitivem Routing aktiviert:

void RouteToLeaderOption(std::string const& project_id, std::string const& instance_id,
              std::string const& database_id) {
namespace spanner = ::google::cloud::spanner;

// Create a client with RouteToLeaderOption enabled.
auto client = spanner::Client(
  spanner::MakeConnection(
      spanner::Database(project_id, instance_id, database_id)),
  google::cloud::Options{}.set<spanner::RouteToLeaderOption>(
      spanner::true));

C#

EnableLeaderRouting verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;

Go

ClientConfig verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

type ClientConfig struct {
    // DisableRouteToLeader specifies if all the requests of type read-write
    // and PDML need to be routed to the leader region.
    // Default: false
    DisableRouteToLeader false
}

Java

SpannerOptions.Builder verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";

Node.js

SpannerOptions verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});

PHP

routeToLeader verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;

$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);

Python

route_to_leader_enabled verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

Ruby

self.new verwenden So konfigurieren Sie Ihre Clientanwendung mit aktiviertem Leader-Aware Routing:

def self.new(project_id: nil, credentials: nil, scope: nil, timeout: nil,
     endpoint: nil, project: nil, keyfile: nil, emulator_host: nil,
    lib_name: nil, lib_version: nil, enable_leader_aware_routing: true) ->
    Google::Cloud::Spanner::Project

Routing auf Führungsebene deaktivieren

Mithilfe der Spanner-Clientbibliotheken können Sie die Leader-Erkennung deaktivieren Routenplanung.

C++

Verwenden Sie den RouteToLeaderOption. Struktur zur Konfiguration Ihrer Clientanwendung mit Leader-sensitivem Routing Deaktiviert:

void RouteToLeaderOption(std::string const& project_id, std::string const& instance_id,
              std::string const& database_id) {
namespace spanner = ::google::cloud::spanner;

// Create a client with RouteToLeaderOption disabled.
auto client = spanner::Client(
  spanner::MakeConnection(
      spanner::Database(project_id, instance_id, database_id)),
  google::cloud::Options{}.set<spanner::RouteToLeaderOption>(
      spanner::false));

C#

EnableLeaderRouting verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;

Go

ClientConfig verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

type ClientConfig struct {
    // DisableRouteToLeader specifies if all the requests of type read-write
    // and PDML need to be routed to the leader region.
    // Default: false
    DisableRouteToLeader true
}

Java

SpannerOptions.Builder verwenden Zum Erstellen einer Verbindung zu einer Spanner-Datenbank mit Leader Aware-Routing deaktiviert:

SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";

Node.js

SpannerOptions verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});

PHP

routeToLeader verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;

$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);

Python

route_to_leader_enabled verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

Ruby

self.new verwenden So konfigurieren Sie Ihre Client-Anwendung mit deaktiviertem Leader-sensitivem Routing:

def self.new(project_id: nil, credentials: nil, scope: nil, timeout: nil,
     endpoint: nil, project: nil, keyfile: nil, emulator_host: nil,
    lib_name: nil, lib_version: nil, enable_leader_aware_routing: false) ->
    Google::Cloud::Spanner::Project

Nächste Schritte