2016-11-04 4 views
0

Ich arbeite an einer Nodejs-Anwendung und die Anforderung ist, um 10k Anfragen pro Sekunde pro Verbindung zu senden. Die Client-Anwendung muss eine Websocket-Verbindung öffnen, um diese Requets zu senden, und auf der Serverseite muss sie nur die Daten empfangen und an eine Warteschlange senden. Die Anzahl der Socket-Verbindungen auf der Serverseite ist nicht so groß, kann etwa 1k betragen. Ich habe einige Fragen diesbezüglich und jede Hilfe wird sehr geschätzt.Nodejs Websocket

  • Erstens, ist es möglich, dieses Setup mit einem einzigen Master-Prozess zu erreichen? Da ich die Web-Socket-Verbindungen nicht mit den Child-Prozessen teilen kann, muss ich die Bandbreite vom Master-Prozess beziehen.
  • Als ich Benchmarking von Nodejs WS Bibliothek versuchte, konnte ich nur ca. 1k Anfragen pro Sekunde von je 9kb senden. Wie kann ich den Durchsatz erhöhen?
  • Gibt es Beispiele, wie man maximalen Durchsatz erreicht, da ich nur Posts finden kann, wie man maximale Verbindungen erreicht?

Danke.

Antwort

1

werden Sie schließlich

Ersten maßstab müssen, ist es möglich, diese Einrichtung mit einem einzigen Master-Prozess zu erreichen?

Ich glaube nicht, dass es möglich ist, dies mit einem einzigen Thread zu erreichen. (Sie berücksichtigen sollten, Skalierung und entwerfen nie selbst von dieser Option zu beschränken)

Da kann ich nicht auf die Web-Socket-Verbindungen mit den geordneten Prozesse teilen Ich brauche die Bandbreite von Master-Prozess zu bekommen.

Ich bin sicher, Sie glücklich sein über die Existenz von socket.io-redis zu kennen.

Damit können Sie Ereignisse (teilen Sie Clients) zwischen mehreren Instanzen Ihres Codes (Prozesse oder Server) senden/empfangen. Read more : socket.io-redis (Github)

Ich weiß, Sie sprechen über ws aber vielleicht ist es wert, die Änderung zu socket.io. Image Source Article socket comparison

Speziell wissen Sie beide vertikal (erhöhen die Anzahl der Fäden pro Maschine) skalieren kann und horizontal (mehr „Masters“ accross mehr Maschinen bereitstellen) mit relativer Leichtigkeit. (Und ich wiederhole mich: teilen Sie Ihre Socket-Clients & Kommunikation alle Instanzen accross)

Als ich versuchte, Benchmarking NodeJS ws Bibliothek, ich war nur in der Lage jede etwa 1k Anfragen pro Sekunde von 9 kb zu senden. Wie kann ich den Durchsatz um erhöhen?

Ich würde vorschlagen, socket.io + Buchse versuchen.io-redis

  1. Spawn ein Master mit einer Anzahl von Arbeitern gleich der Anzahl der CPU-Kerne . (vertikale Skalierung)
  2. Stellen Sie Ihren Master über 2 oder mehr Maschinen bereit (horizontale Skalierung)
  3. erfahren Sie mehr über Load-Balancing & Benchmarks durchführen.

Gibt es Beispiele dafür, wie max Durchsatz zu erreichen, da kann ich nur Beiträge mit finden, wie max Verbindungen zu erreichen?

Sie erhöhen den Gesamtdurchsatz, wenn Sie die Anzahl der Instanzen erhöhen, die mit Clients kommunizieren. (Horizontal + Vertikale Skalierung)

Dies auch eine interessante Lektüre sein könnte:

Ich hoffe, es hat geholfen.