Question

J'ai 1 processus qui reçoit la connexion entrante de port 1000 en 1 linux serveur.Toutefois, 1 le processus n'est pas assez rapide pour traiter toutes les requêtes entrantes.

Je veux exécuter plusieurs processus sur le serveur mais avec 1 point final.De cette façon, le client verra seulement 1 point de fin, un processus, pas plusieurs.

J'ai vérifié LVS et d'autres Solution d'Équilibrage de Charge.Ces solutions semblent orientés vers plusieurs serveurs d'équilibrage de charge.

Toute autre solution pour aider sur mon cas?


je suis à la recherche de quelque chose de plus comme nginx où j'aurai besoin de faire de multiples copies de mon application.

Laissez-moi essayer.

Merci pour l'aide.

Était-ce utile?

La solution

Vous pouvez aussi aller avec un serveur web comme nginx.Il peut équilibrer la charge de votre application à l'encontre de plusieurs ports de la même application, et est couramment utilisé pour équilibrer la charge de Ruby on Rails applications (qui sont mono-thread).L'inconvénient est que vous devez exécuter plusieurs copies de votre application (un sur chaque port) pour ce équilibrage de la charge de travail.

Autres conseils

La question est un peu claire pour moi, mais je soupçonne que la réponse que vous cherchez est d'avoir un seul processus d'acceptation de tâches à partir du réseau, et ensuite bifurquer off "processus de travail" pour effectuer le travail (avant de retourner le résultat à l'utilisateur).

Dans ce sens, le travail qui est fait ne pas bloquer l'acceptation de plus en plus de demandes.

Comme vous le soulignez, le terme d'équilibrage de la charge implique de multiples serveurs - ce que vous voulez rechercher des informations sur la manière d'écrire un réseau linux démon.

Les deux kes système d'appels, vous aurez envie de regarder sont appelés fork et exec.

Il semble que vous juste besoin d'intégrer votre serveur avec xinetd.

C'est un serveur qui écoute sur les ports prédéfinis (que vous pouvez contrôler par le biais de la configuration) et bifurque processus pour gérer la communication réelle sur ce port.

Vous avez besoin de multi-traitement ou le multi-threading.Vous n'êtes pas précis sur les détails du serveur, donc je ne peux pas vous donner des conseils sur quoi faire exactement.fork et exec que Matt a suggéré peut être une solution, mais vraiment:ce type de protocole/serveur parlons-nous?

je pense à l'exécution de plusieurs applications similaires à ypops.

nginx est grande, mais si vous n'avez pas envie d'un tout nouveau serveur web, apache 2.2 avec le mod proxy balancer va faire le même travail

Peut-être que vous pouvez modifier votre client de round-robin des ports (dire) 1000-1009 et d'exécuter des 10 exemplaires de ce processus?

Sinon il y a un moyen de l'interne la refactorisation.

Il est possible que plusieurs processus d'écouter la même prise à la fois par l'avoir ouvert avant l'appel à fork(), mais (si c'est un socket TCP) une fois accept() est appelée la résultante socket appartient alors à quel processus réussi à accepter la connexion.

Donc, essentiellement, vous pouvez utiliser:

  • Prefork, où vous ouvrez le support de la fourche un certain nombre d'enfants qui partagent la charge
  • Après la fourche, où vous avez un processus maître qui accepte toutes les connexions et les fourches enfants à gérer individu sockets
  • Threads - vous pouvez partager les prises de quelque façon que vous aimez avec ceux qui, comme les descripteurs de fichiers ne sont pas clonés, ils sont juste à la disposition de n'importe quel thread.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top