Zum Hauptinhalt springen

Die Auswirkung der Latenz der Kommunikationsschicht wird in der Regel unterschätzt, wenn man versucht, Probleme mit der Anwendungsleistung zu beheben, aber das richtige Verständnis ist entscheidend, wenn man seine Bemühungen auf praktische Lösungen ausrichten will.

Erstens meine ich mit Latenz der Kommunikationsschicht die Zeit, die ein Paket braucht, um vom lokalen System zum entfernten System und wieder zurück zu gelangen. Der größte Faktor bei der Latenz der Kommunikationsschicht ist die Entfernung - zumindest bei geografisch getrennten Hosts. Die andere wichtige Komponente ist die Anzahl der Geräte zwischen dem lokalen und dem entfernten Host, die die Pakete verarbeiten; dazu gehören Dinge wie Router und Firewalls. Die Bandbreite der Verbindungen spielt eine Rolle, aber nicht so stark, wie die meisten Leute denken. Die Bandbreite wirkt sich auf die Einfügungsverzögerung aus - wie lange es dauert, ein Paket auf die Leitung zu bringen, aber das Signal auf der Leitung bewegt sich mit einer Geschwindigkeit, die auf dem Medium basiert, nicht auf der Bandbreite. Im weiteren Verlauf dieser Diskussion werde ich nur noch von Latenz sprechen, wenn ich die Latenz der Kommunikationsschicht meine.

Um zu demonstrieren, wie sich die Latenzzeit auf Ihre Anwendung auswirkt, nehmen wir an, Sie geben einige Daten in eine Client-Anwendung ein und drücken die Return-Taste. Die Client-Anwendung sendet eine Nachricht an eine Server-Anwendung, wartet auf eine Antwort und sendet dann eine weitere Nachricht, wartet auf eine Antwort usw., und zwar für eine bestimmte Anzahl N von "Runden". Am Ende von N Runden präsentiert die Client-Anwendung Ihnen die Ergebnisse.

Angenommen, es sind 10 Abrufe erforderlich und die Serveranwendung benötigt 1 ms, um die Client-Nachricht zu verarbeiten und eine Antwort zurückzusenden. Bei einer Latenzzeit von 1 ms ergibt sich eine Antwortzeit von 10 * (1 ms + 1 ms) oder 20 ms. Steigen Sie nun in ein Flugzeug und reisen Sie nach Chicago, der Server bleibt in Boston, so dass Sie nun eine Latenzzeit von sagen wir 50 ms und eine Antwortzeit von 10 * (50 ms + 1 ms) oder 550 ms haben. Das ist genug, um sich bemerkbar zu machen, aber nicht schmerzhaft. Erhöhen Sie die Anzahl der Umdrehungen auf 100 und Sie haben nun eine schmerzhafte Reaktionszeit von 5,5 Sekunden. Sie halten 100 Umdrehungen vielleicht für übertrieben, aber einige komplexe Datenbankabfragen oder Anwendungen, die komplexe Formulare ausfüllen, können genau das erreichen. Wissen Sie, wie viele Umdrehungen Ihre Anwendungen benötigen?
Auch bei der Ausführung einer copy_file über OSL zeigt sich dieses Verhalten. OSL sendet eine Datei in 4K-Transaktionen. Jede Transaktion erfordert eine Antwort, so dass für eine Datei mit 1.000.000 Byte 1.000.000 / 4.096 = 245 Transaktionen oder Umdrehungen erforderlich sind, um die Nomenklatur aus dem vorherigen Absatz zu verwenden. Wiederum unter der Annahme von 1 ms für die Verarbeitung der Transaktion und einer Latenzzeit von 1 ms benötigt copy_file 490 ms. Wenn wir die Latenzzeit auf 50 ms erhöhen, dauert es 12,495 Sekunden. Bei einer Vergrößerung der Datei auf 1.000.000.000 Bytes sind 244.141 Transaktionen erforderlich, mit entsprechenden Zeiten von 488,282 Sekunden bei einer Latenz von 1 ms und 12.451,191 Sekunden oder fast 3,5 Stunden bei einer Latenz von 50 ms.

Die einfachste Methode zur Messung der Latenzzeit ist der Ping.

ping 192.168.200.197
Pinging host 192.168.200.197 : 192.168.200.197
ICMP Echo Reply:TTL 53 time = 84 ms
ICMP Echo Reply:TTL 53 time = 80 ms
ICMP Echo Reply:TTL 53 time = 81 ms
ICMP Echo Reply:TTL 53 time = 96 ms
Host 192.168.200.197 replied to all 4 of the 4 pings

 

Leider kommt es immer häufiger vor, dass Netzwerke Ping-Pakete blockieren oder dass Hosts sie ignorieren. Sie können sogar STCP anweisen, sie zu ignorieren (ab 15.3, 16.2 und 17x). Wenn Sie ping nicht verwenden können, können Sie packet_monitor verwenden, um zu messen, wie lange es dauert, eine Antwort auf eine Verbindungsanfrage zu erhalten. Starten Sie zum Beispiel packet_monitor mit dem Befehl "start_process 'packet_monitor -numeric -time_stamp -filter -host A.B.C.D -port NNN' -privileged”. Geben Sie dann den Befehl "telnet A.B.C.D NNN”. Sie sollten mehrere Verbindungen herstellen und einen Durchschnittswert erhalten. Beachten Sie, dass ich eine Verbindung zu einem ungenutzten Port auf dem entfernten Host herstelle. Dadurch wird die Anzahl der Pakete in der Aufzeichnung reduziert, aber wenn eine Firewall den Port blockiert, müssen Sie möglicherweise einen aktiven Port verwenden.

 

