Ich konfiguriere einen Server, der als Nginx-Server für eine Website mit sehr hohem Datenverkehr verwendet werden soll. Es wird erwartet, dass er gleichzeitig Datenverkehr von einer großen Anzahl von IP-Adressen empfängt. Es wird erwartet, dass er 500 Anforderungen/Sekunde erhält, wenn mindestens 20 Millionen eindeutige IPs ihn verbinden.
Eines der Probleme, die mir bei meinem vorherigen Server aufgefallen sind, betraf iptables/ipconntrack. Ich kenne dieses Verhalten nicht und würde gerne wissen, welche Parameter einer Ubuntu-/Debian-Maschine (32/64) ich anpassen sollte, um die maximale Leistung des Servers zu erzielen. Ich kann viel RAM auf dem Server installieren, aber die Antwortzeiten sind die entscheidende Aufgabe. Wir möchten im Idealfall vermeiden, dass eine Verbindung hängen bleibt/abläuft/wartet, und wir möchten so kurze Gesamtantwortzeiten wie möglich.
Antwort1
Brauchen Sie iptables wirklich? Wenn Sie so viel Leistung aus einer einzigen Box herausholen möchten, würde ich vorschlagen, sie einfach vollständig zu entfernen. Wenn Sie die Maschine sorgfältig konfigurieren, indem Sie alle Dienste außer nginx entfernen und SSH so konfigurieren, dass es auf einer nicht öffentlichen Schnittstelle (VPN, LAN usw.) lauscht, können Sie möglicherweise ohne Firewall auskommen. Damit wäre zumindest Ihr einziges Problem gelöst.
Versuchen Sie dies aufeinsWebserver oder mehrere davon? Sogar ein einfacher DNS-Round-Robin würde Ihnen helfen, die Last auf mehrere verschiedene Maschinen zu verteilen. Aus Gründen der Zuverlässigkeit würden Sie auf jeden Fall mehrere Server benötigen.
Antwort2
Diese Frage ist ziemlich allgemein gehalten. Mein bester Rat an Sie ist, einen Schritt zurückzutreten und darüber nachzudenken, wie Sie Ihre Anwendung skalieren werden. Möchten Sie nach oben skalieren (ein paar große Server) oder nach außen (viele kleine Server) oder möglicherweise eine Kombination aus beidem. Sobald Sie Ihre Skalierungsstrategie herausgefunden haben, können Sie auch eine HA-Strategie darauf aufbauend entwickeln.
Ich bezweifle stark, dass Sie in der Sekunde, in der die Site online geht, 20 Millionen Unique Sites sehen werden (nur um Ihnen eine Vorstellung zu geben: das würde sie zu mindestens einer der Top 200-Websites machen).
Überlegen Sie sich gut, wie Sie Ihren Datenverkehr skalieren können, und gehen Sie nicht an die Grenzen der Leistungsfähigkeit Ihrer Server. Lassen Sie sich etwas Spielraum für Spitzen und besorgen Sie sich neue Geräte, wenn Ihr Datenverkehr zunimmt.
Diese Fragen werden uns immer wieder gestellt. Es ist gut, an die Zukunft zu denken, aber planen Sie nicht, eine Infrastruktur zu haben, die sofort 20 Millionen/60 Millionen/100 Millionen Uniques verarbeiten kann. Sie verschwenden Ihr Geld und haben eine Infrastruktur, die größtenteils ungenutzt herumliegt.
Um nun Ihre Frage zu beantworten: Wir bei Stack Overflow verwenden (derzeit) iptable und führen Conntrack-Module auf unseren Frontend-Routern ohne Probleme aus. Ich würde vorschlagen, eine neue Frage mit Details zu dem genauen Problem zu posten, das Sie beim Ausführen von iptables/*conntrack* unter Last sehen.
Und zum Schluss noch etwas Gutes zum Lesen
Wie wir S[OFU]/Stack Exchange betreiben
Blog zur hohen Skalierbarkeit
Antwort3
500 Anfragen pro Sekunde sind wirklich nicht so viel, wenn Sie nur relativ kleine, statische Dateien bereitstellen. Wenn die Dateien jedoch groß oder komplex sind – beispielsweise sitzungsbasiert oder DB-abhängig –, ist das eine ziemliche Arbeitslast.
Erwägen Sie, vor dieser Lösung einen Reverse-Proxy wie Varnish einzurichten, der so eingestellt ist, dass er einen Malloc-Pool als Cache verwendet. Ein richtig abgestimmter VCL würde es Ihnen ermöglichen, den Großteil der Site im Speicher zu puffern, was bedeutet, dass nginx nur einige ausgewählte Bits bereitstellen müsste. Stellen Sie außerdem sicher, dass Sie noatime im Dateisystem festlegen.