Leer arrendamiento

En esta página se describe y se explica cómo usar los arrendamientos de lectura de Spanner. Los arrendamientos de lectura ayudan a tus bases de datos a reducir la latencia de lectura fuerte en regiones de lectura y escritura o de solo lectura a costa de una mayor latencia de escritura.

De forma predeterminada, cuando Spanner recibe una solicitud de lectura sólida en una región que no es la principal, la réplica que sirve la lectura se pone en contacto con la región de lectura y escritura principal de la instancia. Este contacto confirma que sus datos están actualizados antes de atender la solicitud. Este proceso implica un ciclo de ida y vuelta de la red entre la región que recibe la solicitud y la región líder. A diferencia de la comunicación dentro de una misma región, la distancia geográfica entre regiones añade latencia adicional a la solicitud.

Si se usan concesiones de lectura de Spanner, no es necesario hacer este viaje de ida y vuelta. Cuando define una o varias regiones de concesión de lectura para su base de datos, Spanner otorga a esas regiones el derecho de ofrecer lecturas coherentes a nivel local. Esto permite que las regiones que no son líderes sirvan directamente lecturas sólidas sin comunicarse con la región líder. Publicar lecturas sólidas desde una región que no sea la principal y que esté más cerca del cliente reduce la latencia entre regiones. De esta forma, se consigue una latencia intrarregional para las lecturas sólidas en instancias de dos regiones o multirregionales. Cuando los arrendamientos de lectura están habilitados, las lecturas sólidas en transacciones de solo lectura se sirven de forma local sin contactar con el líder. En el caso de las transacciones de lectura y escritura, las lecturas se siguen dirigiendo a la región líder, a menos que uses el aislamiento de lectura repetible con el enrutamiento consciente del líder inhabilitado.

Habilitar o inhabilitar la función de concesiones de lectura en una región no requiere tiempo de inactividad. Sin embargo, las escrituras experimentan una latencia mayor cuando se usa la función, ya que para habilitar el bloqueo de lectura, el líder debe ponerse en contacto con las regiones de bloqueo de lectura al servir las escrituras. Como efecto secundario, las escrituras mantienen los bloqueos durante más tiempo, lo que puede afectar a las cargas de trabajo de escritura con mucha contención. Para obtener más información, consulta Cuándo usar los bloqueos de lectura. La lectura de la concesión es más adecuada para las aplicaciones que están dispuestas a sacrificar una mayor latencia de escritura para obtener lecturas sólidas más rápidas. Por ejemplo, un sistema de control de acceso en el que la carga de trabajo tiene lecturas frecuentes, pero escrituras poco habituales.

Para saber cómo habilitar los bloqueos de lectura, consulta Usar bloqueos de lectura.

Cuándo usar las concesiones de lectura

Habilita las concesiones de lectura si tu aplicación y tu carga de trabajo cumplen los siguientes criterios:

  • Es más importante que la latencia sea baja para las lecturas sólidas que para las escrituras.
  • Tu carga de trabajo puede tolerar bloqueos de escritura de mayor duración o tiene una baja contención de escritura.

Cuando hay escrituras simultáneas, la elección entre usar las APIs de consulta o las APIs de lectura afecta al rendimiento de una base de datos que usa regiones de concesión de lectura.

Para obtener más información sobre la monitorización de la latencia, consulta Monitor.

Caso práctico de ejemplo

Imagina una aplicación desplegada a nivel mundial que realiza escrituras en EE. UU. y tiene clientes en EE. UU., Europa y Asia. Puedes configurar una instancia de Spanner multirregional, como nam-eur-asia1, con una región principal en us-central1 y réplicas de solo lectura en europe-west1 y asia-east1.

Cuando habilitas el bloqueo de lectura en las regiones de solo lectura europe-west1 y asia-east1, Spanner sirve lecturas sólidas desde Europa y Asia desde esas réplicas locales, lo que reduce la latencia. La contrapartida es un aumento de la latencia de escritura en todas las escrituras. El aumento de la latencia equivale al tiempo de ida y vuelta entre la región del líder us-central1 y las regiones de arrendamiento de lectura más lejanas.

Limitaciones

