Leader-orientiertes Routing

Auf dieser Seite wird das Routing, das auf Leader ausgerichtet ist, in Spanner beschrieben und erfahren, wie Sie es verwenden. Spanner verwendet ein Leader-fähiges Routing, um Lese-/Schreibtransaktionen in multiregionalen Instanzkonfigurationen dynamisch weiterzuleiten und so die Latenz zu reduzieren und die Leistung Ihrer Datenbank zu verbessern. Leader-Aware-Routing ist standardmäßig aktiviert.

Spanner-Routing für Lese-/Schreibtransaktionen

Spanner repliziert Daten, um zusätzliche Datenverfügbarkeit und geografische Lage zu bieten. In multiregionalen Instanzkonfigurationen von Spanner wird eine Region in der multiregionalen Instanzkonfiguration als Leader-Region festgelegt. Sie enthält die Leader-Replikate der Datenbank. Wenn Sie eine multiregionale Instanzkonfiguration verwenden und Ihr Client eine Lese-/Schreibtransaktion aus einer nicht führenden Region an Ihre Datenbank ausgibt, wird der Schreibvorgang immer in der führenden Region verarbeitet und dann zurück an die nicht führende Region gesendet. Daher erfordern Lese-/Schreibtransaktionen, für die ein Commit von einer Region, die nicht die führende Region umfasst, mehrere Umläufe zum Leader-Replikat erfordern, damit der Commit erfolgreich durchgeführt wird.

Leader-kompatibles Routing ist ein Mechanismus, der die Latenz für Lese-Schreib-Transaktionen durch intelligentes Routing dieser Transaktionen verbessert. Wenn das Routing nach Führungsposition aktiviert ist, werden die Anfragen zur Sitzungserstellung an die führende Region weitergeleitet, um das Spanner Front End (SpanFE) auf die führende Region abzustimmen, auch wenn der Schreibvorgang nicht aus der führenden Region stammt. Dieser Routingmechanismus verbessert die Latenz für Lese-/Schreibtransaktionen, da die Anzahl der Netzwerkumläufe zwischen der Region, in der sich die Clientanwendung befindet, und der führenden Region auf zwei reduziert werden.

Screenshot des Spanner-Routings mit aktiviertem Routing durch Leader-awareAbbildung 1. Beispiel für ein Spanner-Routing mit aktiviertem Routing durch Leader-aware.

Wenn das Routing nach Führungsebene deaktiviert ist, leitet die Clientanwendung die Anfrage zuerst an einen SpanFE-Dienst innerhalb der Region der Clientanwendung (nicht führende Region) weiter. Anschließend werden vom SpanFE in der Clientanwendungsregion drei oder mehr Umläufe zum Spanner-Server (SpanServer) in der führenden Region durchgeführt, um den Schreibvorgang festzuschreiben, wodurch die Latenz erhöht wird. Diese zusätzlichen Umläufe sind erforderlich, um sekundäre Indexe, Einschränkungsprüfungen und Lesevorgänge zu unterstützen.

Screenshot des Spanner-Routings mit deaktiviertem Leader-aware-RoutingAbbildung 2. Beispiel für ein Spanner-Routing mit deaktiviertem Routing durch Leader-aware.

Anwendungsfälle

Durch die Verwendung des Routings unter Berücksichtigung des Leaders wird in den folgenden Anwendungsfällen eine niedrigere Latenz erzielt:

  • Bulk-Aktualisierungen: Ausführen von Dataflow-Importen oder Ausführen von Hintergrundänderungen (z. B. Batch-DMLs) aus einer Region, die keine führende Region ist.
  • Notfalltoleranz und erhöhte Verfügbarkeit: Bereitstellung von Clientanwendungen in Leader- und Nicht-Leader-Regionen, um regionale Ausfälle zu tolerieren und gleichzeitig Schreibvorgänge aus nicht führenden Regionen zu initiieren.
  • Globale Anwendung: Clientanwendungen weltweit mit weit verteilten Standorten bereitstellen, die Daten übergeben.

Beschränkungen

