Proxy performansını iyileştirmek için yapılabilecek tek en etkili değişiklik, daha hızlı bir proxy satın almak değil; mevcut bağlantıyı yeniden kullanmaktır. Her istek için yeni bağlantı açan bir istemci, bağlantı kurulum maliyetini sürekli öder ve bu maliyet proxy üzerinden geçerken katlanır.
Bağlantı Kurulumunun Gerçek Maliyeti
Bu 200 ms, her yeni bağlantıda yeniden ödenir. 1.000 istek atıyorsanız ve her seferinde yeni bağlantı açıyorsanız, yalnızca kurulum için 200 saniye harcarsınız.
Keep-Alive Nasıl Çalışır?
HTTP/1.1'de bağlantılar varsayılan olarak kalıcıdır: yanıt geldikten sonra bağlantı kapanmaz, sonraki istek aynı soket üzerinden gönderilir. Bu davranışı bozan üç şey vardır:
- Sunucu
Connection: closegönderir — bağlantı kapatılır. - İstemci her istekte yeni oturum nesnesi oluşturur — havuz hiç çalışmaz.
- Boşta kalma süresi aşılır — proxy veya sunucu bağlantıyı düşürür.
Kodda her istek için yeni bir Session, Client veya Agent nesnesi oluşturmak. Bu, havuz yapılandırmanız ne olursa olsun bağlantı yeniden kullanımını tamamen devre dışı bırakır.
Doğru Yapılandırma
Havuz boyutunu sağlayıcınızın eşzamanlılık limitinin hemen altında tutun. Aşarsanız fazladan bağlantılar kurulup hemen kapatılır.
Kazanç Ne Kadar?
Örnek ölçümde havuz kullanımı toplam süreyi yaklaşık üçte bire indiriyor. Kazanç, proxy'ye olan gecikme arttıkça büyür.
TLS Oturum Yeniden Kullanımı
Bağlantı havuzunun yanında ikinci bir kazanç kaynağı daha var: TLS oturum bileti. Aynı hedefe yeniden bağlanırken tam el sıkışma yerine kısaltılmış bir el sıkışma yapılabilir. Çoğu modern istemci bunu otomatik yapar; önemli olan istemci nesnesini yeniden kullanmaktır.
İstemci nesnesini her istekte yeniden oluşturursanız oturum bileti kaybolur ve her seferinde tam el sıkışma yapılır.
Boşta Kalma Süresi Dengesi
Bağlantıyı çok uzun açık tutmak da sorun çıkarabilir: proxy veya hedef sunucu sessizce bağlantıyı düşürebilir ve istemciniz bunu ancak bir sonraki istekte fark eder. Bu, "ilk istek başarısız, ikincisi başarılı" desenine yol açar.
| Ayar | Önerilen | Neden |
|---|---|---|
| keepalive_expiry | 30–60 sn | Sunucu zaman aşımından kısa olmalı |
| Havuz boyutu | Eşzamanlılık limitinin altında | Fazlası boşa el sıkışma |
| Yeniden deneme | 1 kez | Düşmüş bağlantıyı telafi eder |
| Bağlantı ömrü sınırı | 5–10 dk | Uzun ömürlü bağlantılar bayatlar |
Boşta kalma süresini sunucunun zaman aşımından kısa tutun. Böylece bağlantıyı siz kapatırsınız ve "sunucu kapattı ama ben bilmiyorum" durumu oluşmaz.
Rotasyon ile Çelişki
Bağlantı yeniden kullanımı ile IP rotasyonu doğal olarak çelişir: aynı bağlantıyı kullanmak aynı çıkış IP'sinde kalmak demektir. Bu bir sorun değil, bir tercih meselesidir:
Çoğu senaryoda ikinci seçenek doğrudur: bağlantıyı bir süre (örneğin 30 istek veya 5 dakika) yeniden kullanın, sonra yenileyin.
Rotasyon stratejileri için rotasyon ayarları yazımıza bakabilirsiniz.
Özet
Keep-alive ve bağlantı havuzu, proxy performansındaki en büyük tek kaldıraçtır. İstemci nesnesini bir kez oluşturup yeniden kullanın, havuz boyutunu sağlayıcı limitinin altında tutun, boşta kalma süresini sunucunun zaman aşımından kısa ayarlayın ve tek bir yeniden deneme ekleyin. Rotasyon ihtiyacı varsa havuzu kapatmak yerine periyodik yenileme tercih edin. Ölçüm için ping testi ve proxy kontrol araçlarımızı kullanabilirsiniz.