Escenario
Hemos configurado un acceso remoto a un ordenador de la oficina usando Guacamole y TightVNC. Apache Guacamole hace de puerta de entrada a un escritorio, sin necesidad de instalar un cliente, basta con un navegador web. Permite protocolos estándares como VNC, RDP, y SSH.
Problema
Los usuarios reportaban un marcado retraso entre el tecleo y la aparición de las palabras en la pantalla. Sin embargo, las ventanas del escritorio se abrían rápidamente. Daba la impresión de que, cuando menor la información transmitida, mayor la latencia.Solución
Acabamos concluyendo que «el cuello de botella» lo estaba causando el servidor proxy, nginx. Si prescindíamos de él, disminuía de manera significativa la latencia. Por defecto, nginx usa un búfer o memoria intermedia, de manera que los datos enviados por el servidor no se transmiten inmediatamente al cliente. Si el cliente es lento, esto permite a nginx cerrar la conexión con el backend antes y mejorar la performance dado que puede distribuir la información al cliente según las el ritmo que permita éste. En nuestro caso estaba perjudicando por que requeríamos una respuesta inmediata, independientemente del tamaño de los datos transmitidos. Esto se soluciona fácilmente con una directiva en el bloque de configuración server
1 |
proxy_buffering off; |