2008-09-16 10 views
8

Wenn Sie einen benutzerdefinierten Server schreiben, welche Best Practices oder Techniken gibt es, um die maximale Anzahl von Benutzern zu bestimmen, die sich jederzeit mit dem Server verbinden können?Wie viele Netzwerkverbindungen kann ein Computer unterstützen?

Ich würde davon ausgehen, dass die Fähigkeiten der Computer-Hardware, Netzwerkkapazität und Server-Protokoll alle wichtige Faktoren sein würden.

Denken Sie außerdem, dass es eine gute Methode ist, die Anzahl der Netzwerkverbindungen auf eine bestimmte maximale Anzahl von Benutzern zu beschränken? Oder sollte der Server die Anzahl der Netzwerkverbindungen nicht einschränken und die Leistung beeinträchtigen, bis die Reaktionszeit extrem hoch ist?

Antwort

7

Dan Kegel zusammen eine Zusammenfassung von Techniken für die von einem einzigen Server große Mengen an Netzwerkverbindungen Handhabung hier: http://www.kegel.com/c10k.html

+0

Das Papier wirklich alt aussieht (1999) und nicht wirklich auf dem neuesten Stand. Zum Beispiel ist das Ulimit unter Linux (zumindest Ubuntu) auf unbegrenzt gesetzt ... also ist es wahrscheinlich nicht nötig, es auf 32768 zu setzen? –

5

Im Allgemeinen können moderne Server sehr viele gleichzeitige Verbindungen verarbeiten. Ich habe an Systemen mit über 8000 gleichzeitig geöffneten TCP/IP Sockets gearbeitet.

Sie benötigen eine qualitativ hochwertige Serviceschnittstelle, um diese Art von Belastung zu bewältigen, überprüfen Sie libevent oder libev.

0

Einer der größten Rückschläge bei Verbindungen mit hohem Parallelitätsgrad sind die beteiligten Router. Heimnutzerorientierte Router haben normalerweise eine kleine NAT-Tabelle, die verhindert, dass der Router die Verbindungen des Servers tatsächlich bedient.

Achten Sie darauf, Ihre Router/Netzwerk-Infrastruktur-Setup genauso gut zu erforschen.

0

Ich denke, dass Sie die Anzahl der Verbindungen, die Ihr Server erlaubt, nicht begrenzen sollten - fangen Sie einfach alle Ausnahmen ein, die beim Annehmen und Schließen von Verbindungen auftreten könnten, und Sie sollten in Ordnung sein. Sie sollten diese Art der Programmierung auf niedrigeren Ebenen zu den zugrunde liegenden Betriebssystem-Ebenen verlassen - so können Sie Ihren Server einfacher portieren etc.

0

Dies hängt wirklich von Ihrem Betriebssystem ab.

Verschiedene Unix-Varianten wird „unbegrenzt“ Anzahl von Datei-Handles/Steckdosen andere haben hohe Werte wie 32768.

Eine typische Benutzer Grenze 8192 unterstützen, aber es kann in der Regel höher eingestellt werden.

Ich denke Windows ist begrenzender, aber die Server-Version kann höhere Grenzen haben.

4

Das ist eine gute Frage und es ist definitiv situationsbedingt. Was ist dein Computer? Verfügen Sie über einen 4-Sockel-Computer mit Quad-Core-Xeons, 128 GB RAM und Fibre-Channel-Konnektivität (wie die beiden Dell R900, die wir gerade gekauft haben)? Oder laufen Sie auf einem p3 550 mit 256 MB RAM und 56K Modem? Wie viel Last wird jede Verbindung auf Ihrem Server gespeichert? Welche Art von Antwort ist akzeptabel?

Dies sind die Fragen, die Sie beantworten müssen. Ich denke, der beste Weg, die Antwort zu finden, ist durch Belastungstests. Erstellen Sie einen Komponententest der erwarteten (und möglicherweise unerwarteten) Pfade, die der Code für Ihren Server ausführt. Suchen Sie nach einem Lasttest-Framework, mit dem Sie 10, 100, 1000, 10000 Benutzer simulieren können, die diese Aufgaben gleichzeitig ausführen.

Das wird Ihnen sagen, wie viele Verbindungen Ihr Computer unterstützen kann.

Das Tolle am Load-/Unit-Test-Szenario ist, dass Sie in Ihren Komponententests Reaktionszeiten einkalkulieren und die Last erhöhen können, bis Sie außerhalb Ihrer Reaktionszeit liegen. Wenn Sie eine X-Anzahl von Benutzern mit Y-Sekunden-Antwort unterstützen müssen, können Sie dies mit Ihren Auslastungstests demonstrieren.