Encaminhamento com reconhecimento do líder

Esta página descreve o encaminhamento com reconhecimento do líder no Spanner e como usá-lo. O Spanner usa o encaminhamento com reconhecimento do líder para encaminhar dinamicamente transações de leitura/escrita em configurações de instâncias de duas regiões e várias regiões para reduzir a latência e melhorar o desempenho na sua base de dados. O encaminhamento com reconhecimento de líder está ativado por predefinição.

Encaminhamento do Spanner para transações de leitura/escrita

O Spanner replica os dados para oferecer disponibilidade de dados adicional e localidade geográfica. Nas configurações de instâncias de duas regiões e de várias regiões do Spanner, uma região na configuração de instâncias de duas regiões e de várias regiões é designada como a região principal e contém as réplicas principais da base de dados. Quando usa uma configuração de instância de região dupla ou multirregião e o seu cliente emite uma transação de leitura/escrita para a sua base de dados a partir de uma região não principal, a escrita é sempre processada na região principal e, em seguida, enviada de volta para a região não principal. Por conseguinte, as transações de leitura/escrita confirmadas a partir de uma região não principal requerem várias viagens de ida e volta à réplica principal para serem confirmadas com êxito.

O encaminhamento com reconhecimento do líder é um mecanismo que melhora a latência das transações de leitura/escrita encaminhando-as de forma inteligente. Se o encaminhamento com reconhecimento do líder estiver ativado, mesmo que a gravação não tenha origem na região líder, os pedidos de criação de sessões são encaminhados para a região líder para alinhar o front-end da API Spanner com a região líder. Este mecanismo de encaminhamento melhora a latência das transações de leitura/escrita reduzindo o número de viagens de ida e volta da rede necessárias entre a região não principal (onde a aplicação cliente está localizada) e a região principal para duas.

Captura de ecrã do encaminhamento do Spanner com o encaminhamento com reconhecimento do líder ativado. Figura 1. Exemplo de encaminhamento do Spanner com o encaminhamento com reconhecimento do líder ativado.

Se o encaminhamento com reconhecimento do líder estiver desativado, a aplicação cliente encaminha primeiro o pedido para um serviço de front-end da API Spanner na região da aplicação cliente (região não líder). Em seguida, a partir do frontend da API Spanner na região da aplicação cliente, são feitas três ou mais viagens de ida e volta ao servidor Spanner (SpanServer) na região principal para confirmar a gravação, o que aumenta a latência. Estas viagens de ida e volta adicionais são necessárias para suportar índices secundários, verificações de restrições e ler as suas escritas.

Captura de ecrã do encaminhamento do Spanner com o encaminhamento com reconhecimento do líder desativado. Figura 2. Exemplo de encaminhamento do Spanner com o encaminhamento com reconhecimento do líder desativado.

Exemplos de utilização

Como resultado da utilização do encaminhamento com reconhecimento do líder, os seguintes exemplos de utilização beneficiam de uma latência inferior:

  • Atualizações em massa: executar importações do Dataflow ou executar alterações em segundo plano (por exemplo, DMLs em lote) a partir de uma região que não seja a principal.
  • Tolerância a desastres e maior disponibilidade: implementar aplicações cliente em regiões principais e não principais para tolerar interrupções regionais ao iniciar gravações a partir de regiões não principais.
  • Aplicação global: implementação de aplicações cliente a nível global com localizações de regiões generalizadas que confirmam dados.

Limitações

Se a sua aplicação cliente for implementada fora da região principal e escrever valores sem ler os dados ("escritas cegas"), pode observar uma regressão da latência se o encaminhamento com reconhecimento do líder estiver ativado. Isto acontece porque, quando o encaminhamento com reconhecimento do líder está ativado, existem duas viagens de ida e volta entre regiões (beginTransaction e o pedido commit) entre a aplicação cliente na região que não é líder e o front-end da API Spanner na região líder. No entanto, com o encaminhamento com reconhecimento do líder desativado, as escritas sem leituras só requerem uma viagem de ida e volta entre regiões para o pedido commit (beginTransaction é processado no front-end da API Spanner local). Por exemplo, se carregar dados de ficheiros em massa para uma tabela recém-criada, é pouco provável que as transações leiam dados da tabela. Se confirmar frequentemente operações de escrita sem as ler na sua aplicação, pode considerar desativar o encaminhamento com reconhecimento do líder. Para mais informações, consulte o artigo Desative o encaminhamento com reconhecimento do líder.

Use o planeamento de trajeto com indicação de líder

O encaminhamento com reconhecimento do líder está ativado por predefinição nas bibliotecas do cliente do Spanner.

Recomendamos que processe os seus pedidos de leitura/escrita com o encaminhamento com reconhecimento do líder ativado. Pode desativá-la para comparar as diferenças de desempenho.

Ative o encaminhamento com reconhecimento do líder

Pode usar as bibliotecas de cliente do Spanner para ativar o encaminhamento com reconhecimento do líder manualmente.

C++

Use a estrutura RouteToLeaderOption para configurar a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do líder ativado:

// Create a client with leader-aware routing enabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = true;

Go

Use ClientConfig para configurar a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do líder ativado:

// Instantiates a client with routeToLeaderEnabled enabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: true;
});

PHP

Use routeToLeader para configurar a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do 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

Desative o encaminhamento com reconhecimento do líder

Pode usar as bibliotecas de cliente do Spanner para desativar o encaminhamento com reconhecimento do líder.

C++

Use a estrutura RouteToLeaderOption para configurar a sua aplicação cliente com o encaminhamento com reconhecimento 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#

Use EnableLeaderRouting para configurar a sua aplicação cliente com o encaminhamento com reconhecimento do líder desativado:

// Create a client with leader-aware routing disabled.
SpannerConnectionStringBuilder builder = new
SpannerConnectionStringBuilder();
Builder.EnableLeaderRouting = false;

Go

Use ClientConfig para configurar a sua aplicação cliente com o encaminhamento com reconhecimento 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

Use SpannerOptions.Builder para criar uma ligação a uma base de dados do Spanner com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do líder desativado:

// Instantiates a client with routeToLeaderEnabled disabled
const spanner = new Spanner({
projectId: projectId,
routeToLeaderEnabled: false;
});

PHP

Use routeToLeader para configurar a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do 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 a sua aplicação cliente com o encaminhamento com reconhecimento do 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

O que se segue?