Loading
_ DESCIFRANDO CONEXIÓN SEGURA...

Profundidad, complejidad y coste de una consulta

5 tareas · 40 min · Principiante

La madrugada del 6 de noviembre la base de datos de Carretel se saturó dos veces. Nadie vio datos ajenos; todo el mundo vio lentitud. Te entregan el extracto de relaciones del esquema, los límites declarados en el servidor, el registro de consultas lentas y las notas del incidente. Aquí no se construye ninguna consulta ni se reproduce ninguna de las del registro: se lee qué permite el esquema, qué tope hay declarado y qué quedó registrado.

0 de 5 · 0%

Objetivo de la sala

La madrugada del 6 de noviembre la base de datos de Carretel se saturó dos veces. Nadie vio datos ajenos; todo el mundo vio lentitud. Te entregan el extracto de relaciones del esquema, los límites declarados en el servidor, el registro de consultas lentas y las notas del incidente. Aquí no se construye ninguna consulta ni se reproduce ninguna de las del registro: se lee qué permite el esquema, qué tope hay declarado y qué quedó registrado.

Un cliente de GraphQL no pide un recurso: pide una forma. Y la misma dirección puede recibir una petición minúscula o una que recorra media base de datos, según lo que el cliente escriba dentro. Por eso el tamaño de la petición no dice nada del trabajo que provoca: hay que medir el trabajo, no el texto.

Se mide de tres maneras y conviene no confundirlas. La profundidad cuenta cuántos niveles se anidan desde la raíz; es la más fácil de calcular y se conoce antes de ejecutar nada. La complejidad o coste asigna un peso a cada campo —más a los que van a la base de datos o a un servicio externo, y multiplicado por el tamaño de la página que se pide— y suma; también se puede estimar antes de ejecutar. El número de nodos devueltos y el tiempo gastado solo se conocen mientras la operación corre o cuando ya terminó: sirven para cortar, no para evitar.

Responde para continuar

¿Qué diferencia práctica hay entre un tope de complejidad y un tope de tiempo de ejecución?

Ver pista de ayuda

Pregúntate cuál de los dos números se puede conocer sin haber empezado a resolver.

Abre el laboratorio y lee esquema-relaciones.txt. Hay una relación de muchos a muchos que se puede recorrer en los dos sentidos, y eso es lo que permite anidar sin final: se baja de una colección a sus elementos y desde cada elemento se vuelve a subir. Busca el campo que devuelve un tipo por el que la operación ya pasó.

Responde para continuar

¿Qué campo permite volver desde una película al tipo por el que la operación ya había pasado, de modo que el recorrido se puede repetir? Escríbelo tal como aparece.

Ver pista de ayuda

Mira las dos filas del extracto cuyos tipos se devuelven el uno al otro.

Las notas del incidente dicen qué profundidad necesita de verdad la pantalla más anidada de la aplicación, y esa cifra se quedó en el documento de diseño en vez de llegar a la configuración. Toma esa cifra, no la del archivo de límites, y cuenta en registro-consultas-lentas.txt cuántas operaciones la superan.

Responde para continuar

¿Cuántas consultas del registro superan la profundidad que el diseño de la API consideraba suficiente?

Ver pista de ayuda

La cifra del diseño está en las notas del incidente y no coincide con la que quedó configurada.

En limites.conf hay cinco topes y un interruptor. Cuatro de los topes tienen un valor que corta algo; uno está declarado de forma que no corta nada, y es justamente el que se habría estimado antes de ejecutar la operación. El propio archivo explica en su comentario qué significa ese valor.

Responde para continuar

¿Qué límite del archivo está declarado sin tope alguno? Escribe su nombre tal como aparece.

Ver pista de ayuda

Su valor es cero y el comentario del archivo aclara que cero significa sin tope.

El equipo propone bajar el tope de tiempo de ocho segundos a tres. Es una medida de contención razonable y no es el arreglo: con tres segundos, la plataforma habría estado lenta tres segundos en vez de ocho. Lo que evita el daño es rechazar antes de empezar lo que se sabe que va a costar demasiado, y quitar del esquema la posibilidad de pedir colecciones sin límite.

Responde para continuar

¿Qué combinación corrige la causa del incidente de Carretel?

Ver pista de ayuda

El tope de profundidad por sí solo no distingue entre pedir tres niveles baratos y tres niveles carísimos.

Inicia sesión para registrar tus puntos y progreso en el ranking.

Whoami-Labs Pro

Whoami-Labs Pro utiliza cookies

Utilizamos cookies y almacenamiento local para el funcionamiento del sitio, seguridad de sesión y, si lo autorizas, analítica y marketing. Puedes aceptar, rechazar o personalizar. Política de Privacidad