start_process 'packet_monitor -numeric -time_stamp -filter -host 192.168.200.197
+ -port 6666' -privileged
ready 09:12:42
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:53
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:56
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:58
telnet 192.168.200.197 6666
Trying...
telnet: Unable to connect to remote host: The connection was refused.
ready 09:12:58
stop_process packet_monitor -no_ask
Stopping Noah_Davids.CAC (packet_monitor).
ready 09:13:07
d packet_monitor.out
%phx_vos#m16_mas>SysAdmin>Noah_Davids>packet_monitor.out 09-11-13 09:13:17 mst
Noah_Davids.CAC logged in on %phx_vos#m16 at 09-11-13 09:12:42 mst.
packet_monitor -numeric -time_stamp -filter -host 192.168.200.197 -port 6666
***********************************************************
WARNING: failure to specify a specific interface will cause
packet_monitor to bind to ALL interfaces on the module,
greatly increasing the amount of Streams memory used!!!
***********************************************************
dir                                                 icmp type
+     tcp
hh:mm:ss.ttt    len proto source             destination         src port dst p
+ort type
9:12:52.984 T 0004 TCP 172.16.77.128       192.168.200.197           62515
+ 6666 S
9:12:53.067 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62515 RA
9:12:56.643 T 0004 TCP 172.16.77.128       192.168.200.197           62516
+ 6666 S
9:12:56.724 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62516 RA
9:12:58.003 T 0004 TCP 172.16.77.128       192.168.200.197           62517
+ 6666 S
9:12:58.086 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62517 RA
9:12:58.805 T 0004 TCP 172.16.77.128       192.168.200.197           62518
+ 6666 S
9:12:58.887 R 0000 TCP 192.168.200.197     172.16.77.128              6666
+ 62518 RA
ready 09:13:07
Process finished.
Terminating Noah_Davids.CAC (packet_monitor). Process stopped by Noah_Davids.CA
+C.

 

Latency times:   58.887 - 58.805 = 0.082 == 82ms
58.086 - 58.003 = 0.083 == 83ms
56.724 - 56.643 = 0.081 == 81ms
53.067 - 52.984 = 0.083 == 83ms

Sie können auch ein von mir geschriebenes Programm verwenden, das die Verbindungen zeitlich erfasst, ohne dass Sie packet_monitor verwenden müssen. Siehe http://members.cox.net/ndav1/self_published/stcp_tping.doc. Der Befehl stcp_tping setzt voraus, dass Sie sich mit einem aktiven Port auf dem entfernten Host verbinden. In diesem Fall verwende ich Port 23 (telnet), aber jeder aktive Port funktioniert. Die Zahl 1 am Ende des Befehls bedeutet, dass einmal pro Sekunde eine Anfrage gesendet wird.

stcp_tping 192.168.200.197 23 1
tping 192.168.200.197 23 1
Success/Tries=Percent    min/average/max success times
1/1=100.000%             83.284/83.284/83.284     Connection in 83.284 ms
2/2=100.000%             81.697/82.490/83.284     Connection in 81.697 ms
3/3=100.000%             80.858/81.946/83.284     Connection in 80.858 ms
4/4=100.000%             80.858/81.895/83.284     Connection in 81.743 ms
^C

 

Wie können Sie die Latenzzeit abschätzen, wenn Sie nicht bereits über die entsprechenden Systeme verfügen, um sie zu messen? Am einfachsten ist es, ein System im gleichen geografischen Gebiet zu finden und die Latenzzeit zu messen. So erhalten Sie eine sehr grobe Schätzung. Ich verwende gerne Hochschulen und Universitäten, da ich weiß, wo sie sich befinden und die Wahrscheinlichkeit groß ist, dass sie ihre eigenen Systeme auf dem Campus hosten und, zumindest die größeren Universitäten, wahrscheinlich über Internetverbindungen mit hoher Bandbreite verfügen. Die Website http://www.utexas.edu/world/univ/state/ listet die Websites vieler Universitäten nach Bundesländern auf. Die Website http://www.bulter.nl/universities/ listet die Websites von Universitäten aus aller Welt nach Ländern auf. Denken Sie daran, dass es einen erheblichen Unterschied zwischen der Kommunikation über ein Firmen-VPN und über das Internet geben kann.

 

Wie können Sie das Problem beheben? Wahrscheinlich gar nicht. Sie haben vielleicht eine gewisse Kontrolle über die Bandbreite einiger Verbindungen und vielleicht über einige der Netzwerkgeräte, aber Sie haben sicherlich keine Kontrolle über die Entfernung. Was Sie tun können, ist, die Anwendung so zu ändern, dass sie weniger empfindlich auf Latenzzeiten reagiert, indem Sie die Anzahl der erforderlichen Umdrehungen verringern.

 

Wenn Sie OSL verwenden, um große Dateien über weite Entfernungen zu übertragen, kann ich nur sagen: Lassen Sie es. Je nach Dateityp können Sie vielleicht FTP, SFTP oder SCP verwenden. Falls nicht, gibt es auf der FTP-Seite Stratus eine Anwendung namens tcp_save(ftp://ftp.stratus.com/vos/network/tcp_save.save.evf.gz), mit der Sie eine Datei effektiv über TCP kopieren können, ohne OSL zu verwenden. Es erfordert einige Einstellungen, kann aber die Kopierzeit von großen Dateien erheblich verkürzen.

 

© 2024 Stratus Technologies.