Cette page décrit le routage tenant compte du leader dans Spanner et son utilisation. Spanner utilise le routage basé sur les leaders pour acheminer de manière dynamique les opérations de lecture/écriture. des transactions dans des configurations d'instances birégionales et multirégionales et améliorer les performances de votre base de données. Le routage basé sur les leaders est est activée par défaut.
Routage Spanner pour les transactions en lecture/écriture
Spanner réplique les données pour fournir une disponibilité et une localité géographique supplémentaires. Dans Spanner des configurations d'instances birégionales et multirégionales, une région dans la configuration d'instance birégionale et multirégionale désignée comme région principale et contient les instances répliquées principales de la base de données. Lorsque vous utilisez une instance birégionale ou multirégionale configuration et votre client émet une transaction en lecture-écriture dans votre base de données à partir d'une région non principale, l'écriture est toujours traitée dans la région principale puis renvoyé à la région non principale. Par conséquent, les transactions en lecture/écriture les engagements depuis une région non principale nécessitent plusieurs allers-retours vers la région principale. le commit de l'instance répliquée avec succès.
Le routage basé sur les leaders est un mécanisme qui améliore la latence des opérations de lecture/écriture en les acheminant intelligemment. Si les dirigeants sont sensibles le routage est activé, même si l'écriture ne provient pas de la région principale, les requêtes de création de session sont acheminées vers la région principale Spanner Front End (SpanFE) avec la région principale. Ce routage améliore la latence des transactions en lecture-écriture en réduisant le nombre d'aller-retours réseau requis entre la région non principale (où le client où se trouve votre application) et la région principale sur 2.
Figure 1. Exemple de routage Spanner avec le routage basé sur les dirigeants activé.
Si le routage tenant compte du leader est désactivé, l'application cliente achemine d'abord la requête vers un service SpanFE dans la région de l'application cliente (région non leader). Ensuite, à partir du SpanFE dans la région de l'application cliente, Trois allers-retours ou plus sont effectués vers le serveur Spanner (SpanServer) dans la région principale pour valider l'écriture, ce qui augmente la latence. Ces des allers-retours supplémentaires sont nécessaires pour prendre en charge les index secondaires, les vérifications et la lecture de vos écritures.
Figure 2 Exemple de routage Spanner avec le routage tenant compte du leader désactivé.
Cas d'utilisation
Grâce au routage basé sur les responsables, les cas d'utilisation suivants présentent les avantages suivants : grâce à une latence plus faible:
- Mises à jour groupées: exécution d'importations Dataflow ou d'exécution en arrière-plan modifications (par exemple, LMD par lot) provenant d'une région non principale.
- Tolérance aux sinistres et disponibilité accrue: déploiement du client des applications dans les régions responsables et non principales afin de tolérer des pannes tout en lançant des écritures depuis des régions non principales.
- Application globale: déploiement d'applications clientes à l'échelle mondiale avec des emplacements régionaux étendus qui valident des données.
Limites
Si votre application cliente est déployée en dehors de la région principale et que vous
des valeurs sans lire les données ("écritures aveugles"),vous pouvez observer une latence
ou une régression automatique
si le routage basé sur les responsables est activé. En effet, lorsque le routage tenant compte du leader est activé, il existe deux aller-retour interrégionaux (beginTransaction
et la requête commit
) entre l'application cliente dans la région non leader et le SpanFE dans la région leader. Toutefois, avec le routage basé sur les responsables,
désactivée, les écritures sans lecture ne nécessitent qu'un aller-retour interrégional pour
Requête commit
(beginTransaction
est traité dans le délai local). Pour
Par exemple, si vous chargez des données de fichier de façon groupée dans une nouvelle table, les transactions
sont peu susceptibles de lire
les données de la table. Si vous validez souvent des écritures
sans le lire dans votre application, vous pouvez envisager
et désactive le routage basé sur les responsables. Pour en savoir plus, consultez
Désactivez le routage basé sur les responsables.
Utiliser le routage basé sur les responsables
Le routage basé sur les leaders est activé par défaut dans le client Spanner bibliothèques.
Nous vous recommandons de traiter vos requêtes en lecture/écriture avec un routage basé sur les leaders est activé. Vous pouvez la désactiver pour comparer les différences de performances.
Activer le routage basé sur les dirigeants
Vous pouvez utiliser les bibliothèques clientes Spanner pour activer le routage manuellement.
C++
Utilisez le RouteToLeaderOption
pour configurer votre application cliente avec un routage basé sur les responsables
activé:
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#
Utiliser EnableLeaderRouting
pour configurer votre application cliente avec le routage basé sur les responsables activé:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Utiliser ClientConfig
pour configurer votre application cliente avec le routage basé sur les responsables activé:
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
Utiliser SpannerOptions.Builder
pour configurer votre application cliente avec le routage basé sur les responsables activé:
SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Utilisez SpannerOptions
pour configurer votre application cliente avec le routage tenant compte du leader activé :
// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});
PHP
Utiliser routeToLeader
pour configurer votre application cliente avec le routage basé sur les responsables activé:
// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);
Python
Utiliser route_to_leader_enabled
pour configurer votre application cliente avec le routage basé sur les responsables activé:
spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Utiliser self.new
pour configurer votre application cliente avec le routage basé sur les responsables activé:
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
Désactiver le routage basé sur les leaders
Vous pouvez utiliser les bibliothèques clientes Spanner pour désactiver le routage tenant compte du leader.
C++
Utilisez le RouteToLeaderOption
pour configurer votre application cliente avec un routage basé sur les responsables
désactivées:
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#
Utiliser EnableLeaderRouting
pour configurer votre application cliente en désactivant le routage basé sur les responsables:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Utiliser ClientConfig
pour configurer votre application cliente en désactivant le routage basé sur les responsables:
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
Utiliser SpannerOptions.Builder
pour créer une connexion à une base de données Spanner avec une variante optimale
le routage compatible est désactivé:
SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Utiliser SpannerOptions
pour configurer votre application cliente en désactivant le routage basé sur les responsables:
// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});
PHP
Utiliser routeToLeader
pour configurer votre application cliente en désactivant le routage basé sur les responsables:
// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);
Python
Utilisez route_to_leader_enabled
pour configurer votre application cliente avec le routage tenant compte du leader désactivé :
spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Utiliser self.new
pour configurer votre application cliente en désactivant le routage basé sur les responsables:
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
Étape suivante
- Découvrez les configurations régionales, birégionales et multirégionales.
- Apprenez-en plus sur la réplication.
- Découvrez comment modifier la région principale d'une base de données.