
Ich führe Server2016 in zwei VMs mit installiertem IIS aus und verwende NLB, um den Datenverkehr und die gemeinsam genutzte Konfiguration/SSL auszugleichen. Meine Upload-Geschwindigkeiten scheinen auf 256 KB/s (2 MB) begrenzt zu sein. Meine Internetverbindung ist Gigabit-Glasfaser.
Ich habe ein paar Tests durchgeführt, um das Problem einzugrenzen. Ich habe eine einfache .net-Webanwendung mit einer Upload- und einer Senden-Schaltfläche erstellt und eine 28 MB große Datei hochgeladen.
Wenn ich die App auf meiner IIS-Box platziere unterhttps://domain.tld/upload, laut Chrome Dev Tools hat es 1,9 Minuten gedauert, was wieder etwa 256 KB entspricht.
Ich habe Visual Studio verwendet, um es zu erstellen. Ich habe die App einfach auf meinem Desktop-Computer mit Win 10 über IIS Express ausgeführt und den zufälligen Port über meinen Router geöffnet. Der Upload dauerte 761 ms, was ungefähr 37 MB/s entspricht.
Ich habe diese Tests ein paar Mal wiederholt und bin zu ziemlich denselben Ergebnissen gekommen. Da ich von derselben Box hoch- und herunterlade, verbraucht sie tatsächlich ungefähr 74 MB/s oder 30 % meiner theoretischen Gigabit-Upload- und Downloadgeschwindigkeit. Ich denke also, dass es kein Problem mit dem ISP ist.
Ich habe auch versucht, den NLB-Cluster aufzubrechen und den gesamten Datenverkehr auf nur eine Box umzuleiten, dasselbe Ergebnis.
Irgendwelche Ideen, warum IIS so langsam ist?
Antwort1
Ich poste das für den Fall, dass es noch jemanden interessiert … das Problem war NLB.
Für ausgehenden Datenverkehr ist das keine große Sache, aber Sie müssen einige Netzwerkanpassungen vornehmen, damit es „richtig“ funktioniert.
- Unicast: Da die MAC-Adresse beider Knoten durch dieselbe „Cluster“-MAC-Adresse ersetzt wird, wird Ihr Netzwerk-Switch durchdrehen, da er seine Routing-Tabelle nicht richtig aktualisieren kann und alle Ports überlastet. Die Lösung besteht darin, einen Hub oder ein separates VLAN zu verwenden.
- Multicast: Jeder Knoten behält seine MAC-Adresse und erhält eine zusätzliche Multicast-MAC. Switches können die MAC nicht „lernen“, da sie nicht an die physische Netzwerkkarte angeschlossen ist. Daher verwerfen sie die Pakete oder überfluten sie wie bei Unicast. Die Lösung besteht darin, statische ARP- und MAC-Einträge in Ihr Netzwerk einzufügen.
- Multicast IGMP: Dasselbe wie Multicast, erfordert aber IGMP-fähige Switches, damit diese „lernen“ können, wie Ihr Multicasting funktionieren soll. Also keine Lösung, entweder es funktioniert oder nicht.
Bei weiteren Tests stellten wir beim Hochladen einer großen Datei in unseren IIS-Cluster eine schreckliche Netzwerkleistung auf anderen Maschinen/VMs am gleichen Switch fest, was das Überflutungsproblem zu bestätigen scheint.
In meiner speziellen Situation in meiner Arbeitsumgebung sagten die Netzwerkleute „Nein“ zu jeglichen Änderungen an der Netzwerkinfrastruktur, einschließlich der Aktivierung von IGMP.
Wir wollten nur zwei Server für hohe Verfügbarkeit, also haben wir uns entschieden, stattdessen einen Failovercluster mit zwei Knoten zu erstellen, mit einer gemeinsam genutzten Festplatte für einen Zeugen und einer gemeinsam genutzten Festplatte für die gemeinsame IIS-Konfiguration und zentralisiertes SSL. Es ist nicht aktiv-aktiv, aber wir können die Betriebszeit während des Patchens usw. aufrechterhalten. Ich weiß, dass es für IIS nicht empfohlen wird, einen Cluster zu erstellen, aber da kein Hardware-Load Balancer oder ein Netzwerk vorhanden ist, das Sie richtig konfigurieren können, muss dies reichen :)