Puntos de latencia en una solicitud de Spanner

En esta página, se proporciona una descripción general de los componentes de alto nivel que participan en una solicitud de Spanner y cómo cada componente puede afectar la latencia.

Solicitudes a la API de Spanner

Entre los componentes de alto nivel que se usan para realizar una solicitud a la API de Spanner, se incluyen los siguientes:

Cuando realizas una llamada de procedimiento remoto a Spanner, las bibliotecas cliente de Spanner preparan la solicitud a la API. Luego, la solicitud a la API pasa por GFE y el AFE de Spanner antes de llegar a la base de datos de Spanner.

Si mides y comparas las latencias de las solicitudes entre los diferentes componentes y la base de datos, puedes determinar qué componente está causando el problema. Estas latencias incluyen la latencia de extremo a extremo del cliente, la latencia de GFE, la latencia de la solicitud a la API de Spanner y la latencia de las consultas.

Diagrama de arquitectura de Spanner.

En las siguientes secciones, se explica cada tipo de latencia que ves en el diagrama anterior.

Conectividad directa

El tráfico de aplicaciones que cumple con ciertos criterios se puede enrutar directamente a Spanner, lo que omite Google Front End (GFE) y optimiza el rendimiento. La conectividad directa se puede activar para las aplicaciones que satisfacen los siguientes criterios:

  • Se ejecuta en Compute Engine o Google Kubernetes Engine.
  • Usa el extremo global.
  • En una red configurada con rutas y reglas de firewall que permiten que el tráfico de salida llegue a 34.126.0.0/18 y 2001:4860:8040::/42.
  • Usa las versiones de la biblioteca cliente:
    • Java: 6.111.0 o versiones posteriores
    • Go: 1.88.0 o versiones posteriores
  • Las credenciales que usas para las aplicaciones tienen el spanner.databases.get permiso.

Para habilitar esta función, configura la GOOGLE_SPANNER_ENABLE_DIRECT_ACCESS variable de entorno en true o a través de la configuración de la biblioteca cliente ( setEnableDirectAccess(true) en Java, ClientConfig.EnableDirectAccess en Go o la propiedad de conexión enableDirectAccess=true en el controlador JDBC).

Para verificar si se usa la conectividad directa de Spanner, supervisa las etiquetas de uso en tus métricas del cliente.

Latencia de extremo a extremo

La latencia de extremo a extremo es el período (en milisegundos) entre el primer byte de la solicitud a la API de Spanner que el cliente envía a la base de datos (a través de GFE y el frontend de la API de Spanner) y el último byte de respuesta que el cliente recibe de la base de datos.

Diagrama de arquitectura de Spanner para la latencia de extremo a extremo.

La spanner.googleapis.com/client/operation_latencies métrica proporciona el tiempo entre el primer byte de la solicitud a la API enviada y el último byte de la respuesta recibida. Esto incluye los reintentos que realiza la biblioteca cliente.

Para obtener más información, consulta Visualiza y administra las métricas del cliente.

Latencia de GFE

La latencia de Google Front End (GFE) es el período (en milisegundos) entre el momento en que la red de Google recibe una llamada de procedimiento remoto del cliente y el momento en que GFE recibe el primer byte de la respuesta. Esta latencia no incluye ningún protocolo de enlace TCP/SSL.

Diagrama de arquitectura de Spanner para la latencia de GFE.

Cada respuesta de Spanner (REST o gRPC) incluye un encabezado que contiene el tiempo total entre GFE y el backend (el servicio de Spanner) para la solicitud y la respuesta. Esto ayuda a diferenciar mejor la fuente de la latencia entre el cliente y GFE.

La spanner.googleapis.com/client/gfe_latencies métrica captura y expone la latencia de GFE para las solicitudes de Spanner.

Para obtener más información, consulta Visualiza y administra las métricas del cliente.

Latencia de la solicitud a la API de Spanner

La latencia de la solicitud a la API de Spanner es el período (en segundos) desde el momento en que el AFE de Spanner recibe el primer byte de una solicitud hasta el momento en que el frontend de la API de Spanner envía el último byte de una respuesta. La latencia incluye el tiempo necesario para procesar las solicitudes a la API en el backend de Spanner y en la capa de la API. Sin embargo, esta latencia no incluye la sobrecarga de red o de proxy inverso entre los clientes y los servidores de Spanner.

Diagrama de arquitectura de Spanner para la latencia de solicitudes a la API de Spanner.

La métrica spanner.googleapis.com/api/request_latencies captura y expone la latencia del AFE de Spanner para las solicitudes de Spanner. Para obtener más información, consulta Métricas de Spanner.

Latencia de las consultas

La latencia de las consultas es el período (en milisegundos) que se tarda en ejecutar consultas en SQL en la base de datos de Spanner.

Diagrama de arquitectura de Spanner para la latencia de las consultas.

La latencia de las consultas está disponible para la executeSql.

Si el QueryMode parámetro se establece en WITH_STATS o WITH_PLAN_AND_STATS, los ResultSetStats de Spanner estarán disponibles en las respuestas. ResultSetStats incluye el tiempo transcurrido para ejecutar consultas en la base de datos de Spanner.

Para capturar y visualizar la latencia de las consultas, consulta Captura la latencia de las consultas con OpenTelemetry.

¿Qué sigue?