Los arrendamientos de lectura de Spanner tienen las siguientes limitaciones:

  • No puedes usar el bloqueo de lectura con particiones geográficas.
  • Las concesiones de lectura no reducen la latencia de las lecturas que forman parte de una transacción de lectura y escritura. Si quieres conseguir una latencia intrarregión para las lecturas dentro de las transacciones de lectura y escritura, debes usar el nivel de aislamiento de lectura repetible e inhabilitar el enrutamiento consciente del líder para usar las concesiones de lectura. Incluso cuando se usa el aislamiento de lectura repetible, las lecturas de las transacciones de lectura y escritura se pueden dirigir a la región líder, sobre todo después de que se haya producido una escritura en la transacción, para asegurar la coherencia de lectura y escritura.
  • Si mueves tu instancia a otra configuración de instancia, los ajustes de concesión de lectura no se conservarán. Debe volver a habilitar el bloqueo de lectura en la base de datos una vez que se haya completado el traslado.

Usar concesiones de lectura

Para poder usarla, debes habilitar las concesiones de lectura.

Control de acceso con la gestión de identidades y accesos

Para definir regiones de concesión de lectura, un usuario necesita el permiso de IAM spanner.databases.create o spanner.databases.updateDdl. El rol predefinido Administrador de base de datos (roles/spanner.databaseAdmin) incluye estos permisos. Para obtener más información, consulta la información general sobre la gestión de identidades y accesos en Spanner.

Para obtener información sobre cómo conceder permisos, consulta Aplicar permisos de gestión de identidades y accesos.

Antes de empezar para los usuarios de bases de datos PostgreSQL

Si quieres usar el bloqueo de lectura en una base de datos de PostgreSQL, haz uno de los siguientes cambios en la configuración de tu base de datos. De lo contrario, las lecturas seguirán sirviéndose desde la región principal, aunque hayas definido regiones de concesión de lectura.

  • Si solo usas transacciones de solo lectura, configura tu conexión de PostgreSQL para que el estado predeterminado de cada nueva transacción de la base de datos sea de solo lectura. Para ello, asigna el valor true a la opción default_transaction_read_only.

    postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \
      default_transaction_read_only=true
    host=/tmp port=5432 database=DATABASE_ID \
      options='-c default_transaction_read_only=true'
    

    Haz los cambios siguientes:

    • USER_ID con el identificador único de su usuario.

    • PASSWORD con tu contraseña.

    • DATABASE_ID con el identificador único de tu base de datos.

  • Si quieres conseguir una latencia de lectura intrarregión en transacciones de lectura y escritura o no puedes cambiar siempre tu opción de conexión, usa el nivel de aislamiento de lectura repetible y deshabilita el enrutamiento consciente del líder. Estos ajustes son obligatorios aunque tu transacción de lectura y escritura solo tenga lecturas. De lo contrario, las lecturas de las transacciones de lectura y escritura siempre se dirigen a la región líder. En este tipo de transacciones, el bloqueo de lectura se inhabilita después de que aparezca la primera instrucción DML de escritura. Esto se debe a que las escrituras siempre se dirigen a la región líder. Por lo tanto, para leer lo que has escrito, las lecturas posteriores también deben dirigirse a la región principal.

    postgres://USER_ID:PASSWORD@localhost:5432/DATABASE_ID?sslmode=disable&options=-c \
      default_isolation_level=REPEATABLE_READ -c routeToLeader=false
    host=/tmp port=5432 database=DATABASE_ID \
      options='-c default_isolation_level=REPEATABLE_READ -c routeToLeader=false'
    

Habilitar las concesiones de lectura

Para habilitar los alquileres de lectura al crear una base de datos, define la opción read_lease_regions en la instrucción DDL ALTER DATABASE (GoogleSQL, PostgreSQL) :

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras habilitar el bloqueo de lectura.

  3. En la página Resumen de la instancia que se abre, haz clic en Crear base de datos.

  4. En el nombre de la base de datos, introduce un nombre.

  5. Selecciona un dialecto de base de datos.

  6. Haz clic en Crear.

    La consola Google Cloud muestra la página Información general de la base de datos que has creado.

  7. En el menú de navegación, haz clic en Spanner Studio.

  8. En la página Spanner Studio, haz clic en Nueva pestaña o usa la pestaña del editor vacía.

  9. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

    PostgreSQL

    ALTER DATABASE DATABASE_ID
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

  10. Haz clic en Ejecutar.

gcloud

Para definir la opción de base de datos read_lease_regions al crear la base de datos, usa gcloud spanner databases create.

GoogleSQL

gcloud spanner databases create DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION: la región en la que quieras habilitar el alquiler de lectura. Por ejemplo, europe-west1. Puedes habilitar el bloqueo de lectura para varias regiones. Separa cada región con una coma.

PostgreSQL

gcloud spanner databases create DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION: la región en la que quieras habilitar el alquiler de lectura. Por ejemplo, europe-west1. Puedes habilitar el bloqueo de lectura para varias regiones. Separa cada región con una coma.

