
Ein Online-Tool zur Anfragenreplikation und TCP-Stream-Wiedergabe, ideal für echte Tests, Leistungstests, Stabilitätstests, Belastungstests, Auslastungstests, Rauchtests und mehr.
TCPCopy ist ein TCP-Stream-Replay-Tool für realistische Tests von Internet-Serveranwendungen.
Ein Überblick über TCPCopy für Anfänger
Ein allgemeiner Überblick über die TCPCopy-Architektur
Obwohl echter Live-Traffic für das Testen von Internet-Serveranwendungen entscheidend ist, ist die genaue Simulation aufgrund der Komplexität von Online-Umgebungen herausfordernd. Um realistischere Tests zu ermöglichen, wurde TCPCopy als Tool zur Reproduktion von Live-Datenströmen entwickelt, das Testworkloads erzeugt, die Produktionsworkloads stark ähneln. TCPCopy wird von Unternehmen in China häufig eingesetzt.
TCPCopy belastet das Produktionssystem minimal und verbraucht nur zusätzliche CPU, Arbeitsspeicher und Bandbreite. Der reproduzierte Workload spiegelt die Produktionsumgebung in Bezug auf Anfragenvielfalt, Netzwerklatenz und Ressourcennutzung wider.

Abbildung 1. Überblick über die TCPCopy-Architektur.
Wie in Abbildung 1 gezeigt, besteht TCPCopy aus zwei Komponenten: tcpcopy und intercept. Die Komponente tcpcopy läuft auf dem Online-Server und erfasst Live-Anfragen, während intercept auf dem Assistenzserver arbeitet und Aufgaben wie die Übergabe von Antwortinformationen an tcpcopy übernimmt. Die Testanwendung selbst läuft auf dem Zielserver.
Standardmäßig verwendet tcpcopy Raw-Sockets, um Pakete auf der Netzwerkschicht zu erfassen (dargestellt durch die orangefarbenen Pfeile in der Abbildung). Es übernimmt Prozesse wie die Simulation von TCP-Interaktionen, Netzwerklatenzkontrolle und Simulation von Interaktionen auf höheren Schichten. Anschließend sendet es Pakete an den Zielserver unter Verwendung von Raw-Sockets zur Ausgabe (dargestellt durch die hellroten Pfeile in der Abbildung).
Die einzige erforderliche Aufgabe auf dem Zielserver ist die Konfiguration von Routenregeln, um Antwortpakete (dargestellt durch hellgrüne Pfeile in der Abbildung) zum Assistenzserver zu leiten.
Die Rolle der Komponente intercept besteht darin, den Antwortheader (standardmäßig) an tcpcopy weiterzuleiten. Sie erfasst die Antwortpakete, extrahiert die Antwortheader-Informationen und sendet diese Informationen über einen dedizierten Kanal (dargestellt durch hellblaue Pfeile in der Abbildung) an tcpcopy. Nach Erhalt des Antwortheaders verwendet tcpcopy die Informationen, um die Attribute der Online-Pakete zu modifizieren und sendet anschließend weitere Pakete.
Es ist wichtig zu beachten, dass Antworten vom Zielserver zum Assistenzserver geleitet werden, der als schwarzes Loch fungiert.
Für intercept haben Sie zwei Optionen:
git clone git://github.com/session-replay-tools/intercept.git.Für tcpcopy haben Sie ebenfalls zwei Optionen:
git clone git://github.com/session-replay-tools/tcpcopy.git.intercept:cd intercept./configure makeintercept:make installintercept--single
Führen Sie intercept im nicht-verteilten Modus aus.
--with-pfring=PATH
Geben Sie den Pfad zu den PF_RING-Bibliotheksquellen an.
--with-debug
Kompilieren Sie intercept mit Debug-Unterstützung, die Protokolle werden in einer Datei gespeichert.
tcpcopy auf dem Online-Servertcpcopy:cd tcpcopy./configure maketcpcopy:make installtcpcopy--offline
TCP-Streams aus einer pcap-Datei wiedergeben.
--pcap-capture
Pakete auf der Sicherungsschicht erfassen.
--pcap-send
Pakete auf der Sicherungsschicht anstelle der IP-Schicht senden.
--with-pfring=PATH
Geben Sie den Pfad zu den PF_RING-Bibliotheksquellen an.
--set-protocol-module=PATH
Legen Sie fest, dass tcpcopy mit einem externen Protokollmodul arbeitet.
--single
Wenn sowohl intercept als auch tcpcopy mit der Option --single konfiguriert sind, arbeitet nur eine tcpcopy-Instanz mit intercept zusammen, was zu einer besseren Leistung führt.
--with-tcmalloc
Verwenden Sie tcmalloc anstelle von malloc.
--with-debug
Kompilieren Sie tcpcopy mit Debug-Unterstützung, die Protokolle werden in einer Datei gespeichert.
Nehmen Sie an, dass sowohl tcpcopy als auch intercept mit ./configure konfiguriert sind.
Auf dem Zielserver, auf dem Serveranwendungen ausgeführt werden:
Konfigurieren Sie die Routenregeln, um Antwortpakete an den Assistenzserver zu leiten. Wenn beispielsweise 61.135.233.161 die IP-Adresse des Assistenzservers ist, verwenden Sie den folgenden Route-Befehl, um alle Antworten von Clients im Bereich 62.135.200.x an den Assistenzserver zu leiten:
route add -net 62.135.200.0 netmask 255.255.255.0 gw 61.135.233.161
Auf dem Assistenzserver, auf dem intercept läuft (Root-Privileg oder CAP_NET_RAW-Funktion erforderlich):
./intercept -F <filter> -i <device>
Beachten Sie, dass das Filterformat dem pcap-Filter entspricht. Zum Beispiel:
./intercept -i eth0 -F 'tcp and src port 8080' -d
In diesem Beispiel erfasst intercept Antwortpakete von einer TCP-basierten Anwendung, die auf Port 8080 lauscht, unter Verwendung des Netzwerkgeräts eth0.
Bitte beachten Sie, dass ip_forward auf dem Assistenzserver nicht aktiviert ist.
Auf dem Online-Quellserver (Root-Privileg oder CAP_NET_RAW-Funktion erforderlich):
./tcpcopy -x localServerPort-targetServerIP:targetServerPort -s <intercept server> [-c <ip range>]
Zum Beispiel (unter der Annahme, dass 61.135.233.160 die IP-Adresse des Zielservers ist):
./tcpcopy -x 80-61.135.233.160:8080 -s 61.135.233.161 -c 62.135.200.x