Frage

Ich habe 1 Prozess, der eingehende Verbindungen von Port 1000 in 1 empfängt Linux Server.Allerdings ist ein Prozess nicht schnell genug, um alle eingehenden Anfragen zu bearbeiten.

Ich möchte mehrere Prozesse auf dem Server ausführen, jedoch mit einem Endpunkt.Auf diese Weise sieht der Client nur einen Endpunkt/Prozess, nicht mehrere.

Ich habe LVS und andere Lastausgleichslösungen überprüft.Diese Lösungen scheinen auf den Lastausgleich mehrerer Server ausgerichtet zu sein.

Gibt es eine andere Lösung, die in meinem Fall weiterhilft?


Ich sehe eher nach Nginx aus, wo ich mehrere Kopien meiner App ausführen muss.

Lass es mich ausprobieren.

Danke für die Hilfe.

War es hilfreich?

Lösung

Möglicherweise möchten Sie auch einen Webserver wie verwenden Nginx.Es kann den Lastausgleich Ihrer App gegen mehrere Ports derselben App durchführen und wird häufig zum Lastausgleich von Ruby on Rails-Apps (die Single-Threaded sind) verwendet.Der Nachteil besteht darin, dass Sie mehrere Kopien Ihrer App ausführen müssen (eine auf jedem Port), damit dieser Lastausgleich funktioniert.

Andere Tipps

Die Frage ist mir etwas unklar, aber ich vermute, dass die Antwort, die Sie suchen, darin besteht, dass ein einzelner Prozess Aufgaben aus dem Netzwerk annimmt und dann „Arbeitsprozesse“ abspaltet, um die Arbeit tatsächlich auszuführen (bevor das Ergebnis an das Netzwerk zurückgegeben wird). Benutzer).

Auf diese Weise blockiert die geleistete Arbeit nicht die Annahme weiterer Anfragen.

Wie Sie betonen, bezieht sich der Begriff „Lastausgleich“ auf mehrere Server. Sie suchen nach Informationen zum Schreiben eines Linux-Netzwerk-Daemons.

Die beiden Kes-Systemaufrufe, die Sie sich ansehen möchten, werden aufgerufen Gabel und Exec.

Es hört sich so an, als müssten Sie nur Ihren Server integrieren xinetd.

Dies ist ein Server, der vordefinierte Ports abhört (die Sie über die Konfiguration steuern) und Prozesse abzweigt, um die eigentliche Kommunikation auf diesem Port abzuwickeln.

Sie benötigen Multi-Processing oder Multi-Threading.Sie machen keine genauen Angaben zu den Serverdetails, daher kann ich Ihnen keinen Rat geben, was genau zu tun ist.fork und exec, wie Matt vorgeschlagen hat, können eine Lösung sein, aber wirklich:Über welche Art von Protokoll/Server sprechen wir?

Ich denke darüber nach, mehrere ähnliche Anwendungen auszuführen Yupps.

Nginx ist großartig, aber wenn Sie keine Lust auf einen ganz neuen Webserver haben, erledigt Apache 2.2 mit Mod-Proxy-Balancer die gleiche Aufgabe

Vielleicht können Sie Ihren Client auf Round-Robin-Ports (z. B. 1000–1009) umstellen und 10 Kopien des Prozesses ausführen?

Alternativ muss es eine Möglichkeit geben, es intern umzugestalten.

Es ist möglich, dass mehrere Prozesse gleichzeitig auf denselben Socket lauschen, indem er ihn vor dem Aufruf von fork() öffnet. Wenn es sich jedoch um einen TCP-Socket handelt, gehört der resultierende Socket nach dem Aufruf von Accept() zu dem Prozess, der die Verbindung erfolgreich akzeptiert hat.

Im Wesentlichen könnten Sie also Folgendes verwenden:

  • Prefork, bei dem Sie den Socket öffnen, forkt eine bestimmte Anzahl von Kindern, die sich dann die Last teilen
  • Post-Fork, bei dem Sie über einen Master-Prozess verfügen, der alle Verbindungen akzeptiert und untergeordnete Elemente forkt, um einzelne Sockets zu verwalten
  • Threads – Sie können die Sockets auf beliebige Weise mit diesen teilen, da die Dateideskriptoren nicht geklont werden, sondern nur für jeden Thread verfügbar sind.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top