Auf dieser Seite wird das leiterbasierte 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 die Datenverfügbarkeit und die geografische Nähe zu verbessern. In biregionalen und multiregionalen Instanzkonfigurationen von Spanner wird eine Region als führende Region festgelegt. Sie enthält die Leader-Replikate der Datenbank. Wenn Sie eine Instanzkonfiguration mit zwei oder mehr Regionen verwenden und Ihr Client eine Lese-/Schreibtransaktion von einer nicht führenden Region an Ihre Datenbank ausführt, wird der Schreibvorgang immer in der führenden Region verarbeitet und dann an die nicht führende Region zurückgesendet. Daher erfordern Lese-Schreib-Transaktionen, die von einer anderen Region als der Leader-Region ausgeführt werden, mehrere Hin- und Rückwege zum Leader-Replikat, um erfolgreich ausgeführt zu werden.
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.
Abbildung 1. Beispiel für ein Spanner-Routing mit aktiviertem Leader-aware-Routing
Wenn das führerbasierte Routing 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 Region der Clientanwendung drei oder mehr Rundreisen zum Spanner-Server (SpanServer) in der Leitregion durchgeführt, um den Schreibvorgang zu bestätigen. Dies erhöht die Latenz. Diese zur Unterstützung sekundärer Indexe sind zusätzliche Umläufe erforderlich, Einschränkung prüft und liest Ihre Schreibvorgänge.
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-Updates: Ausführen von Dataflow-Importen oder Hintergrundänderungen (z. B. Batch-DMLs) aus einer anderen Region als der Hauptregion.
- 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. Das liegt daran, dass bei aktiviertem führerbasiertem Routing zwei regionenübergreifende Roundtrips (beginTransaction
- und commit
-Anfrage) zwischen der Clientanwendung in der nicht führenden Region und der SpanFE in der führenden Region stattfinden. 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 Leiter-orientiertes Routing 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 die Struktur RouteToLeaderOption
, um Ihre Clientanwendung mit aktiviertem führerbasiertem Routing 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#
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
Verwenden Sie ClientConfig
, um Ihre Clientanwendung mit aktiviertem führerbasiertem Routing 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 führerbasiertem Routing zu konfigurieren:
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
Mit den 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#
Verwenden Sie EnableLeaderRouting
, um Ihre Clientanwendung mit deaktiviertem führerbasiertem Routing zu konfigurieren:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
ClientConfig
verwenden
So konfigurieren Sie Ihre Clientanwendung 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
Verwenden Sie SpannerOptions.Builder
, um eine Verbindung zu einer Spanner-Datenbank mit deaktiviertem führungsbewussten Routing herzustellen:
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 führerbasiertem Routing zu konfigurieren:
// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});
PHP
routeToLeader
verwenden
So konfigurieren Sie Ihre Clientanwendung 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 Clientanwendung 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 Clientanwendung 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
- Weitere Informationen zu regionalen, Dual-Region- und Multi-Region-Konfigurationen
- Replikation
- Weitere Informationen zum Ändern der führenden Region einer Datenbank