Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

Uso de mecanismos de mantenimiento de conexiones (Keep-alive) de TCP para proteger el servidor

En el servidor, el uso de mecanismos de mantenimiento de conexiones (keep-alive) impide que el servidor malgaste los recursos del sistema en caso de existir un cliente desactivado (o con partición en red). Si no se limpian los recursos de un servidor que ha permanecido activo durante un largo periodo, es posible que, con el tiempo, aumente el número de recursos malgastados de forma ilimitada a medida que los clientes se bloquean y reinician.

Si la comunicación entre el cliente y el servidor utiliza una secuencia TCP, ambos deberían habilitar el mecanismo keep-alive de TCP. Esta disposición se aplica incluso a los casos en los que no hay una alta disponibilidad y sólo hay un servidor.

Otros protocolos orientados a la conexión pueden disponer también de mecanismos keep-alive.

En el cliente, el uso de mecanismos keep-alive de TCP permite notificar al cliente cuándo se ha realizado una recuperación ante fallos o una conmutación por error del recurso de dirección de red de un host físico a otro. Esa transferencia del recurso de dirección de red interrumpe la conexión de TCP. Sin embargo, salvo que el cliente haya habilitado el mecanismo keep-alive, no siempre recibirá información de la interrupción de la conexión, si ésta parece inactiva en ese momento.

Por ejemplo, suponga que el cliente está esperando una respuesta del servidor a una solicitud que requiere mucho tiempo y que el mensaje de solicitud del cliente ha llegado ya al servidor y se ha reconocido en la capa de TCP. En esta situación, el módulo TCP del cliente no tiene que seguir transmitiendo la solicitud. Además, el cliente se encuentra bloqueado, esperando una respuesta a la solicitud.

Si es posible, además de utilizar el mecanismo keep-alive de TCP, el cliente de aplicación debe realizar su propio mecanismo de mantenimiento de conexión periódico en su nivel. El mecanismo keep-alive de TCP no es perfecto en todos posibles casos de limitaciones. Si se utiliza un mecanismo keep-alive en el nivel de la aplicación, será necesario generalmente que el protocolo de cliente-servidor admita una operación nula (null) o, al menos, una operación de sólo lectura eficaz como, por ejemplo, una operación de estado.