Nesta página, descrevemos o roteamento com reconhecimento de líder no Spanner e como usá-lo. O Spanner usa roteamento com reconhecimento de líder para rotear dinamicamente transações de leitura/gravação em configurações de instâncias multirregionais para reduzir a latência e melhorar o desempenho do banco de dados. O roteamento com reconhecimento de líder é ativado por padrão.
Roteamento do Spanner para transações de leitura e gravação
O Spanner replica os dados para oferecer mais disponibilidade de dados e localidade geográfica. Nas configurações de instâncias multirregionais do Spanner, uma região na configuração da instância multirregional é designada como a região líder e contém as réplicas líderes do banco de dados. Quando você usa uma configuração de instância multirregional e o cliente emite uma transação de leitura/gravação para o banco de dados a partir de uma região não líder, a gravação é sempre processada na região líder e enviada de volta para a região não líder. Portanto, as transações de leitura/gravação confirmadas em uma região não líder exigem várias idas e voltas para a réplica líder para serem confirmadas.
O roteamento com reconhecimento de líder é um mecanismo que melhora a latência das transações de leitura/gravação roteando essas transações de maneira inteligente. Se o roteamento com reconhecimento de líder estiver ativado, mesmo que a gravação não se origine da região líder, as solicitações de criação de sessão serão roteadas para a região líder para alinhar o Spanner Front End (SpanFE) com a região líder. Esse mecanismo de roteamento melhora a latência das transações de leitura/gravação reduzindo para dois o número de viagens de ida e volta da rede necessárias entre a região não líder (onde o aplicativo cliente está localizado) e a região líder.
Figura 1. Exemplo de roteamento do Spanner com roteamento com reconhecimento de líder ativado.
Se o roteamento com reconhecimento de líder estiver desativado, o aplicativo cliente primeiro encaminhará a solicitação para um serviço SpanFE dentro da região do aplicativo cliente (região não líder). Em seguida, do SpanFE na região do aplicativo cliente, três ou mais viagens de ida e volta são feitas para o servidor do Spanner (SpanServer) na região líder para confirmar a gravação, aumentando a latência. Essas viagens de ida e volta adicionais são necessárias para dar suporte a índices secundários, verificações de restrição e ler suas gravações.
Figura 2. Exemplo de roteamento do Spanner com roteamento com reconhecimento de líder desativado.
Casos de uso
Como resultado do uso do roteamento com reconhecimento de líder, os seguintes casos de uso se beneficiam de uma latência menor:
- Atualizações em massa: execução de importações do Dataflow ou alterações em segundo plano (por exemplo, DMLs em lote) de uma região não líder.
- Tolerância a desastres e maior disponibilidade: implante aplicativos clientes nas regiões líder e não líder para tolerar interrupções regionais ao iniciar gravações em regiões não líderes.
- Aplicativo global: implantação de aplicativos clientes globalmente com locais de região generalizados que confirmam dados.
Limitações
Se o aplicativo cliente for implantado fora da região líder e você
gravar valores sem ler os dados ("gravações cegas"),poderá observar a regressão
de latência se o roteamento com reconhecimento de líder estiver ativado. Isso ocorre porque, quando o roteamento
com reconhecimento de líder está ativado, há duas viagens de ida e volta entre regiões (beginTransaction
e commit
) entre o aplicativo cliente na região não líder
e o SpanFE na região líder. No entanto, com o roteamento com reconhecimento de líder desativado, as gravações sem leituras exigem apenas uma ida e volta entre regiões para a solicitação commit
(beginTransaction
é processado no SpanFE local). Por exemplo, se você carregar em massa os dados do arquivo em uma tabela recém-criada, é improvável que as transações leiam os dados da tabela. Se você confirma as operações de gravação com frequência sem ler no aplicativo, desative o roteamento com reconhecimento de líder. Para mais informações, consulte
Desativar o roteamento com reconhecimento de líder.
Use roteamento com reconhecimento de líderes
O roteamento com reconhecimento de líder é ativado por padrão nas bibliotecas de cliente do Spanner.
Recomendamos processar suas solicitações de leitura/gravação com o roteamento com reconhecimento de líder ativado. É possível desativá-la para comparar diferenças de desempenho.
Ativar o roteamento com reconhecimento de líderes
É possível usar as bibliotecas de cliente do Spanner para ativar manualmente o roteamento com reconhecimento de líder.
C++
Use a estrutura RouteToLeaderOption
para configurar o aplicativo cliente com o roteamento com reconhecimento de líder
ativado:
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#
Use EnableLeaderRouting
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Use ClientConfig
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
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
Use SpannerOptions.Builder
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Use SpannerOptions
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});
PHP
Use routeToLeader
para configurar o aplicativo cliente com o roteamento sensível ao líder ativado:
// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);
Python
Use route_to_leader_enabled
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Use self.new
para configurar seu aplicativo cliente com o roteamento sensível ao líder ativado:
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
Desativar o roteamento com reconhecimento de líderes
É possível usar as bibliotecas de cliente do Spanner para desativar o roteamento com reconhecimento de líder.
C++
Use a estrutura RouteToLeaderOption
para configurar o aplicativo cliente com o roteamento com reconhecimento de líder
desativado:
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#
Use EnableLeaderRouting
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Use ClientConfig
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
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
Use SpannerOptions.Builder
para criar uma conexão com um banco de dados do Spanner com o roteamento com reconhecimento de líder desativado:
SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Use SpannerOptions
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});
PHP
Use routeToLeader
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);
Python
Use route_to_leader_enabled
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Use self.new
para configurar seu aplicativo cliente com o roteamento sensível ao líder desativado:
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
A seguir
- Saiba mais sobre as configurações regionais e multirregionais.
- Saiba mais sobre replicação.
- Saiba como modificar a região líder de um banco de dados.