Wenn Ihre Clientanwendung außerhalb der führenden Region bereitgestellt wird und Sie Werte schreiben, ohne die Daten zu lesen (blindische Schreibvorgänge), kann es bei aktiviertem Routing unter Berücksichtigung des Leaders zu einer Latenzreduktion kommen. Das liegt daran, dass bei Aktivierung des Routings auf Basis des Leaders zwei interregionale Umläufe (beginTransaction und die commit-Anfrage) zwischen der Clientanwendung in der Nicht-Leader-Region und dem SpanFE in der führenden Region erfolgen. Ist das Routing auf Leader-Ebene jedoch deaktiviert, erfordern Schreibvorgänge ohne Lesevorgänge nur einen interregionalen Umlauf für die commit-Anfrage (beginTransaction wird im lokalen SpanFE verarbeitet). Wenn Sie beispielsweise Dateidaten im Bulk in eine neu erstellte Tabelle laden, ist es unwahrscheinlich, dass die Transaktionen Daten aus der Tabelle lesen. Wenn Sie häufig Schreibvorgänge durchführen, ohne sie in Ihrer Anwendung zu lesen, sollten Sie das Routing nach Führungsebene möglicherweise deaktivieren. Weitere Informationen finden Sie unter Lead-basiertes Routing deaktivieren.

Führendes Routing verwenden

Leader-kompatibles Routing ist in den Spanner-Clientbibliotheken standardmäßig aktiviert.

Wir empfehlen, bei der Verarbeitung von Lese-/Schreibanfragen ein Routing mit Berücksichtigung des Leaders zu aktivieren. Sie können sie deaktivieren, um Leistungsunterschiede zu vergleichen.

Routing nach Führungsebene aktivieren

Sie können die Spanner-Clientbibliotheken verwenden, um das Routing unter Berücksichtigung des Leaders manuell zu aktivieren.

C++

Verwenden Sie die Struktur RouteToLeaderOption, um Ihre Clientanwendung mit aktiviertem Routing nach Führenden zu konfigurieren:

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#

Verwenden Sie EnableLeaderRouting, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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

Einfach loslegen (Go)

Verwenden Sie ClientConfig, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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

Verwenden Sie SpannerOptions.Builder, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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

Node.js

Verwenden Sie SpannerOptions, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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

PHP

Verwenden Sie routeToLeader, um Ihre Clientanwendung mit aktiviertem Routing nach Anbietern zu konfigurieren:

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

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

Python

Verwenden Sie route_to_leader_enabled, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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

Ruby

Verwenden Sie self.new, um Ihre Clientanwendung mit aktiviertem Routing nach Führungsebene zu konfigurieren:

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 nach führenden Anbietern deaktivieren

Sie können die Spanner-Clientbibliotheken verwenden, um das Routing unter Berücksichtigung des Leaders zu deaktivieren.

C++

Verwenden Sie die Struktur RouteToLeaderOption, um Ihre Clientanwendung mit deaktiviertem Routing nach führenden Anbietern zu konfigurieren:

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#

Verwenden Sie EnableLeaderRouting, um Ihre Clientanwendung mit deaktiviertem Routing nach Führung zu konfigurieren:

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

Einfach loslegen (Go)

Verwenden Sie ClientConfig, um Ihre Clientanwendung mit deaktiviertem Routing nach Führung zu konfigurieren:

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

Erstellen Sie mit SpannerOptions.Builder eine Verbindung zu einer Spanner-Datenbank, bei der das Leader-fähige Routing deaktiviert ist:

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

Node.js

Verwenden Sie SpannerOptions, um Ihre Clientanwendung mit deaktiviertem Routing nach Führung zu konfigurieren:

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

PHP

Verwenden Sie routeToLeader, um Ihre Clientanwendung mit deaktiviertem Routing unter Berücksichtigung des Leaders zu konfigurieren:

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

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

Python

Verwenden Sie route_to_leader_enabled, um Ihre Clientanwendung mit deaktiviertem Routing nach Führung zu konfigurieren:

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

Ruby

Verwenden Sie self.new, um Ihre Clientanwendung mit deaktiviertem Routing nach Führung zu konfigurieren:

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