Wie viele Systemressourcen werden gehalten, um 1.000.000 Websocket offen zu halten? [geschlossen]


122

Websocket ist gut, aber könnte es 1.000.000 gleichzeitige Verbindungen verarbeiten?
Wie viele Systemressourcen werden gehalten, um 1.000.000 Websocket offen zu halten?

Antworten:


65

Aktualisierte Antwort

Kurze Antwort : Ja, aber es ist teuer.

Lange Antwort :

Diese Frage betrifft nicht nur WebSockets, da WebSockets grundsätzlich langlebige TCP-Sockets mit einem HTTP-ähnlichen Handshake und minimalem Framing für Nachrichten sind.

Die eigentliche Frage ist: Könnte ein einzelner Server 1.000.000 gleichzeitige Socket-Verbindungen verarbeiten und welche Serverressourcen würde dies verbrauchen? Die Antwort wird durch mehrere Faktoren kompliziert, aber 1.000.000 gleichzeitige aktive Socket-Verbindungen sind für ein System mit der richtigen Größe (viel CPU, RAM und schnelles Netzwerk) und mit einem optimierten Serversystem und einer optimierten Serversoftware möglich.

Die Anzahl der Verbindungen ist nicht das Hauptproblem (das ist meistens nur eine Frage der Kerneloptimierung und des ausreichenden Speichers), sondern das Verarbeiten und Senden / Empfangen von Daten zu / von jeder dieser Verbindungen. Wenn die eingehenden Verbindungen über einen langen Zeitraum verteilt sind und meistens inaktiv sind oder nur selten kleine Teile statischer Daten senden, können Sie wahrscheinlich viel mehr als sogar 1.000.000 gleichzeitige Verbindungen erhalten. Selbst unter diesen Bedingungen (langsame Verbindungen, die größtenteils inaktiv sind) treten Probleme mit Netzwerken, Serversystemen und Serverbibliotheken auf, die nicht für die Verarbeitung einer großen Anzahl von Verbindungen konfiguriert und ausgelegt sind.

Siehe Alessandro Alinones Antwort zur ungefähren Ressourcennutzung für 500.000 Verbindungen.

Im Folgenden finden Sie einige ältere, aber noch anwendbare Ressourcen, in denen Sie nachlesen können, wie Sie Ihren Server konfigurieren und Ihre Serversoftware schreiben, um eine große Anzahl von Verbindungen zu unterstützen:


1
Anscheinend sind 12 Millionen Socket-Verbindungen mit einer einzigen JVM möglich. Sehen Sie, wie sie es gemacht haben mrotaru.wordpress.com/2013/10/10/…
Jacques Koorts

@ JacquesKoorts thx
BG BRUNO

159

Auf heutigen Systemen ist die Verarbeitung von 1 Million gleichzeitigen TCP-Verbindungen kein Problem.

Ich kann dies aufgrund unserer eigenen Tests bestätigen (vollständige Offenlegung: Ich bin der CTO bei Lightstreamer).

Wir mussten einigen unserer Kunden mehrmals zeigen, dass 1 Million Verbindungen auf einer einzigen Box (und nicht unbedingt auf einer Super-Monster-Maschine) erreicht werden können. Aber lassen Sie mich die Konfiguration zusammenfassen, in der wir 500K gleichzeitige Verbindungen getestet haben, da dies ein viel neuerer Test ist, der mit Amazon EC2 durchgeführt wurde.

Wir haben Lightstreamer Server (unter anderem ein WebSocket-Server) auf einer m2.4xlarge-Instanz installiert. Dies bedeutet 8 Kerne und 68,4 GiB Speicher.

Wir haben 11 Client-Computer gestartet, um 500.000 gleichzeitige Verbindungen zum Lightstreamer-Server herzustellen. Der Test wurde so konfiguriert, dass der gesamte ausgehende Durchsatz vom Server 90.000 Updates / s betrug, was zu Spitzenwerten der ausgehenden Bandbreite von 450 Mbit / s führte.

Der Server verbrauchte nie mehr als 13 GB RAM und die CPU war zu etwa 60% stabil.

Mit mindestens 30 GB RAM können Sie 1 Million gleichzeitige Sockel verarbeiten. Die benötigte CPU hängt vom benötigten Datendurchsatz ab.


7
Ich gehe davon aus, dass dies eine Art Linux war. Könnten Sie bitte zusätzliche Informationen darüber teilen, wie der Kernel optimiert wurde? maximale Dateideskriptoren / TCP-Fenstergrößen usw.?
Quixver

14
Es war Vanille Amazon Linux. Die maximalen Dateideskriptoren wurden erhöht. Der TCP-Sendepuffer wurde auf 1600 Byte reduziert (standardmäßig von Lightstreamer ausgeführt, kann jedoch manuell angepasst werden). MSS war Standard.
Alessandro Alinone

Ist diese Software vollständig kostenlos oder benötigt sie eine Gebühr, um sie zu verwenden?
Avtandil Kavrelishvili

@AvtandilKavrelishvili: Es gibt sowohl eine kostenlose als auch eine kostenpflichtige Ausgabe.
Alessandro Alinone

Wäre es auf dem Server einfacher, wenn ich anstelle von Websockets regelmäßige Abfragen verwenden würde?
mFeinstein
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.