Di adónde va el tiempo
La latencia es el tiempo entre una petición y su respuesta. En una llamada a un modelo son dos números: la espera del primer token y la del último. Importa porque los usuarios juzgan una función por sus peores momentos, no por su media.
Una función que responde en un segundo a diecinueve usuarios y en ocho al vigésimo le parece rota a ese vigésimo.
Al final de esta lección
Nota
Puedo decir adónde va el tiempo en una llamada a un modelo y fijar un tiempo límite a partir de duraciones grabadas.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Latencia | el tiempo que tarda una petición en recibir respuesta |
| Primer token | el primer trozo de una respuesta en flujo |
| Percentil | el valor bajo el cual cae una parte de las peticiones |
| Cola | las pocas peticiones más lentas |
| Tiempo límite | la espera más larga antes de rendirse |
| Flujo | enviar una respuesta por trozos, a medida que se genera |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Los percentiles muestran la cola
Una media esconde las peticiones lentas. Ordena las duraciones en su lugar. La mediana (p50) es la del medio. El p95 es el valor que el 95 por ciento de las peticiones no supera. Las pocas por encima forman la cola.
Usa el rango más cercano. Con n valores, toma el que está en el lugar p por ciento de n, redondeado hacia arriba, contando desde 1. No hay interpolación, así que todas las herramientas dan lo mismo.
Ejemplo resuelto: veinte duraciones
| Medida | Lugar entre 20 | Valor |
|---|---|---|
| p50 | 10.º | 900 ms |
| p90 | 18.º | 2300 ms |
| p95 | 19.º | 4200 ms |
| p99 | 20.º | 7800 ms |
| Media | ninguno | 1493 ms |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Fija un tiempo límite con los datos
Un tiempo límite es la espera más larga que aceptas. Si es muy corto, cortas respuestas buenas. Si es muy largo, una llamada atascada retiene a un usuario y una conexión. Toma un percentil alto como el p95, añade un margen y redondea.
El flujo esconde la espera: el usuario lee el primer token a unos cientos de milisegundos mientras llega el resto. Mide por separado el primer token y la respuesta completa, y dale a cada uno su límite.
Un error frecuente
Advertencia
Mucha gente fija el tiempo límite con la media, porque es un solo número fácil. Con la media de aquí, 1493 ms, se cortarían 4 de las 20 peticiones. Fíjalo con un percentil alto de duraciones grabadas y comprueba cuántas cortaría.
Escribe el informe de latencia, parte 1
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Veinte duraciones grabadas e inventadas, en milisegundos: la respuesta completa y el primer token.' 'const TOTAL = [820, 910, 760, 1500, 880, 940, 830, 4200, 900, 870, 1020, 790, 850, 2300, 910, 880, 960, 840, 7800, 900];' 'const FIRST = [210, 240, 200, 300, 220, 250, 215, 500, 230, 225, 260, 205, 222, 380, 240, 228, 255, 218, 900, 232];' > latency4.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el informe de latencia, parte 2
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Rango más cercano: se ordena y se toma el valor en el lugar techo(p por ciento de n).' 'function percentile(values, p) {' ' const sorted = values.slice().sort(function (a, b) { return a - b; });' ' const rank = Math.ceil(p * sorted.length / 100);' ' return sorted[rank - 1];' '}' 'function average(values) {' ' return Math.round(values.reduce(function (sum, v) { return sum + v; }, 0) / values.length);' '}' >> latency4.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el informe de latencia, parte 3
docker exec -w /home/node/project agent sh -c "printf '%s\n' '// Un tiempo límite: el percentil 95 más un 20 por ciento de margen, redondeado a 100 ms hacia arriba.' 'function timeoutFor(values) {' ' return Math.ceil(percentile(values, 95) * 120 / 100 / 100) * 100;' '}' 'function over(values, limit) {' ' return values.filter(function (v) { return v > limit; }).length;' '}' >> latency4.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Escribe el informe de latencia, parte 4
docker exec -w /home/node/project agent sh -c "printf '%s\n' 'const limit = timeoutFor(TOTAL);' 'console.log(\"respuesta completa: p50 \" + percentile(TOTAL, 50) + \", p90 \" + percentile(TOTAL, 90) + \", p95 \" + percentile(TOTAL, 95) + \", p99 \" + percentile(TOTAL, 99) + \" ms\");' 'console.log(\"media \" + average(TOTAL) + \" ms, la más lenta \" + Math.max(...TOTAL) + \" ms\");' 'console.log(\"primer token: p50 \" + percentile(FIRST, 50) + \", p95 \" + percentile(FIRST, 95) + \" ms\");' 'console.log(\"tiempo límite \" + limit + \" ms corta \" + over(TOTAL, limit) + \" de \" + TOTAL.length);' 'console.log(\"un tiempo límite de 2000 ms cortaría \" + over(TOTAL, 2000) + \" de \" + TOTAL.length);' >> latency4.js"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Ejecuta el informe
docker exec -w /home/node/project agent node latency4.jsSe muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Estas duraciones están grabadas
Nada aquí hace lenta una llamada a propósito. Las veinte duraciones están grabadas y son inventadas, así que todos los estudiantes obtienen los mismos números. Un sistema real las lee de sus trazas, como en la primera lección.
El Run no llama a ningún modelo: no necesita ayudante y no tiene nada que sustituir.
Salida del Run
| Línea | Qué muestra |
|---|---|
| respuesta completa: p50 900, p90 2300, p95 4200, p99 7800 ms | La forma de la respuesta completa |
| media 1493 ms, la más lenta 7800 ms | La media queda entre los dos grupos |
| primer token: p50 230, p95 500 ms | El flujo enseña un primer token mucho antes |
| tiempo límite 5100 ms corta 1 de 20 | p95 más un 20 por ciento, redondeado a 100 |
| un tiempo límite de 2000 ms cortaría 3 de 20 | Una suposición corta respuestas buenas |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.