sábado, 1 de noviembre de 2014

¿Habilitar Keep-alive consume mucha memoria? Solucionalo con HAProxy

Vamos a ver como, gracias a HAProxy, podemos habilitar keep-alive en un servidor web, sin que el consumo de memoria crezca más allá de lo deseable.


¿Para que sirve habilitar keep-alive?


Cuando habilitamos la funcionalidad keep-alive, en un servidor, lo que estamos haciendo es que el servidor permita, a los clientes, realizar más de una petición en la misma conexión. Esto agiliza la carga de las páginas web compuestas por múltiples archivos.

¿Todo es tan bonito de verdad?


Pues no. Como en todo, hay una parte negativa. Al no cerrar la conexión, inmediatamente después de responder a la petición, el resultado es que el número de conexiones abiertas aumenta. Como cada conexión consume memoria RAM nos podemos encontrar en una situación en que ya no se puedan abrir nuevas conexiones por falta de memoria, o que se haga uso de la memoria de intercambio, cosa poco deseable en un servidor web.

Que keep-alive hablitado pueda darnos problemas dependerá de la carga de peticiones que reciba el servidor y de la capacidad del servidor. En servidores VPS es más fácil que se presenten problemas, ya que la RAM suele ser menor que en un servidor dedicado.

Ajustando, en la configuración del servidor, el número máximo de peticiones que aceptará una conexión y el tiempo máximo de espera para una nueva petición de un cliente se puede optimizar el uso de los recursos.

HAProxy a la ayuda


HAProxy es una solución para proporcionar alta disponibilidad y balanceo de carga en aplicaciones basadas en TCP y HTTP.

La gracia es que admite conexiones persistentes (keep-alive) desde los clientes, mientras se conecta con conexiones no persistentes a los servidores. El resultado es que desde el punto de vista de los clientes las conexiones son persistentes, con las ventajas que ello implica, mientras que desde el punto de vista del servidor son no persistentes, con el consecuente ahorro en memoria utilizada.

HAProxy es muy ligero, con lo que, en casi todos los casos, la memoria utilizada al funcionar será bastante menor que la memoria extra necesaria para mantener las conexiones persistentes. También es posible instalar HAProxy en otro servidor, probablemente un VPS de bajo coste. Mientras que HAProxy esté en el mismo centro de datos, que el servidor web, el rendimiento será prácticamente el mismo que si estuviera en la misma maquina.

En las siguiente imagen se pueden ver como el número de conexiones activas, que se corresponden con los workers, disminuyo drásticamente  al instalar HAProxy.



No hay comentarios:

Publicar un comentario