Enrutamiento adaptado a líderes

En esta página, se describe el enrutamiento con reconocimiento de líderes en Spanner y cómo usarlo. Spanner usa el enrutamiento adaptado a líderes para enrutar de forma dinámica el modo de lectura y escritura en configuraciones de instancias birregionales y multirregionales para reducir la latencia y el rendimiento de tu base de datos. El enrutamiento adaptado al líder es habilitado de forma predeterminada.

Enrutamiento de Spanner para transacciones de lectura y escritura

Spanner replica los datos para proporcionar datos adicionales y la localidad geográfica. En Spanner Configuraciones de instancias birregionales y multirregionales, en la configuración de instancias birregionales y multirregionales designada como región líder y contiene las réplicas líderes de la base de datos. Cuando usas una instancia birregional o multirregional configuración y tu cliente emite una transacción de lectura y escritura a tu base de datos de una región no líder, la escritura siempre se procesa en la región líder y, luego, se envía de vuelta a la región no líder. Por lo tanto, las transacciones de lectura y escritura el compromiso desde una región no líder requieren varios recorridos de ida y vuelta a la líder que la réplica se confirme correctamente.

El enrutamiento adaptado al líder es un mecanismo que mejora la latencia para las operaciones de lectura y escritura las transacciones enrutando estas transacciones de forma inteligente. Si conoces a los líderes de que el enrutamiento esté habilitado, incluso si la escritura no se origina en la región líder las solicitudes de creación de sesiones se enrutan a la región líder para alinearse Spanner Front End (SpanFE) con la región líder Esta ruta de lectura y escritura mejora la latencia de las transacciones de lectura y escritura a través de la reducción del número de recorridos de la red necesarios entre la región no líder (donde el cliente su aplicación) y la región líder a dos.

Captura de pantalla del enrutamiento de Spanner con el enrutamiento adaptado a líderes habilitado. Figura 1: Ejemplo de enrutamiento de Spanner con el enrutamiento adaptado al líder habilitado.

Si el enrutamiento con reconocimiento de líderes está inhabilitado, la aplicación cliente primero enruta la solicitud a un servicio de SpanFE dentro de la región de la aplicación cliente (región no líder). Luego, desde SpanFE en la región de la aplicación cliente, se realizan tres o más recorridos de ida y vuelta al servidor de Spanner (SpanServer) en la región líder para confirmar la escritura, lo que aumenta la latencia. Estos se necesitan recorridos de ida y vuelta adicionales para admitir índices secundarios, comprobaciones de seguridad y leer tus escrituras.

Captura de pantalla del enrutamiento de Spanner con el enrutamiento adaptado al líder inhabilitado. Figura 2: Ejemplo de enrutamiento de Spanner con el enrutamiento adaptado al líder inhabilitado.

Casos de uso

Como resultado del uso del enrutamiento con reconocimiento de líderes, los siguientes casos de uso se benefician desde una latencia más baja:

  • Actualizaciones masivas: Ejecución de importaciones de Dataflow o ejecución en segundo plano cambios (por ejemplo, DML en lotes) de una región no líder.
  • Tolerancia a desastres y mayor disponibilidad: Se está implementando el cliente. en las regiones líderes y no líderes para tolerar interrupciones de servicio mientras se inician operaciones de escritura desde regiones no líderes.
  • Aplicación global: Implementación de aplicaciones cliente de forma global con ubicaciones regionales generalizadas que confirman datos.

Limitaciones

Si tu aplicación cliente se implementa fuera de la región líder y escribir valores sin leer los datos ("escrituras ciegas"),es posible que observes latencia regresión si el enrutamiento con reconocimiento de líderes está habilitado. Esto se debe a que cuando el líder el enrutamiento de paquetes está habilitado, hay dos recorridos de ida y vuelta entre regiones (beginTransaction y la solicitud commit) entre la aplicación cliente de la solicitud no líder y el SpanFE en la región líder. Sin embargo, con el enrutamiento con reconocimiento de líderes inhabilitado, las escrituras sin lectura solo requieren un recorrido de ida y vuelta entre regiones para el solicitud de commit (beginTransaction se procesa en el SpanFE local). Para Por ejemplo, si cargas datos de archivos de forma masiva en una tabla creada recientemente, las transacciones es poco probable que lean datos de la tabla. Si confirmas con frecuencia, escribe sin leerlas en tu aplicación, te recomendamos considerar inhabilitar el enrutamiento adaptado a líderes. Para obtener más información, consulta Inhabilita el enrutamiento adaptado a líderes.

Usa el enrutamiento adaptado a líderes

El enrutamiento adaptado al líder está habilitado de forma predeterminada en el cliente de Spanner bibliotecas.

Recomendamos procesar tus solicitudes de lectura y escritura con enrutamiento optimizado para líderes habilitado. Puedes inhabilitarla para comparar las diferencias de rendimiento.

Habilitar el enrutamiento adaptado a líderes

Puedes usar las bibliotecas cliente de Spanner para habilitar la detección de líderes el enrutamiento de forma manual.

C++

Usa la RouteToLeaderOption. para configurar tu aplicación cliente con enrutamiento adaptado a los líderes habilitado:

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#

Usa EnableLeaderRouting. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

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

Go

Usa ClientConfig. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

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

Usa SpannerOptions.Builder. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

SpannerOptions options = SpannerOptions.newBuilder().enableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";

Node.js

Usa SpannerOptions. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

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

PHP

Usa routeToLeader Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

// Instantiates a client with leader-aware routing enabled
use Google\Cloud\Spanner\SpannerClient;

$routeToLeader = true;
$spanner = new SpannerClient($routeToLeader);

Python

Usa route_to_leader_enabled. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

spanner_client = spanner.Client(
route_to_leader_enabled=true
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

Ruby

Usa self.new. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes habilitado, haz lo siguiente:

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

Inhabilitar el enrutamiento adaptado al líder

Puedes usar las bibliotecas cliente de Spanner para inhabilitar la detección de líderes de alto rendimiento.

C++

Usa la RouteToLeaderOption. para configurar tu aplicación cliente con enrutamiento adaptado a los líderes inhabilitado:

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#

Usa EnableLeaderRouting. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

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

Go

Usa ClientConfig. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

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

Usa SpannerOptions.Builder. para crear una conexión a una base de datos de Spanner con un líder enrutamiento adaptado inhabilitado:

SpannerOptions options = SpannerOptions.newBuilder().disableLeaderAwareRouting.build();
Spanner spanner = options.getService();
String instance = "my-instance";
String database = "my-database";

Node.js

Usa SpannerOptions. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

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

PHP

Usa routeToLeader Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

// Instantiates a client with leader-aware routing disabled
use Google\Cloud\Spanner\SpannerClient;

$routeToLeader = false;
$spanner = new SpannerClient($routeToLeader);

Python

Usa route_to_leader_enabled. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

spanner_client = spanner.Client(
route_to_leader_enabled=false
)
instance = spanner_client.instance(instance_id)
database = instance.database(database_id)

Ruby

Usa self.new. Para configurar tu aplicación cliente con el enrutamiento adaptado a líderes inhabilitado, haz lo siguiente:

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

¿Qué sigue?