Die wirksamste einzelne Änderung zur Verbesserung der Proxy-Performance ist nicht, einen schnelleren Proxy zu kaufen, sondern die bestehende Verbindung wiederzuverwenden. Ein Client, der für jede Anfrage eine neue Verbindung öffnet, zahlt die Verbindungsaufbaukosten immer wieder – und diese Kosten vervielfachen sich beim Weg über den Proxy.
Die tatsächlichen Kosten des Verbindungsaufbaus
Diese 200 ms fallen bei jeder neuen Verbindung erneut an. Wenn Sie 1.000 Anfragen senden und jedes Mal eine neue Verbindung öffnen, verbrauchen Sie allein für den Aufbau 200 Sekunden.
Wie funktioniert Keep-Alive?
In HTTP/1.1 sind Verbindungen standardmäßig persistent: Nach Eintreffen der Antwort wird die Verbindung nicht geschlossen, die nächste Anfrage geht über denselben Socket. Drei Dinge stören dieses Verhalten:
- Der Server
Connection: closesendet – die Verbindung wird geschlossen. - Der Client erzeugt bei jeder Anfrage ein neues Session-Objekt – der Pool greift überhaupt nicht.
- Die Idle-Zeit wird überschritten – Proxy oder Server verwerfen die Verbindung.
Im Code für jede Anfrage ein neues Session, Client oder Agent -Objekt zu erzeugen. Das deaktiviert die Wiederverwendung von Verbindungen vollständig, unabhängig von Ihrer Pool-Konfiguration.
Die richtige Konfiguration
Halten Sie die Poolgröße knapp unterhalb des Parallelitätslimits Ihres Anbieters. Überschreiten Sie es, werden zusätzliche Verbindungen aufgebaut und sofort wieder geschlossen.
Wie groß ist der Gewinn?
In der Beispielmessung senkt die Nutzung des Pools die Gesamtdauer auf etwa ein Drittel. Der Gewinn wächst, je höher die Latenz zum Proxy ist.
TLS-Session-Wiederverwendung
Neben dem Verbindungspool gibt es eine zweite Gewinnquelle: das TLS-Session-Ticket. Beim erneuten Verbinden mit demselben Ziel kann statt eines vollständigen Handshakes ein verkürzter Handshake erfolgen. Die meisten modernen Clients tun dies automatisch; entscheidend ist, das Client-Objekt wiederzuverwenden.
Wenn Sie das Client-Objekt bei jeder Anfrage neu erzeugen, geht das Session-Ticket verloren und es wird jedes Mal ein vollständiger Handshake durchgeführt.
Die Balance der Idle-Zeit
Eine Verbindung zu lange offen zu halten kann ebenfalls Probleme bereiten: Proxy oder Zielserver können die Verbindung stillschweigend verwerfen, und Ihr Client merkt das erst bei der nächsten Anfrage. Das führt zum Muster „erste Anfrage fehlgeschlagen, zweite erfolgreich".
| Einstellung | Empfehlung | Warum |
|---|---|---|
| keepalive_expiry | 30–60 Sek. | Muss kürzer sein als das Server-Timeout |
| Poolgröße | Unterhalb des Parallelitätslimits | Mehr bedeutet vergeudete Handshakes |
| Wiederholungsversuch | 1-mal | Gleicht eine verworfene Verbindung aus |
| Begrenzung der Verbindungslebensdauer | 5–10 Min. | Langlebige Verbindungen werden schal |
Halten Sie die Idle-Zeit kürzer als das Server-Timeout. So schließen Sie die Verbindung selbst und die Situation „der Server hat geschlossen, aber ich weiß es nicht" entsteht gar nicht erst.
Der Konflikt mit der Rotation
Die Wiederverwendung von Verbindungen steht naturgemäß im Konflikt mit der IP-Rotation: Dieselbe Verbindung zu nutzen bedeutet, auf derselben Ausgangs-IP zu bleiben. Das ist kein Problem, sondern eine Abwägung:
In den meisten Szenarien ist die zweite Option richtig: Verwenden Sie die Verbindung eine Zeit lang wieder (etwa 30 Anfragen oder 5 Minuten) und erneuern Sie sie dann.
Für Rotationsstrategien zu unserem Beitrag über Rotationseinstellungen können Sie nachlesen.
Zusammenfassung
Keep-Alive und Verbindungspool sind der größte einzelne Hebel für die Proxy-Performance. Erzeugen Sie das Client-Objekt einmal und verwenden Sie es wieder, halten Sie die Poolgröße unter dem Anbieterlimit, stellen Sie die Idle-Zeit kürzer als das Server-Timeout ein und fügen Sie einen einzelnen Wiederholungsversuch hinzu. Wenn Sie Rotation benötigen, ziehen Sie eine periodische Erneuerung dem Abschalten des Pools vor. Für die Messung Ping-Test und Proxy-Check können Sie unsere Tools nutzen.