So handhaben Sie 1 Million WebSocket-Verbindungen (Nginx/HAProxy/Amazon/Google)

So handhaben Sie 1 Million WebSocket-Verbindungen (Nginx/HAProxy/Amazon/Google)

WasnginxoderAbonnierenSetup wird für das Ziel empfohlen100.000gleichzeitige WebSocket-Verbindungen? Ich denke, ein einzelner Nginx wird nicht in der Lage sein, so viel Datenverkehr und gleichzeitige Verbindungen zu verarbeiten. Wie soll der Datenverkehr zu Nginx/Haproxy aufgeteilt werden (DNS-Ebene oder eine verfügbare Amazon/Google-Option)? Wie viele gleichzeitige WebSockets kann ein einzelner Nginx verarbeiten?

Habe versucht, relevante Informationen aus der Google-Suche und SO-Posts zu sammeln.

Antwort1

Es gibt Leute, die Chat-Server hinter Haproxy-Load Balancern mit noch höherer Auslastung betreiben. Die höchste Auslastung, die mir in einer privaten E-Mail (mit der Kopie der Statistikseite) mitgeteilt wurde, lag bei etwa 300.000 Verbindungen pro Prozess (also 600.000 Sockets). Beachten Sie, dass ein Prozess unter Linux standardmäßig auf 1 Million Dateideskriptoren (also 500.000 End-to-End-Verbindungen) beschränkt ist, dies kann jedoch in /proc angepasst werden.

Das Wichtigste, was bei solchen Belastungen zu berücksichtigen ist, ist die benötigte RAM-Menge. Die Socket-Puffer auf der Kernelseite benötigen immer mindestens 4 KB pro Richtung und Seite, also mindestens 16 KB pro End-to-End-Verbindung. HAProxy 1.5 und niedriger haben zwei Puffer pro Verbindung (z. B. reichen 4 KB-Puffer für WebSocket). 1.6 kann ohne diese Puffer ausgeführt werden und sie nur für die seltenen Verbindungen mit Daten reserviert halten. Das sind also mindestens 16 GB RAM pro Million Verbindungen oder etwa 24 GB bei älteren Versionen. Es kann sich lohnen, dies auf mehrere Prozesse auf SMP-Maschinen zu verteilen, um die Latenz zu verringern. Bedenken Sie, dass es bei 100.000 Verbindungen/s 10 Sekunden dauern kann, um einfach 1 Million Verbindungen herzustellen. Alle diese Verbindungen verursachen jeweils einige Arbeit für einige Bytes, und der Umgang mit 1 Million aktiven Verbindungen verursacht definitiv viel Arbeit und eine hohe Belastung des Systems.

verwandte Informationen