NGINX-WebSocket-Performance

NGINX | 24. Juni 2014

Wir haben kürzlich die Skalierbarkeit von NGINX beim Load-Balancing von WebSocket-Verbindungen getestet. Selbst bei 50.000 aktiven WebSocket-Verbindungen benötigte NGINX weniger als 1 GB Arbeitsspeicher und weniger als einen CPU-Kern. Auch unter hoher Last durch sehr aktive Verbindungen blieb die Speicherauslastung stabil und stieg langsamer als die Nachrichtengröße. Die Leistung in Ihrer Umgebung hängt von der Art Ihrer Anwendung ab, doch die Ergebnisse dieser Tests geben einen Anhaltspunkt dafür, mit welchem Ressourcenbedarf von NGINX Sie rechnen können.

Testumgebung

Für diese Tests wurden die folgenden Rechner verwendet:

  • Lastgenerator – thor auf einem 6-Kern-Xeon EX5645 mit 2,40 GHz und 48 GB RAM
  • NGINX – Version 1.7.0, x86_64 mit 6 Workern auf einem 6-Kern-Xeon E5645 mit 2,40 GHz und 48 GB RAM
  • WebSocket-Backend – Node.js-Echo-Server auf einem 4-Kern-Xeon E5-2660 0 mit 2,20 GHz und 8 GB RAM

Tests

Wir haben zwei Testreihen durchgeführt.

Die erste Testreihe simulierte langlebige und größtenteils inaktive Verbindungen. Die Anzahl der Verbindungen variierte zwischen 1.000 und 50.000, die Nachrichtengröße zwischen 10 und 4096 Byte und das Nachrichtenintervall zwischen 0,1 und 10 Sekunden (was wir als niedrig erachteten).

Die Ergebnisse zeigen, dass der Gesamtspeicherbedarf für WebSocket-Verbindungen von der Anzahl der Verbindungen abhängt und der Speicherverbrauch pro Verbindung konstant bleibt. Die Speicherauslastung wird weder von der Nachrichtengröße noch von der Nachrichtenfrequenz beeinflusst. Die CPU-Auslastung steigt im Wesentlichen mit der Anzahl der Verbindungen und beanspruchte selbst bei 50.000 Verbindungen keinen vollständigen CPU-Kern. Die hier dargestellte CPU-Auslastung ist auf einen einzelnen Kern normiert, indem die CPU-Auslastung aller Kerne addiert wird. Die folgenden Diagramme zeigen die Ergebnisse dieser Testreihe:

conn1


cpu1


mem1


memk1

Die zweite Testreihe simulierte kurzlebige, aber hochaktive Verbindungen. Die Anzahl der gleichzeitigen Verbindungen wurde konstant bei 500 gehalten, mit 50 Nachrichten pro Verbindung und ohne Verzögerung zwischen den Nachrichten. Die Nachrichtengröße lag zwischen 1 und 4096 Byte.

Die Ergebnisse zeigen, dass bei einer festen Anzahl gleichzeitiger Verbindungen sowohl die gesamte Speicherauslastung als auch der Speicherverbrauch pro Verbindung von der Nachrichtengröße abhängen. In beiden Fällen verändert sich der Speicherbedarf jedoch nur geringfügig und steigt unterlinear um weniger als 15 %.

Größe2


CPU 2


mem2


memk2

Zusammenfassung

Bei diesen Tests lieferte NGINX beim Proxying von WebSocket-Servern eine vorhersehbare und skalierbare Leistung. Da es sich um synthetische Tests handelte, die nicht unbedingt eine reale Anwendung widerspiegeln, können die Ergebnisse von Tests auf anderen Systemen abweichen. Weitere Informationen finden Sie unter:


Teilen

Über den Autor

Rick Nelson
Rick NelsonRegional Vice President, Solution Engineering

Weitere Blogbeiträge von Rick Nelson

Ähnliche Blogbeiträge

Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln
NGINX | 23.08.2022

Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln

Beim NGINX Sprint 2022 besinnen wir uns auf unsere Open-Source-Wurzeln. Erfahren Sie mehr über die Initiativen, die wir im kommenden Jahr verfolgen, und teilen Sie uns mit, was Sie sich wünschen.

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen
NGINX | 08.09.2021

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen

Ein Ingress-Controller kann eines der leistungsstärksten Tools in Ihrem Kubernetes-Stack sein. Erfahren Sie, wie Sie Ihre Ingress-Anforderungen ermitteln, um die beste Option auszuwählen.

Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet
NGINX | 16.08.2021

Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet

Wir haben kürzlich den Lösungsleitfaden zum NGINX Ingress Controller um Empfehlungen zur Dimensionierung für Amazon Elastic Kubernetes Service (EKS) ergänzt. In diesem Blogbeitrag erläutern wir, wie wir diese Empfehlungen erarbeitet haben, und stellen Ihnen alle Informationen zur Verfügung, die Sie benötigen, um selbst ähnliche Tests durchzuführen.

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77
NGINX | 12.12.2018

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77

Bei der Fehlersuche bei Datenverkehrsproblemen zwischen NGINX und Upstream-Servern konnte CDN77 die benötigten Daten nur aus dem Fehlerprotokoll mit aktivierter Debug-Ausgabe beziehen, was die Leistung beeinträchtigt und riesige Dateien erzeugt. Daher entwickelte das Team ein neues benutzerdefiniertes Modul, das ausschließlich die benötigten Daten protokolliert.

Ankündigung von NGINX Plus R16
NGINX | 05.09.2018

Ankündigung von NGINX Plus R16

NGINX Plus R16 ist eine einheitliche, elastische Ingress- und Egress-Schicht für Anwendungen, die die Funktionen eines Load Balancers, API-Gateways und einer WAF vereint und neue Features wie clusterfähige Ratenbegrenzung, Schlüssel-Wert-Speicher, „Random with Two Choices“, verbessertes UDP-Load-Balancing und vieles mehr bietet.

5 Gründe für den Umstieg auf softwarebasiertes Load Balancing
NGINX | 13.10.2016

5 Gründe für den Umstieg auf softwarebasiertes Load Balancing

Entdecken Sie fünf Gründe für den Wechsel zu einem softwarebasierten Load Balancer wie NGINX Plus, darunter Kosteneinsparungen, die Einführung von DevOps und eine einheitliche Lösung für alle Umgebungen.