Meine "Antwort" ist langwierig - der Schlüssel ist, "Durchsatz" nicht mit "Bandbreite" zu verwechseln - obwohl "Bandbreite" ein begrenzender Faktor sein kann
Kurz gesagt, Ihr Durchsatz kann begrenzt sein, obwohl Ihre Bandbreite nicht gesättigt ist.
Ich musste den Leuten helfen, die Auswirkungen von mehrstufigen Anwendungsstapeln zu verstehen.
Für den Aspekt der TCP-Kommunikation nutze ich Unterschiede in der RTT (Round-Trip-Time).
Für Single-Tier können Sie die lokale IP-Adresse (auf einer Netzwerkkarte) mit lo0 (Loopback) vergleichen.
Bei mehreren Ebenen vergleichen / berechnen Sie die "weiter entfernten" Adressen. Beispielsweise können mehrere Ebenen entweder zwei VMs auf demselben Host oder verschiedene Hosts im selben Rechenzentrum oder verschiedene Rechenzentren sein (vielleicht nur 500 Meter Entfernung, aber immer noch anders).
Zu Ihrer Information: Für viele Anwendungen sind RTT-Unterschiede vernachlässigbar, aber für Anwendungen, die 10-100 Tausend kleine Nachrichten für die RTT-Zeit der Anwendung ausführen, kann dies zu einem Engpass werden.
(Ich habe Situationen gesehen, in denen die "Charge im mehrstufigen Bereich fast 6 Stunden länger dauerte, wenn die RTT im Vergleich zur einstufigen um 0,25 Millisekunden länger war).
Also, einfacher Prüfstand:
Das
for host in 127.0.0.1 192.168.129.63 192.168.129.72 192.168.129.254 192.168.129.71 p5.aixtools.net
do
wget -q http://${host}/ -O - >/dev/null
sleep 1
done
Und mein Überwachungsprogramm ist tcpdump - mit der Option -ttt
-ttt
Prints a delta (in microseconds) between current and previous line on each dump line.
Eine Mikrosekunde ist eine SI-Zeiteinheit, die einem Millionstel entspricht (0,000001 oder 10−6 oder 1 / 1,000,000). Das heißt, 1000 Mikrosekunden == 1 Millisekunde.
In zwei verschiedenen Fenstern läuft tcpdump:
Für die "lokalen" Zeiten: tcpdump -i lo0 -n -ttt Port 80 und für den "entfernten" tcpdump -I en1 -n -ttt Port 80
In den folgenden Daten ist das Ziel nicht, eine Analyse durchzuführen, sondern zu zeigen, wie Sie Zeitunterschiede identifizieren können, die für den Abschluss von Transaktionen erforderlich sind. Wenn es sich bei einem Anwendungsdurchsatz um serielle Transaktionen handelt, wird der Durchsatz pro "Sek | Min | Stunde" durch die für "Antworten" erforderliche Gesamtzeit beeinflusst. Ich fand es am einfachsten, dies mit dem Konzept der RTT zu erklären - Hin- und Rückfahrt.
Für eine echte Analyse gibt es zusätzliche Dinge zu beachten. Die einzigen Zeilen, die ich zeigen werde, sind der anfängliche TCP-Handshake und das erste ausgehende Paket und die zurückkehrende ACK. Vergleichen Sie zum Vergleich die Deltazeiten, wie lange es dauert, bis die "Antwort" zurückkommt.
127.0.0.1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo0, link-type 0, capture size 96 bytes
00:00:00.000000 IP 127.0.0.1.42445 > 127.0.0.1.80: S 1760726915:1760726915(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 0>
00:00:00.**000035** IP 127.0.0.1.80 > 127.0.0.1.42445: S 3339083773:3339083773(0) ack 1760726916 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096651 1482096651>
00:00:00.000013 IP 127.0.0.1.42445 > 127.0.0.1.80: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
00:00:00.**000014** IP 127.0.0.1.80 > 127.0.0.1.42445: . ack 1 win 33688 <nop,nop,timestamp 1482096651 1482096651>
192.168.129.63
Beachten Sie den 01.XXXXXX - für den Ruhezustand von einer Sekunde auf der Schnittstelle "lo0"
00:00:01.006055 IP 192.168.129.63.42446 > 192.168.129.63.80: S 617235346:617235346(0) win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 0>
00:00:00.**000032** IP 192.168.129.63.80 > 192.168.129.63.42446: S 1228444163:1228444163(0) ack 617235347 win 65535 <mss 16856,nop,wscale 2,nop,nop,timestamp 1482096653 1482096653>
00:00:00.000014 IP 192.168.129.63.42446 > 192.168.129.63.80: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
00:00:00.**000010** IP 192.168.129.63.80 > 192.168.129.63.42446: . ack 1 win 33688 <nop,nop,timestamp 1482096653 1482096653>
192.168.129.72
Virtuelle Maschine auf demselben Host - Beachten Sie, dass die Zeit um 00.000000 beginnt - das erste Paket wird angezeigt (und das 01.XXXXXX für die beiden anderen Adressen unten).
root@x063:[/]tcpdump -i en1 -n -ttt port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type 1, capture size 96 bytes
00:00:00.000000 IP 192.168.129.63.42447 > 192.168.129.72.80: S 865313265:865313265(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096655 0>
00:00:00.**000125** IP 192.168.129.72.80 > 192.168.129.63.42447: S 916041515:916041515(0) ack 865313266 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1481318272 1482096655>
00:00:00.000028 IP 192.168.129.63.42447 > 192.168.129.72.80: . ack 1 win 32761 <nop,nop,timestamp 1482096655 1481318272>
00:00:00.**000055** IP 192.168.129.72.80 > 192.168.129.63.42447: . ack 1 win 65522 <nop,nop,timestamp 1481318272 1482096655>
192.168.129.254
Mein Router - außerhalb des Hosts, keine virtuelle Maschine.
00:00:01.005947 IP 192.168.129.63.42448 > 192.168.129.254.80: S 2756186848:2756186848(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096657 0>
00:00:00.**000335** IP 192.168.129.254.80 > 192.168.129.63.42448: S 2327415811:2327415811(0) ack 2756186849 win 5792 <mss 1460,nop,nop,timestamp 44854195 1482096657,nop,wscale 2,nop,opt-14:03>
00:00:00.000022 IP 192.168.129.63.42448 > 192.168.129.254.80: . ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
00:00:00.**000090** IP 192.168.129.63.42448 > 192.168.129.254.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096657 44854195>
192.168.129.71
Dieselbe Verbindung wie 192.168.129.72, aber diese ist "besetzt", während "72" inaktiv ist. Ich würde hoffen, dass die ersten Handshakes fast identisch sind
00:00:01.005093 IP 192.168.129.63.42449 > 192.168.129.71.80: S 249227688:249227688(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096659 0>
00:00:00.**000072** IP 192.168.129.71.80 > 192.168.129.63.42449: S 1898177685:1898177685(0) ack 249227689 win 65535 <mss 1460,nop,wscale 2,nop,nop,timestamp 1482096104 1482096659>
00:00:00.000022 IP 192.168.129.63.42449 > 192.168.129.71.80: . ack 1 win 32761 <nop,nop,timestamp 1482096659 1482096104>
00:00:00.**000050** IP 192.168.129.71.80 > 192.168.129.63.42449: . ack 1 win 65522 <nop,nop,timestamp 1482096104 1482096659>
mehrere Hopfen
Dies ist derselbe Host, das gleiche Apache-Ergebnis, aber jetzt über die externe Schnittstelle (6 IP-Hops statt direkt) - jetzt können Sie den Effekt von Fern-RTT nutzen. (ps, ich habe die IP-Adresse leicht geändert). Wichtiger: Beachten Sie, dass nach dem ersten Handshake vor dem ersten ACK nach der Rückkehr eines Handshakes zwei ausgehende Pakete vorliegen.
Denken Sie also statt einer 25-ms-RTT daran, dass die RTT 250 Mikrosekunden im Vergleich zu 25 Mikrosekunden beträgt - und Sie haben 500.000 Transaktionen (das sind im Vergleich zu lokalen Transaktionen nur 120 bis 125 Sekunden mehr, und der Durchsatz ist imho vergleichbar. Aber mit Bei 50 Millionen Transaktionen (wie ich es in einer realen Situation getan habe) erhalten Sie zusätzliche 12500 Sekunden - was ungefähr 3,5 zusätzliche Stunden für "buchstäblich" denselben Job hinzufügt (und ein Teil der Lösung für diesen Fall bestand darin, die Pakete größer zu machen - die durchschnittliche Größe war ursprünglich 400-450 Bytes).
Erinnern wir uns, was ich hier zeigen möchte, ist eine ziemlich einfache Möglichkeit, Unterschiede in der Gesamtzeit zu berücksichtigen, die eine Anwendung (Stapeljob) beim Vergleich von mehrschichtigen mit einstufigen Architekturen ausführen muss.
00:00:01.162974 IP 192.168.129.63.42450 > XX.85.86.223.80: S 1331737569:1331737569(0) win 65535 <mss 1460,nop,wscale 3,nop,nop,timestamp 1482096661 0>
00:00:00.**023962** IP XX.85.86.223.80 > 192.168.129.63.42450: S 3130510306:3130510306(0) ack 1331737570 win 65535 mss 1460,nop,wscale 2,nop,nop,timestamp 1482096106 1482096661,nop,opt-14:03>
00:00:00.000025 IP 192.168.129.63.42450 > XX.85.86.223.80: . ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.000062 IP 192.168.129.63.42450 > XX.85.86.223.80: P 1:142(141) ack 1 win 32761 <nop,nop,timestamp 1482096661 1482096106>
00:00:00.**024014** IP XX.85.86.223.80 > 192.168.129.63.42450: . ack 1 win 65522 <nop,nop,timestamp 1482096107 1482096661>
Eine andere Sache, die ich an der Verwendung von tcpdump "mag", ist ein allgemein verfügbares Programm. Es muss nichts extra installiert werden.