Teoría de colas: qué es y por qué se dispara la latencia
8 min de lectura
La teoría de colas (en inglés queueing theory) es la matemática de las esperas: a partir del ritmo al que llega el trabajo, de lo que tarda cada tarea y del número de servidores, predice cuánto esperan las tareas y cuánto crece la cola. Para el software, su resultado más útil es que el tiempo de respuesta crece despacio con carga moderada y luego de golpe cuando un servidor se acerca al 100 % de ocupación. En el modelo más sencillo, un servidor ocupado el 90 % del tiempo responde de media diez veces más lento que uno libre.
Las cifras de abajo son aritmética a partir de fórmulas estándar, comprobadas con un script, sin ninguna prueba detrás. Las fuentes se comprobaron el 1 de noviembre de 2026.
| Utilización ρ | Tiempo en el sistema W ÷ tiempo de servicio S | Si S = 20 ms |
|---|---|---|
| 0,5 | 2 | 40 ms |
| 0,7 | 3,3 | 67 ms |
| 0,8 | 5 | 100 ms |
| 0,9 | 10 | 200 ms |
| 0,95 | 20 | 400 ms |
| 0,99 | 100 | 2.000 ms |
Son medias para la cola M/M/1: un servidor, llegadas de Poisson y tiempos de servicio exponenciales.
¿Qué es la teoría de colas?
Es la rama de la probabilidad que modela trabajo que llega, espera y se atiende. Una cola se describe por sus llegadas, sus tiempos de servicio, su número de servidores y su disciplina de cola, es decir, el orden en que se atienden las tareas en espera.
Urban Operations Research, de Larson y Odoni, un texto abierto del MIT, cita las ventanillas de banco, las cajas de supermercado y los peajes como casos clásicos. Un servidor web encaja en el mismo esquema: llegan peticiones, los hilos o núcleos las atienden y el resto espera en una cola.
¿De dónde viene la teoría de colas?
De la central telefónica, donde A. K. Erlang obtuvo los primeros resultados para la Compañía Telefónica de Copenhague.
Según su biografía en MacTutor, el artículo de Erlang de 1909 mostró que las llamadas hechas al azar siguen la distribución de Poisson, y su fórmula de 1917 para las pérdidas y el tiempo de espera pronto la usaron compañías telefónicas de muchos países. El artículo de David Kendall de 1953, Stochastic Processes Occurring in the Theory of Queues and their Analysis by the Method of the Imbedded Markov Chain, introdujo la notación que aún se usa, como recoge el relato de su obra de Geoffrey Grimmett. La demostración de L = λW de Little y los resultados de Kingman sobre tráfico intenso llegaron en 1961.
¿Qué significa la notación de Kendall, como M/M/1?
Nombra una cola en tres partes, A/S/c: la distribución de los intervalos entre llegadas, la de los tiempos de servicio y el número de servidores. M/M/1 significa llegadas aleatorias, tiempos de servicio exponenciales y un servidor.
M viene de memoryless, sin memoria (llegadas de Poisson o tiempos exponenciales), D de determinista y G de general, es decir, cualquier distribución: M/D/1 es un servidor con tiempo de servicio constante.
¿Cómo crece el tiempo de respuesta con la utilización?
En una cola M/M/1, el tiempo medio en el sistema es W = 1/(μ − λ), que equivale a S/(1 − ρ). Cuando la utilización ρ se acerca a 1, W crece sin límite.
lambda = arrival rate mu = service rate (1 / S)
rho = lambda / mu (utilization, must stay below 1)
W = 1 / (mu - lambda) = S / (1 - rho)
Larson y Odoni lo deducen para una centralita con una sola operadora y muestran que con ρ ≥ 1 no hay estado estacionario: la cola no deja de crecer. La misma fuente muestra que el tiempo en el sistema sigue una distribución exponencial, así que cada percentil crece por el mismo factor 1/(1 − ρ), y el p95 ronda el triple de la media: 600 ms en la fila 0,9 de arriba.
¿Por qué la latencia hace un codo antes de que la CPU llegue al 100 %?
Porque una petición espera cada vez que encuentra el servidor ocupado, y eso ocurre más a menudo a medida que sube la utilización. Con los supuestos de M/M/1, el tiempo de respuesta ya se ha duplicado al 50 % de utilización.
El recurso que se satura también puede ser un pool de conexiones, un bloqueo de la base de datos o un bucle de eventos de un solo hilo, y el más cargado marca la curva. Ese codo temprano explica por qué la utilización objetivo queda muy por debajo del 100 %. Calcula hacia atrás desde tu presupuesto de latencia: con S = 20 ms y una media objetivo de 100 ms, la tabla permite alrededor del 80 %, y un objetivo de 60 ms alrededor del 67 %, antes de que los picos se lleven su parte.
El panel de capacidad de LoadFocus agrupa una prueba terminada por el número de usuarios virtuales activos e indica el último nivel que aguantó antes de que la tasa de errores superara el 1 % o el p95 pasara del doble del mejor nivel, siempre que ningún nivel superior se recuperara. Necesita una prueba con un solo generador de carga que suba por al menos tres escalones de carga, con el más alto al menos al doble del más bajo. Según la cuenta de arriba, si el nivel más ligero dejó el cuello de botella casi inactivo, la duplicación salta justo por encima del 50 % de utilización; si ya lo cargaba hasta ρ0, salta más tarde, por encima de (1 + ρ0)/2 con M/M/1.
¿Por qué la variabilidad importa tanto como la utilización?
Las colas nacen del azar: llegadas en ráfagas y tareas lentas de vez en cuando. Con tráfico intenso, el tiempo de espera crece con la variabilidad de ambas, multiplicada por un término ρ/(1 − ρ).
El artículo de Kingman de 1961, The single server queue in heavy traffic, muestra que cuando la intensidad de tráfico de un servidor único se acerca a 1, la cola es larga y el tiempo de espera es aproximadamente exponencial. Apuntes de curso de la TU Eindhoven y del Technion dan una aproximación para su media (el Technion la llama aproximación de Allen-Cunneen; también se conoce ampliamente como fórmula de Kingman):
Wq ≈ rho / (1 - rho) × (ca² + cs²) / 2 × S
ca, cs = coefficient of variation (std dev / mean)
of arrival gaps and of service times
Wq es la espera antes de que empiece el servicio, y ca, cs son los coeficientes de variación. Los tiempos exponenciales tienen c² = 1, lo que da la espera de M/M/1 de 9S al 90 % de utilización. Un tiempo de servicio constante la reduce a la mitad, 4,5S; con cs² = 4, lo que puede producir una mezcla de aciertos de caché y llamadas lentas a la base de datos, sube a 22,5S. El tráfico sintético regular varía menos que el de producción, así que una prueba suele mostrar menos cola que los picos reales.
¿Cómo ayudan más servidores (M/M/c)?
Varios servidores que comparten una cola absorben las ráfagas aleatorias mucho mejor que los mismos servidores con una cola cada uno, así que cada servidor puede trabajar con más carga para la misma espera.
Según las fórmulas M/M/m de Larson y Odoni, con cada servidor ocupado al 90 %, W es 10S con un servidor, 5,3S con dos que comparten cola y 3,0S con cuatro. Cuatro instancias detrás de un balanceador que elige una libre se comportan como el último caso; cuatro que reciben cada una un cuarto aleatorio del tráfico, como colas M/M/1 separadas a 10S.
¿Qué tiene que ver la ley de Little?
La ley de Little, L = λW, relaciona el número medio de peticiones en un sistema con su tasa de llegada y su tiempo dentro, sean cuales sean las distribuciones. La teoría de colas te da W, y la ley de Little lo convierte en L.
En la fila 0,9, 45 peticiones por segundo con W = 200 ms suponen de media 9 peticiones dentro. Nuestro artículo sobre la ley de Little usa la misma ley para dimensionar y comprobar pruebas de carga.
¿Dónde dejan de valer estos modelos en las pruebas de carga?
Suponen un flujo abierto de llegadas independientes y un estado estacionario. Una prueba con un número fijo de usuarios virtuales es un sistema cerrado, donde las llegadas se frenan cuando se frenan las respuestas.
- Pruebas cerradas. Con N usuarios virtuales hay como mucho N peticiones en el sistema, así que el ritmo de peticiones cae donde una cola abierta crecería, y el tiempo de reflexión lo baja aún más. Nuestro artículo sobre el modelo de carga abierto vs cerrado explica por qué eso oculta la saturación.
- LoadFocus ejecuta scripts de k6, pero los escenarios arrival-rate se ejecutan allí con un número fijo de usuarios, como avisa su validador de scripts. Lee esas pruebas como cerradas: pasado el codo, espera un ritmo de peticiones plano y tiempos de respuesta en aumento.
- Estado estacionario. El calentamiento, las cachés y el autoescalado cambian la tasa de servicio durante la prueba, así que compara niveles mantenidos el tiempo suficiente para estabilizarse.
FAQ
¿Se escribe queueing theory o queuing theory? Las dos grafías inglesas son correctas y nombran el mismo campo. El artículo de Kingman de 1961 escribe «queueing time», mientras que la demostración de Little del mismo año lleva «Queuing Formula» en el título.
¿La teoría de colas necesita llegadas de Poisson? Solo para los resultados exactos de M/M/1. Las aproximaciones G/G/1 como la fórmula de Kingman usan la media y la variabilidad de los intervalos entre llegadas y de los tiempos de servicio, y la ley de Little no supone nada sobre las distribuciones.
Lecturas relacionadas
- Ley de Little en pruebas de carga: dimensionar y comprobar
- Modelo de carga abierto vs cerrado: cuál usar y cuándo
- Rendimiento vs latencia: cómo se relacionan bajo carga
- Latencia de cola: qué es y cómo medirla
- Tiempo de reflexión en pruebas de carga: cómo fijarlo
Las afirmaciones técnicas de este artículo no se han revisado de forma independiente.