Para habilitar el bloqueo de lectura al actualizar una base de datos, define la opción read_lease_regions en la instrucción DDL ALTER DATABASE (GoogleSQL, PostgreSQL):

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras habilitar el bloqueo de lectura.

  3. Selecciona la base de datos en la que quieras habilitar el bloqueo de lectura.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. En la página Spanner Studio, haga clic en Nueva pestaña o use la pestaña del editor vacía.

  6. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID \
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

    PostgreSQL

    ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';
    

    Haz los cambios siguientes:

    • DATABASE_ID con el identificador único de tu base de datos.

    • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

  7. Haz clic en Ejecutar.

gcloud

Para definir la opción de base de datos read_lease_regions, usa gcloud spanner databases ddl update.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET OPTIONS (read_lease_regions = 'READ_LEASE_REGION');"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID \
    SET "spanner.read_lease_regions" = 'READ_LEASE_REGION';"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.
  • READ_LEASE_REGION por la región en la que quieras habilitar el bloqueo de lectura. Por ejemplo, europe-west1. Puedes habilitar la lectura de la concesión para varias regiones. Separa cada región con una coma.

Inhabilitar las concesiones de lectura

El bloqueo de lectura está inhabilitado de forma predeterminada.

Para actualizar y inhabilitar la función en una base de datos, define la opción read_lease_regions en la instrucción DDL ALTER DATABASE (GoogleSQL, PostgreSQL) como NULL:

Consola

  1. Ve a la página Instancias de la Google Cloud consola.

    Instancias

  2. Selecciona la instancia en la que quieras inhabilitar el bloqueo de lectura.

  3. Selecciona la base de datos en la que quieras inhabilitar el bloqueo de lectura.

  4. En el menú de navegación, haz clic en Spanner Studio.

  5. En la página Spanner Studio, haga clic en Nueva pestaña o use la pestaña del editor vacía.

  6. Introduce la siguiente ALTER DATABASE instrucción DDL.

    GoogleSQL

    ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);
    

    Sustituye DATABASE_ID por el identificador único de tu base de datos.

    PostgreSQL

    ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;
    

    Sustituye DATABASE_ID por el identificador único de tu base de datos.

  7. Haz clic en Ejecutar.

gcloud

Para definir la opción de base de datos read_lease_regions, usa gcloud spanner databases ddl update.

GoogleSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET OPTIONS (read_lease_regions = NULL);"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.

PostgreSQL

gcloud spanner databases ddl update DATABASE_ID \
  --instance=INSTANCE_ID \
  --ddl="ALTER DATABASE DATABASE_ID SET "spanner.read_lease_regions" = NULL;"

Haz los cambios siguientes:

  • DATABASE_ID: identificador permanente de tu base de datos de Spanner.
  • INSTANCE_ID: identificador permanente de tu instancia de Spanner.

Prácticas recomendadas

Para aprovechar al máximo las ventajas de esta función, usa sesiones multiplexadas, que te permiten crear un gran número de solicitudes simultáneas en una sola sesión.

Monitorizar

Después de habilitar el bloqueo de lectura, es importante monitorizar la latencia para confirmar que la función consigue el efecto deseado. Para ello, identifica la región principal y las regiones en las que se ha habilitado el arrendamiento de lectura consultando la tabla del esquema de información data_options (GoogleSQL, PostgreSQL) o tu base de datos. Las regiones que tienen habilitado el arrendamiento de lectura esperan que las lecturas sólidas tengan una latencia dentro de la región. Al mismo tiempo, la latencia de escritura aumenta con el tiempo de ida y vuelta entre la región principal y la región más lejana con el bloqueo de lectura habilitado.

También puede usar la siguiente métrica de latencia de Spanner para monitorizar las latencias de las solicitudes de lectura en sus instancias:

  • spanner.googleapis.com/api/read_request_latencies_by_serving_location

Puede filtrar esta métrica mediante el campo /serving_location. El campo /serving location indica la ubicación del servidor de Spanner desde el que se sirve la solicitud.

Para ver una lista completa de las métricas disponibles, consulta la lista de métricas de Spanner.

Consideraciones sobre el coste

Las lecturas sólidas que se sirven desde regiones con la función de concesión de lectura habilitada usan ligeramente menos recursos de computación. Por otro lado, las escrituras de bases de datos con la función de concesión de lectura habilitada usan ligeramente más recursos de computación. Para obtener más información, consulta los precios de la capacidad de computación de Spanner.

Esta función no afecta a otros componentes de los precios, como el almacenamiento y la red.

Siguientes pasos