En esta página se describen las lecturas dirigidas de Spanner y cómo usarlas.
Las lecturas dirigidas de Spanner ofrecen la flexibilidad de enrutar transacciones de solo lectura y lecturas únicas a un tipo de réplica o región específico dentro de una configuración de instancia de dos o varias regiones, o bien a una configuración regional personalizada con una o varias regiones de solo lectura opcionales.
Ventajas
Las lecturas dirigidas ofrecen las siguientes ventajas:
- Ofrece más control sobre las cargas de trabajo de balanceo de carga en varias regiones para conseguir un uso de la CPU más uniforme y evitar el aprovisionamiento excesivo de instancias de Spanner.
- Habilita el aislamiento de cargas de trabajo. Puedes dirigir tus cargas de trabajo de analíticas y lecturas de flujos de cambios a réplicas de Spanner específicas para minimizar el impacto en las cargas de trabajo transaccionales que se ejecutan en la misma base de datos de Spanner.
Operaciones de consulta admitidas
Operaciones de consulta | ¿Se admiten las lecturas dirigidas? |
---|---|
Lectura obsoleta | Sí |
Lectura fuerte | Sí |
Transacción de lectura y escritura | No |
Las lecturas dirigidas no se admiten en las transacciones de lectura y escritura
ni en las actualizaciones en bloque de tipo DML particionado. Esto se debe a que las transacciones de lectura y escritura deben procesarse en la región líder. Si se usan lecturas dirigidas en una transacción de lectura y escritura, la transacción falla y se produce un error BAD_REQUEST
.
Limitaciones
Las lecturas dirigidas de Spanner tienen las siguientes limitaciones:
- Solo puedes usar lecturas dirigidas en una instancia de Spanner que tenga una configuración de instancia birregional, una configuración de instancia multirregional o una configuración regional personalizada con una o varias regiones de solo lectura opcionales.
- No puedes usar lecturas dirigidas con solicitudes de lectura y escritura porque las solicitudes de escritura siempre se sirven desde la región líder.
- No puedes usar lecturas dirigidas en la Google Cloud consola ni en la CLI de Google Cloud. Está disponible mediante las APIs REST y RPC, así como las bibliotecas de cliente de Spanner.
- Puedes especificar un máximo de 10 réplicas en una sola lectura dirigida.
Antes de empezar
Antes de usar lecturas dirigidas, tenga en cuenta lo siguiente:
- La aplicación puede incurrir en una latencia adicional si enruta las lecturas a una réplica o región que no sea la más cercana a la aplicación.
- Puede dirigir el tráfico en función de los siguientes criterios:
- Nombre de la región (por ejemplo,
us-central1
). - Tipo de réplica (valores posibles:
READ_ONLY
yREAD_WRITE
).
- Nombre de la región (por ejemplo,
- La opción de conmutación por error automática en lecturas dirigidas está habilitada de forma predeterminada. Si la opción de conmutación por error automática está habilitada y todas las réplicas especificadas no están disponibles o no están en buen estado, Spanner dirige las solicitudes a una réplica que no esté en la lista
includeReplicas
. Si inhabilitas la opción de conmutación por error automática y todas las réplicas especificadas no están disponibles o no están en buen estado, la solicitud de lecturas dirigidas fallará.
Parámetros de lecturas dirigidas
Si usas la API REST o RPC para realizar lecturas dirigidas, debes definir estos campos en el parámetro directedReadOptions
. Solo puedes incluir uno de los valores includeReplicas
o excludeReplicas
, pero no ambos.
includeReplicas
: contiene un conjunto repetido dereplicaSelections
. Esta lista indica el orden en el que se deben tener en cuenta las lecturas dirigidas a regiones o tipos de réplica específicos. Puedes especificar un máximo de 10includeReplicas
.replicaSelections
: consta dellocation
o la réplicatype
que sirve la solicitud de lectura dirigida. Si usaincludeReplicas
, debe proporcionar al menos uno de los siguientes campos:location
: la ubicación que sirve la solicitud de lecturas dirigidas. La ubicación debe ser una de las regiones de la configuración de dos regiones o de varias regiones de tu base de datos. Si la ubicación no es una de las regiones de la configuración de dos o varias regiones de tu base de datos, las solicitudes no se dirigirán como se espera. En su lugar, se sirven desde la región más cercana. Por ejemplo, puedes dirigir las lecturas a la ubicaciónus-central1
de una base de datos en la configuración de instancia multirregionalnam6
.También puede especificar el parámetro
location
con un literal de cadenaleader
onon-leader
. Si introduces el valorleader
, Spanner dirige tus solicitudes a la réplica principal de la base de datos. Por el contrario, si introduces el valornon-leader
, Spanner completará la solicitud en la réplica no líder más cercana.type
: el tipo de réplica que sirve la solicitud de lectura dirigida. Entre los posibles tipos se incluyenREAD_WRITE
yREAD_ONLY
.
autoFailoverDisabled
: De forma predeterminada, esta opción está definida enFalse
, lo que significa que la conmutación por error automática está habilitada. Si la opción de conmutación por error automática está habilitada y todas las réplicas especificadas no están disponibles o no están en buen estado, Spanner dirige las solicitudes a una réplica que no esté en la listaincludeReplicas
. Si inhabilitas la opción de conmutación por error automática y todas las réplicas especificadas no están disponibles o no están en buen estado, la solicitud de lectura dirigida fallará. Los valores posibles sonTRUE
(inhabilitado) yFALSE
(habilitado).
excludeReplicas
: contiene un conjunto repetido dereplicaSelections
que se excluye de las solicitudes de servicio. Spanner no enruta las solicitudes a las réplicas de esta lista.replicaSelections
: la ubicación o el tipo de réplica que se excluye de la solicitud de lecturas dirigidas. Si usasexcludeReplicas
, debes proporcionar al menos uno de los siguientes campos:location
: la ubicación que se excluye del servicio de la solicitud de lecturas dirigidas.type
: el tipo de réplica que se excluye de la solicitud de lectura dirigida. Entre los tipos posibles se incluyenREAD_WRITE
yREAD_ONLY
.
Para ver un ejemplo de cómo es el cuerpo de una solicitud REST, haz clic en la pestaña REST de la sección Usar lecturas dirigidas.
Usar lecturas dirigidas
Puedes usar las bibliotecas de cliente de Spanner y las APIs REST y RPC para realizar lecturas dirigidas.
Bibliotecas de cliente
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
REST
Puedes usar las siguientes APIs REST para realizar lecturas dirigidas:
Por ejemplo, para realizar lecturas dirigidas en us-central1
con executeSQL
, sigue estos pasos:
Haz clic en
projects.instances.databases.sessions.executeSql
.En el campo de sesión, introduce lo siguiente:
projects/<VAR>PROJECT-ID</VAR>/instances/<VAR>INSTANCE-ID</VAR>/databases/<VAR>DATABASE-ID</VAR>/sessions/<VAR>SESSION-ID</VAR>
Haz los cambios siguientes:
- PROJECT-ID: el ID del proyecto.
- INSTANCE-ID: el ID de instancia.
- DATABASE-ID: el ID de la base de datos.
- SESSION-ID: el ID de sesión.
Recibirás el valor
SESSION-ID
cuando crees una sesión.
En el campo de cuerpo de la petición, utiliza lo siguiente:
{ "directedReadOptions": { "includeReplicas": { "replicaSelections": [ { "location": "us-central1", } ] } }, "sql": "SELECT SingerId, AlbumId, AlbumTitle FROM Albums" }
Haz clic en la opción para ejecutar. La respuesta muestra los resultados de la consulta.
RPC
Puedes usar las siguientes APIs de RPC para realizar lecturas dirigidas:
Supervisión
Spanner proporciona una métrica de latencia para ayudarte a monitorizar las actividades de lectura dirigida en tus instancias. La métrica está disponible en Cloud Monitoring.
spanner.googleapis.com/api/read_request_latencies_by_serving_location
Puede filtrar esta métrica con los campos /serving_location
o /is_directed_read
. El campo /serving location
indica la ubicación del servidor de Spanner desde el que se sirve la solicitud. El campo /is_directed_read
indica si la opción de lecturas dirigidas está habilitada.
Para ver una lista completa de las métricas disponibles, consulta la lista de métricas de Spanner.
Siguientes pasos
- Consulta cómo realizar lecturas fuera de las transacciones.