Esta página descreve o roteamento ciente do líder no Spanner e como usá-lo. O Spanner usa o roteamento com reconhecimento de líder para rotear dinamicamente transações de leitura e gravação em configurações de instâncias biregionais e multirregionais para reduzir a latência e melhorar o desempenho no seu banco de dados. O roteamento baseado no líder é ativada por padrão.
Roteamento do Spanner para transações de leitura e gravação
O Spanner replica os dados para fornecer mais dados disponibilidade e localidade geográfica. No Spanner configurações de instâncias birregionais e multirregionais, uma região na configuração de instância birregional e multirregional é designada como região líder e contém as réplicas líderes do banco de dados. Quando você usa uma instância birregional ou multirregional e seu cliente emite uma transação de leitura/gravação no seu banco de dados de uma região não líder, a gravação é sempre processada na região líder e enviada de volta à região não líder. Portanto, as transações de leitura e gravação comprometidas em uma região não líder exigem várias viagens de ida e volta ao líder réplica seja confirmada com sucesso.
O roteamento ciente do líder é um mecanismo que melhora a latência das transações de leitura e gravação por meio de um roteamento inteligente. Se o roteamento com reconhecimento de líder estiver ativado, mesmo que a gravação não seja originada na 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. Este roteamento mecanismo melhora a latência para transações de leitura/gravação reduzindo o número de viagens de ida e volta da rede necessárias entre a região não líder (quando o cliente o aplicativo está localizado) e a região líder para dois.
Figura 1. Exemplo de roteamento do Spanner com o roteamento ciente do líder ativado.
Se o roteamento com reconhecimento de líder estiver desativado, o aplicativo cliente encaminha primeiro a solicitação para um serviço SpanFE na região do aplicativo cliente (região não líder). Em seguida, do SpanFE na região do aplicativo cliente, são feitas três ou mais viagens de ida e volta 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 oferecer suporte a índices secundários, verificações de restrições e leitura de gravações.
Figura 2. Exemplo de roteamento do Spanner com o roteamento com reconhecimento de líder desativado.
Casos de uso
Como resultado do uso do roteamento baseado no líder, os casos de uso a seguir beneficiam de latência menor:
- Atualizações em massa: como executar importações do Dataflow ou execução em segundo plano mudanças, como DMLs em lote de uma região não líder.
- Tolerância a desastres e maior disponibilidade: implantação de cliente aplicativos nas regiões líder e não líder para tolerar as mudanças falhas temporárias ao iniciar gravações de regiões não líderes.
- Aplicativo global: como implantar aplicativos clientes globalmente com locais regionais generalizados que fazem commit de 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 uma regressão
de latência se o roteamento ciente do líder estiver ativado. Isso ocorre porque, quando o líder reconhece
o roteamento estiver ativado, há duas viagens de ida e volta entre regiões (beginTransaction
e a solicitação commit
) entre o aplicativo cliente na rede não líder
e "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
é processada no SpanFE local). Por
exemplo, se você carregar dados de arquivos em massa em uma tabela recém-criada, é improvável que as transações
leiam dados da tabela. Se você faz commit de gravações com frequência
operações sem lê-los no aplicativo, convém considerar
e desativar o roteamento com reconhecimento de líder. Para mais informações, consulte
Desativar o roteamento ciente do líder.
Usar o roteamento com reconhecimento de líder
O roteamento com reconhecimento de líder é ativado por padrão no cliente Spanner bibliotecas.
Recomendamos processar suas solicitações de leitura/gravação com roteamento com reconhecimento de líder ativado. Você pode desativar esse recurso para comparar as diferenças de performance.
Ativar roteamento com reconhecimento de líder
Use as bibliotecas de cliente do Spanner para permitir reconhecimento de líderes roteamento de forma manual.
C++
Usar o RouteToLeaderOption
para configurar seu aplicativo cliente com roteamento baseado em 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 o aplicativo cliente com o roteamento ciente do líder ativado:
// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;
Go
Usar ClientConfig
para configurar seu aplicativo cliente com o roteamento com reconhecimento de 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 o aplicativo cliente com o roteamento ciente do líder ativado:
SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Usar SpannerOptions
para configurar seu aplicativo cliente com o roteamento com reconhecimento de 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 ciente do líder ativado:
// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);
Python
Usar route_to_leader_enabled
para configurar seu aplicativo cliente com o roteamento com reconhecimento de líder ativado:
spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Usar self.new
para configurar seu aplicativo cliente com o roteamento com reconhecimento de 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 ciente do líder
É possível usar as bibliotecas de cliente do Spanner para desativar o roteamento com líder.
C++
Use a estrutura RouteToLeaderOption
para configurar o aplicativo cliente com o roteamento ciente do 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#
Usar EnableLeaderRouting
para configurar seu aplicativo cliente com o roteamento com reconhecimento de líder desativado:
// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;
Go
Use ClientConfig
para configurar o aplicativo cliente com o roteamento ciente do 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
Usar SpannerOptions.Builder
para criar uma conexão com um banco de dados do Spanner
roteamento com reconhecimento desativado:
SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";
Node.js
Usar SpannerOptions
para configurar seu aplicativo cliente com o roteamento com reconhecimento de líder desativado:
// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});
PHP
Use routeToLeader
para configurar o aplicativo cliente com o roteamento ciente do líder desativado:
// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;
$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);
Python
Usar route_to_leader_enabled
para configurar seu aplicativo cliente com o roteamento com reconhecimento de líder desativado:
spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)
Ruby
Usar self.new
para configurar seu aplicativo cliente com o roteamento com reconhecimento de 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 os locais regionais, birregionais e multirregionais personalizadas.
- Saiba mais sobre a replicação.
- Saiba como Modificar a região líder de um banco de dados.