2016-07-29 20 views
0

Angenommen, ich habe eine API-App, die für die Verbindung mit Benutzer-Apps über das Internet geöffnet ist. Sagen wir, 10.000 Benutzer verbinden sich mit ihren Client-Apps.Unterstützung mehrerer Socket-Verbindungen mit Erlang via Web

Ich frage mich, wie verwalte ich 10000 gleichzeitige Verbindungen? Ich meine, muss ich 10000 Ports in meinem System haben, um sie zu verbinden, wie 1000-11000?

Wie funktioniert es, wenn ich Nginx oder Apache als Reverse Proxy verwende?

Antwort

0

Nein, Sie würden nicht 10000 Ports benötigen. Diese Frage ist ein bisschen weit in dem Sinne, dass wir Ihre Hardwarekonfiguration nicht kennen.

Wenn mehrere Server vorhanden sind, kann dies relativ einfach mit mehreren Upstream-Servern durchgeführt werden, für die Sie die Verbindung herstellen. Auf jedem dieser Server binden Sie sich an einen Unix-Socket, um den Overhead der Verbindung zu reduzieren (so dass Sie auch keine zusätzlichen Ports verwenden).

Die Nginx-Konfiguration muss abhängig von der Hardware, die Sie ausführen (z. B. Anzahl der Worker-Prozesse und Worker-Verbindungen), angepasst werden. Sie müssen außerdem Ihre keep_alive-Zeitüberschreitungen und Caching-Richtlinien konfigurieren. Die Aktivierung der Komprimierung kann von Vorteil sein, kann jedoch zu viele CPU-Zyklen verbrauchen, wenn Sie sie zu hoch einstellen. Also wieder, es ist Hardware abhängig.

Eine andere Sache zu beachten ist Ihre Gateway-Schnittstelle (z. B. wsgi, fcgi, uWSGI, etc ..). Auch diese haben Konfigurationen, die angepasst werden müssen. Theoretisch könnten diese Verbindungsschnittstellen jeweils an ihren eigenen Socket binden, sodass Sie mehrere Anwendungsserver auf einem einzelnen Server simulieren könnten. Dies wird jedoch die Situation nicht verbessern. Ein letzter Kommentar: Wenn Sie einen einzelnen Server betreiben und 10000 gleichzeitige Verbindungen erreichen möchten, kann Nginx den Datenverkehr in den meisten Fällen bewältigen. Der Flaschenhals tritt auf Ihrem App-Server auf. Viele Male kann es nicht mit der Last umgehen. Versuchen Sie in diesem Fall, Ihre Codebasis zu optimieren oder einen anderen Server zu erwerben (oder die Hardware zu aktualisieren).

Siehe post zum Einstellen von Nginx. Ich kann kein Apache-Setup kommentieren.

Zusammenfassend benötigen Sie nur einen Port für die eingehende Verbindung, wenn Sie Unix-Sockets verwenden. Sie benötigen 2 oder mehr, wenn Sie die Verbindung zu Ihrem Anwendungsserver herstellen möchten, die für einen anderen Port verbindlich ist.

Haftungsausschluss: Ich bin kein Experte, aber ich versuchte trotzdem zu antworten.