Enrutamiento orientado a los líderes

En esta página, se describe el enrutamiento consciente del líder 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 con conocimiento del líder está 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 las configuraciones de instancias multirregionales y birregionales de Spanner, una región en la configuración de instancias multirregionales y birregionales se designa como la 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 confirmadas desde una región que no es líder requieren varios viajes de ida y vuelta a la réplica líder para confirmarse correctamente.

El enrutamiento consciente del líder es un mecanismo que mejora la latencia de las transacciones de lectura y escritura enrutándolas de forma inteligente. Si conoces a los líderes 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 Este mecanismo de enrutamiento mejora la latencia de las transacciones de lectura y escritura, ya que reduce a dos la cantidad de idas y vueltas de red requeridas entre la región que no es líder (donde se encuentra la aplicación cliente) y la región líder.

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 consciente del líder habilitado.

Si el enrutamiento consciente del líder 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 recorridos adicionales son necesarios para admitir índices secundarios, verificaciones de restricciones y leer tus operaciones de escritura.

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 adaptado al líder, los siguientes casos de uso se benefician desde una latencia más baja:

  • Actualizaciones masivas: Ejecutar importaciones de Dataflow o cambios en segundo plano (por ejemplo, DML por lotes) desde una región que no es 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 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 liderazgo 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 consciente del líder inhabilitado, las operaciones de escritura sin operaciones de lectura solo requieren un viaje de ida y vuelta entre regiones para la solicitud commit (beginTransaction se procesa en el SpanFE local). Por ejemplo, si cargas datos de archivos de forma masiva en una tabla recién creada, es probable que las transacciones no 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 al líder.

Usa el enrutamiento con reconocimiento de líder

El enrutamiento consciente del líder está habilitado de forma predeterminada en las bibliotecas cliente de Spanner.

Te recomendamos que proceses tus solicitudes de lectura y escritura con el enrutamiento consciente del líder habilitado. Puedes inhabilitarla para comparar las diferencias de rendimiento.

Habilita el enrutamiento consciente del líder

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

C++

Usa la estructura RouteToLeaderOption para configurar tu aplicación cliente con el enrutamiento consciente del líder 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 consciente del líder habilitado:

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 consciente del líder habilitado:

// 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 consciente del líder habilitado:

// 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 consciente del líder habilitado:

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 consciente del líder habilitado:

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

Inhabilita el enrutamiento consciente del 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 consciente del líder inhabilitado:

// 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 consciente del líder inhabilitado:

// 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?