Colas Ocultas: ¿Por qué tu API se retrasa?

Fuentes: Queueing Requests Queues Your Capacity Problems, Too

Este artículo explora una problemática común en sistemas distribuidos: la gestión de colas de solicitudes (queueing requests) y su impacto en la latencia percibida por los usuarios. A menudo, los dashboards muestran métricas de latencia (como el percentil 90) aparentemente saludables, mientras que los usuarios experimentan retrasos significativos debido a la acumulación de solicitudes en una cola.

El autor ilustra esto con un ejemplo concreto: un API con una capacidad de procesamiento de 1000 solicitudes por segundo. Cuando la demanda se duplica a 2000 solicitudes por segundo, la cola comienza a crecer. Aunque el sistema no rechaza solicitudes (una opción), tampoco puede procesarlas más rápido que las que llegan, lo que resulta en una acumulación masiva. Después de una hora, una solicitud nueva podría tener que esperar una hora entera para ser procesada, generando una latencia percibida de 60 minutos, a pesar de que el tiempo de procesamiento real es de solo 1 segundo. Este artículo enfatiza que la latencia percibida (o latencia del cliente) incluye el tiempo de espera en la cola, mientras que la latencia del servidor no lo hace.

La elección de usar una cola como solución a la sobrecarga tiene un costo: la acumulación de solicitudes y el consiguiente aumento de la latencia. El artículo analiza cómo diferentes estrategias de selección de solicitudes desde la cola (FIFO, selección aleatoria, selección ponderada por cuartiles) afectan la distribución de la latencia. FIFO (First-In, First-Out) es justo pero puede generar latencias muy altas. La selección aleatoria puede mejorar la latencia media, pero empeora el percentil 90. La selección ponderada por cuartiles busca un equilibrio, pero siempre implica que algunas solicitudes se procesen más rápido que otras, lo que es una compensación inherente.

Finalmente, el artículo aborda la implementación práctica de estas estrategias, mencionando Redis como una posible herramienta para implementar colas con diferentes mecanismos de selección. La conclusión principal es que, con una capacidad fija y una cola, siempre habrá una compensación entre la velocidad de algunas solicitudes y la lentitud de otras; la gestión de colas es un juego de suma cero en este contexto. El autor insta a comprender estas dinámicas para tomar decisiones informadas sobre cómo gestionar la capacidad y la experiencia del usuario.