Pregunta

Tengo 1 proceso que recibe conexión entrante desde el puerto 1000 en 1 Linux servidor.Sin embargo, un proceso no es lo suficientemente rápido para manejar todas las solicitudes entrantes.

Quiero ejecutar múltiples procesos en el servidor pero con 1 punto final.De esta manera, el cliente solo verá 1 punto final/proceso, no varios.

He comprobado LVS y otras soluciones de equilibrio de carga.Esas soluciones parecen orientadas al equilibrio de carga de múltiples servidores.

¿Alguna otra solución para ayudar en mi caso?


Estoy buscando algo más parecido a nginx, donde necesitaré ejecutar varias copias de mi aplicación.

Déjame intentarlo.

Gracias por la ayuda.

¿Fue útil?

Solución

También es posible que desees utilizar un servidor web como nginx.Puede equilibrar la carga de su aplicación en múltiples puertos de la misma aplicación y se usa comúnmente para equilibrar la carga de aplicaciones Ruby on Rails (que son de un solo subproceso).La desventaja es que necesita ejecutar varias copias de su aplicación (una en cada puerto) para que funcione este equilibrio de carga.

Otros consejos

La pregunta no me queda clara, pero sospecho que la respuesta que busca es tener un único proceso que acepte tareas de la red y luego separe los 'procesos de trabajo' para realizar el trabajo (antes de devolver el resultado al usuario).

De esa forma, el trabajo que se está realizando no impide la aceptación de más solicitudes.

Como usted señala, el término equilibrio de carga conlleva la implicación de múltiples servidores: lo que desea buscar es información sobre cómo escribir un demonio de red Linux.

Las dos llamadas al sistema kes que querrás ver se llaman tenedor y ejecutivo.

Parece que solo necesitas integrar tu servidor con xinetd.

Este es un servidor que escucha en puertos predefinidos (que usted controla a través de la configuración) y bifurca procesos para manejar la comunicación real en ese puerto.

Necesita multiprocesamiento o subprocesos múltiples.No eres específico sobre los detalles del servidor, por lo que no puedo darte consejos sobre qué hacer exactamente.fork y exec, como sugirió Matt, pueden ser una solución, pero en realidad:¿De qué tipo de protocolo/servidor estamos hablando?

Estoy pensando en ejecutar varias aplicaciones similares a ypops.

nginx es genial, pero si no te apetece un servidor web completamente nuevo, Apache 2.2 con mod proxy balanceer hará el mismo trabajo.

¿Quizás pueda modificar su cliente a los puertos round robin (digamos) 1000-1009 y ejecutar 10 copias del proceso?

Alternativamente, debe haber alguna forma de refactorizarlo internamente.

Es posible que varios procesos escuchen el mismo socket a la vez al abrirlo antes de llamar a fork(), pero (si es un socket TCP) una vez que se llama a Accept(), el socket resultante pertenece al proceso que aceptó exitosamente la conexión.

Básicamente, podrías usar:

  • Prefork, donde se abre el socket, se bifurca un número específico de hijos que luego comparten la carga
  • Post-bifurcación, donde tiene un proceso maestro que acepta todas las conexiones y bifurca a los hijos para manejar sockets individuales
  • Subprocesos: puede compartir los sockets de la forma que desee con ellos, ya que los descriptores de archivos no se clonan, simplemente están disponibles para cualquier subproceso.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top