Cómo ampliar un servidor web que admita encuestas largas

Cómo ampliar un servidor web que admita encuestas largas

Estoy planeando agregar más servidores de aplicaciones web para admitir un número cada vez mayor de clientes, implementando HAproxy y Keepalived para equilibrio de carga y alta disponibilidad.

El uso de mi servidor tiene la siguiente característica:

  1. Los trabajos no requieren mucha CPU. Los mensajes son texto JSON de menos de 100 caracteres.
  2. Los usuarios enviarán mensajes al servidor a través del dispositivo Cliente Y. Generalmente 4-5 mensajes por día
  3. Los dispositivos cliente X siguen esperando el mensaje del servidor. Si el mensaje está disponible en el servidor, el dispositivo cliente X debe poder recibirlo en 2 segundos. De lo contrario, este mensaje estará desactualizado.

Por esta razón,

  1. Dispositivos cliente que X está usandoconexión HTTP de sondeo largapara poder responder. Cada conexión durará 5 segundos y se volverá a conectar.
  2. Los dispositivos cliente X y los dispositivos cliente Y están conectados al mismo servidor, por lo que X e Y pueden enviar mensajes fácilmente

Pregunta

Si hay más de 60.000 dispositivos Cliente X conectados al servidor, mi equilibrador de carga o enrutador se quedará sin puerto TCP. ¿Cuál es la mejor manera de ampliar la escala para, digamos, 20 000 usuarios?

Mi servidor se ejecuta en un servidor Ubuntu, usando Tomcat y Java Servlet.

Respuesta1

No creo que tus 60.000 clientes sean el problema real. Lo más probable es que tenga problemas porque no hay suficientes descriptores de archivos, pero eso debería ser fácil de solucionar como parte de la configuración del sistema operativo.

He aquí por qué las conexiones no serán su problema. Cada conexión se caracteriza por su dirección IP de origen, puerto de origen, dirección IP de destino y puerto de destino. Dentro de la pila de red, este cuádruple se utiliza para hacer coincidir paquetes con descriptores de archivos (cada descriptor de archivo representa una conexión). Su servidor tiene una dirección IP de destino y un puerto de destino fijos (su servidor es el destino de su cliente), pero la dirección IP de origen y el puerto de origen son variables. El puerto es un número de 16 bits, por lo tanto, el número máximo de conexiones de un cliente es 64 KB. La dirección IPv4 es un número de 32 bits que proporciona 4.294.967.296 posibles direcciones de origen. Haciendo algunos cálculos básicos, su servidor podría tener 64K * 4,294,967,296 conexiones asignadas a una única IP y puerto de origen.

Esta es la razón por la que es más probable que tenga problemas con la cantidad máxima de descriptores de archivos abiertos que con la cantidad de clientes.

Respuesta2

El enfoque más sencillo podría ser implementar el equilibrio de carga a nivel de DNS.

Medios: tener una entrada DNS round robin que equilibre 2, 3 o más balanceadores de carga físicos.

información relacionada