Auf dieser Seite wird das Leader-fähige Routing in Cloud Spanner und seine Verwendung beschrieben. Cloud Spanner verwendet das Leader-fähige Routing, um Lese-Schreib-Transaktionen in biregionalen und multiregionalen Instanzkonfigurationen dynamisch weiterzuleiten, um die Latenz zu verringern und die Leistung in Ihrer Datenbank zu verbessern. Das Leader-fähige Routing ist standardmäßig aktiviert.
Cloud Spanner-Routing für Lese-Schreib-Transaktionen
Cloud Spanner repliziert Daten, um die Datenverfügbarkeit und geografische Nähe zu erhöhen. In biregionalen und multiregionalen Instanzkonfigurationen von Cloud Spanner ist eine Region in der biregionalen und multiregionalen Instanzkonfiguration als führende Region festgelegt. Sie enthält die Leader-Replikate der Datenbank. Wenn Sie eine biregionale oder multiregionale Instanzkonfiguration verwenden und Ihr Client eine Lese-Schreib-Transaktion aus einer Nicht-führenden Region an Ihre Datenbank sendet, wird der Schreibvorgang immer in der führenden Region verarbeitet und dann an die Nicht-führende Region zurückgesendet. Daher sind für Lese-Schreib-Transaktionen, die aus einer Nicht-Leader-Region übertragen werden, mehrere Roundtrips zum Leader-Replikat erforderlich, damit sie erfolgreich übertragen werden können.
Das Leader-fähige Routing ist ein Mechanismus, der die Latenz für Lese-Schreib-Transaktionen durch intelligentes Routing dieser Transaktionen verbessert. Wenn das Leader-fähige Routing aktiviert ist, werden die Anfragen zur Sitzungserstellung an die führende Region weitergeleitet, auch wenn der Schreibvorgang nicht aus der führenden Region stammt. So wird das Cloud Spanner API-Frontend an die führende Region angepasst. Dieser Routingmechanismus verbessert die Latenz für Lese-Schreib-Transaktionen, indem die Anzahl der erforderlichen Netzwerk-Roundtrips zwischen der Nicht-Leader-Region (in der sich die Clientanwendung befindet) und der Leader-Region auf zwei reduziert wird.
Abbildung 1 Beispiel für das Cloud Spanner-Routing mit aktiviertem Leader-fähigem Routing.
Wenn das Leader-fähige Routing deaktiviert ist, leitet die Clientanwendung die Anfrage zuerst an einen Cloud Spanner API-Frontend-Dienst in der Region der Clientanwendung (Nicht-Leader-Region) weiter. Anschließend werden vom Spanner API-Frontend in der Region der Clientanwendung drei oder mehr Roundtrips zum Spanner-Server (SpanServer) in der führenden Region ausgeführt, um den Schreibvorgang zu übertragen, was die Latenz erhöht. Diese zusätzlichen Roundtrips sind erforderlich, um sekundäre Indexe, Einschränkungsprüfungen und das Lesen Ihrer Schreibvorgänge zu unterstützen.
Abbildung 2. Beispiel für das Cloud Spanner-Routing mit deaktiviertem Leader-fähigem Routing.
Anwendungsfälle
Durch die Verwendung des Leader-fähigen Routings profitieren die folgenden Anwendungsfälle von einer geringeren Latenz:
- Massenaktualisierungen: Dataflow-Importe ausführen oder Hintergrund änderungen (z. B. Batch-DMLs) aus einer Nicht-Leader-Region ausführen.
- Notfallwiederherstellung und erhöhte Verfügbarkeit: Clientanwendungen sowohl in Leader- als auch in Nicht-Leader-Regionen bereitstellen, um regionale Ausfälle zu tolerieren und gleichzeitig Schreibvorgänge aus Nicht-Leader-Regionen zu initiieren.
- Globale Anwendung: Clientanwendungen weltweit mit weit verbreiteten Regionen bereitstellen, die Daten übertragen.
Beschränkungen
Wenn Ihre Clientanwendung außerhalb der führenden Region bereitgestellt wird und Sie Werte schreiben, ohne die Daten zu lesen („Blind Writes“), kann es zu einer Latenzregression kommen, wenn das Leader-fähige Routing aktiviert ist. Das liegt daran, dass bei aktiviertem Leader-fähigem Routing zwei regionsübergreifende Roundtrips (beginTransaction und die commit-Anfrage) zwischen der Clientanwendung in der Nicht-Leader-Region und dem Cloud Spanner API-Frontend in der Leader-Region stattfinden. Wenn das Leader-fähige Routing jedoch deaktiviert ist, sind für Schreibvorgänge ohne Lesevorgänge nur ein regionsübergreifender Hin- und Rückflug für die commit-Anfrage erforderlich (beginTransaction wird im lokalen Cloud Spanner API-Frontend verarbeitet). Wenn Sie beispielsweise Daten in eine neu erstellte Tabelle im Bulk-Verfahren laden, lesen die Transaktionen wahrscheinlich keine Daten aus der Tabelle. Wenn Sie häufig Schreibvorgänge übertragen, ohne sie in Ihrer Anwendung zu lesen, sollten Sie das Leader-fähige Routing deaktivieren. Weitere Informationen finden Sie unter
Leader-fähiges Routing deaktivieren.
Leader-fähiges Routing verwenden
Das Leader-fähige Routing ist in den Cloud Spanner-Clientbibliotheken standardmäßig aktiviert.
Wir empfehlen, Ihre Lese-Schreib-Anfragen mit aktiviertem Leader-fähigem Routing zu verarbeiten. Sie können es deaktivieren, um Leistungsunterschiede zu vergleichen.
Leader-fähiges Routing aktivieren
Sie können das Leader-fähige Routing manuell mit den Cloud Spanner-Clientbibliotheken aktivieren.
C++
Verwenden Sie die RouteToLeaderOption
Struktur, um Ihre Clientanwendung mit aktiviertem Leader-fähigem 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#
Verwenden Sie EnableLeaderRouting
, um Ihre Clientanwendung mit aktiviertem Leader-fähigem Routing zu konfigurieren:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Verwenden Sie ClientConfig
um Ihre Clientanwendung mit aktiviertem Leader-fähigem 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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
Leader-fähiges Routing deaktivieren
Sie können das Leader-fähige Routing mit den Cloud Spanner-Clientbibliotheken deaktivieren.
C++
Verwenden Sie die RouteToLeaderOption
Struktur, um Ihre Clientanwendung mit deaktiviertem Leader-fähigem 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 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 Leader-fähigem Routing zu konfigurieren:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Verwenden Sie ClientConfig
um Ihre Clientanwendung mit deaktiviertem Leader-fähigem 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 true
}
Java
Verwenden Sie SpannerOptions.Builder
, um eine Verbindung zu einer Cloud Spanner-Datenbank mit deaktiviertem Leader
-fähigem 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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 Leader-fähigem Routing 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
- Informationen zu regionalen, biregionalen und multiregionalen Konfigurationen.
- Informationen zur Replikation
- Informationen zum Ändern der führenden Region einer Datenbank.