Eşzamanlı Bağlantılar
Proxy sunucuları hafif bir iş yükünde güvenilir biçimde çalışırken daha fazla çalışan süreç veya program birlikte çalıştığında hata döndürmeye başlayabilir. Bunun olası nedenlerinden biri, izin verilen eşzamanlı bağlantı sayısının aşılmasıdır.
Bu sınır, proxy kullanım sınırlarından biridir. Neyi yönettiğini ve neden bu sınıra ulaşıldığını anlamak için önce ağ bağlantısının ne olduğunu ve proxy üzerinden nasıl çalıştığını açıklamamız gerekir.
Bağlantı nedir ve nasıl çalışır?
Ağ bağlantısı, iki programın veri alışverişi yapmak için kurduğu iletişim bağıdır. Örneğin tarayıcı, bir sayfayı istemek ve içeriğini almak için web sunucusuna bağlanır. Bağlantı bu alışverişin yolunu sağlar; istek ve yanıt ise bu yol üzerinden gönderilen mesajlardır.
Geleneksel bir TCP bağlantısını ele alalım. Uygulama, sunucunun IP adresine ve gereken hizmetin portuna ulaşır. İki taraf bağlantıyı kurmak için kontrol mesajları alışverişinde bulunur. Ardından veriler paket adı verilen küçük birimler halinde taşınır. TCP teslimatı takip eder, kayıp verilerin yeniden gönderilmesini sağlar ve verileri alıcıya doğru sırada sunar. Bağlantı sürdüğü sürece iki taraf da alışverişe ilişkin bilgileri tutar.
Geleneksel bir TCP proxy kullanıldığında uygulama önce proxy sunucusuna bağlanır. Proxy sunucusu hedef web sitesine ayrı bir bağlantı kurar ve iki bağlantı arasında her iki yönde veri aktarır. Dolayısıyla hem istemciyle hem de hedefle iletişimi sürdürür.
Uygulama bir istek gönderebilir, yanıt alabilir ve kurulmuş bağlantıyı başka bir alışveriş için kullanabilir. Örneğin bir sayfanın alınması bağlantıyı mutlaka kapatmaz: tarayıcı, sunucuya daha sonra göndereceği istekler için bağlantıyı koruyabilir. Artık gerekmediğinde taraflardan biri bağlantıyı kapatır; hata veya zaman aşımı da bağlantıyı sonlandırabilir. Bağlantı kapanana kadar sürekli veri aktarmadan da var olabilir.
Bir program aynı anda bu tür birkaç bağlantıyı sürdürebilir: birinden veri alırken diğerinde yanıt bekleyebilir ve üçüncüsünü sonraki bir istek için hazır tutabilir. Bunlar eşzamanlı bağlantılardır. Bu sayı, program başladığından beri gönderilen toplam istekleri değil, o anda açık olan iletişim kanallarını tanımlar.
Sınır neyi ölçer?
Açık bir bağlantı, ilgili kotada bir yer kaplar. Bağlantı kapandığında ve hizmet onu sayımdan çıkardığında bu yer yeniden kullanılabilir olur. Bu, mevcut etkinliğe ilişkin bir sınırdır; dolayısıyla sınıra ulaşılması aylık bir bağlantı bakiyesini tüketmez.
Bağlantıların müşteri kotasına nasıl sayıldığı, ayrı bir hizmet kuralıdır. Proxy sunucusundaki iki ağ ayağı, kotadan otomatik olarak iki birim tüketmez.
Sağlayıcılar bu sınırları belirler, çünkü açık bağlantılar az veri aktarsalar bile sunucu kaynaklarını tüketir. Yanıt bekleyen bir bağlantının da sürdürülmesi gerekir. Sayılarının kontrol edilmesi, hizmetin desteklemeyi kabul ettiği iş yükleri için yeterli kapasiteyi korumasına yardımcı olur.
Aynı hizmet için birkaç farklı sınır geçerli olabilir:
| Sınır | Neyi yönetir? |
|---|---|
| Eşzamanlı bağlantılar | Kaç bağlantının aynı anda açık kalabileceği |
| Eşzamanlı istekler | Kaç isteğin aynı anda işlenmekte olabileceği |
| Saniye başına istek | İsteklerin ne sıklıkla gönderilebileceği veya işlenebileceği |
| Aktarım hızı | Saniyede ne kadar veri taşınabileceği |
| Trafik kotası | Bir faturalandırma döneminde ne kadar veri aktarılabileceği |
Dolayısıyla sınırsız trafik, eşzamanlı bağlantı sayısı hakkında hiçbir şey söylemez. Yeni bağlantıların ne hızda açılabileceğine ilişkin ayrı bir sınır da bulunabilir. Herhangi bir anda çok azı açık kalsa bile bağlantıları hızla açıp kapatmak bu sınıra ulaşılmasına neden olabilir.
İş parçacığı sayısı neden bağlantı sayısına eşit değildir?
Bir uygulamadaki iş parçacığı veya çalışan süreç sayısı, görevlerin nasıl düzenlendiğini anlatır. Proxy hizmetinin kaç bağlantı sayacağını güvenilir biçimde göstermez. Tek bir görev birden fazla sunucuyla iletişim kurabilir ve eşzamansız bir betik, her biri için ayrı bir işletim sistemi iş parçacığı oluşturmadan çok sayıda ağ işlemini yönetebilir.
Her HTTP isteği için de yeni bir bağlantı gerekmez. İstemci mevcut bir bağlantıyı yeniden kullanabilir ve HTTP/2, tek bir bağlantı üzerinden aynı anda birden fazla istek taşıyabilir. Bu nedenle istek sayısı bağlantı sayısından farklıdır.
Sağlayıcının kullandığı terimler de önemlidir. “Threads” veya “sessions” olarak tanımlanan bir sınır, açık bağlantıları veya işlenmekte olan istekleri ifade edebilir. İlgili istekler için aynı proxy IP adresini koruyan IP’nin korunduğu oturum (sticky session), mutlaka tek bir ağ bağlantısı anlamına gelmez. Yararlı olan tanım, hizmetin gerçekte neyi saydığıdır.
Hangi programlar kotayı paylaşır?
Bir sınır hesaba, satın alınan pakete, tek bir proxy IP adresine veya belirli bir ağ geçidine ait olabilir. Hesap veya paket sınırında, bu kotayı kullanan tüm programların ve cihazların bağlantılarını toplayın. IP listesini birkaç bilgisayara bölmek, her bilgisayar için ayrı bir kota oluşturmaz.
IP başına sınırda dağılım farklıdır: yoğun kullanılan bir adres üst sınırına ulaşırken diğerinde boş kapasite bulunabilir. Hizmet ayrıca daha düşük bir ortak sınır uygulamıyorsa işin bir bölümünü ikinci adrese taşımak yardımcı olabilir. Pakette hem genel kota hem de kullanıcılar veya istemci IP adresleri için daha küçük tahsisler bulunabilir.
Kimlik doğrulamasına izin verilen istemci IP adreslerinin sayısı başka bir ayardır. Bu ayar, söz konusu ağların kaç bağlantı açabileceğini değil, hangi ağların proxy sunucularına erişebileceğini yönetir. Tek bir genel IP adresinin arkasındaki birkaç cihaz, hem bu erişim kuralını hem de ona bağlı bağlantı tahsisini paylaşabilir.
Web sitesinin gördüğü proxy IP adresini değiştirmek, hesap genelindeki bağlantı kotasını sıfırlamaz. Benzer şekilde, IP’nin korunduğu oturumun adını veya protokolü değiştirmek otomatik olarak daha fazla kapasite sağlamaz. Sınır, sağlayıcının sayım için kullandığı hesaba, pakete veya bağlantı uç noktasına bağlı kalır.
Bağlantılar neden birikir?
Yeni bağlantılar mevcut bağlantıların kapanmasından daha hızlı açıldığında bağlantılar birikir. Bu durum sayfalar yüklenirken, dosyalar indirilirken veya başka ağ görevleri paralel çalıştırılırken ortaya çıkabilir: uygulama ek bağlantılar açarken bazı bağlantılar hâlâ veri aktarıyor veya yanıt bekliyor olabilir. Bu bağlantılar aynı anda kotaya sayılır ve birlikte proxy bağlantı sınırını doldurabilir.
Yavaş yanıtlar, bağlantıları daha uzun süre kullanımda tutar. Program aynı hızda yeni işler başlatmaya devam ederse tamamlanmamış işler birikir. Bunun yerine paralel etkinliği sabit bir düzeyde tutarsa daha yavaş bir web sitesi genellikle dakikada daha az görevin tamamlanması demektir. Her iki durum da proxy paketi değişmeden ortaya çıkabilir.
Uzun indirmeler ve zaman aşımını bekleyen bağlantılar da aynı etkiyi yaratabilir. Bu nedenle çok sayıda açık bağlantı, düşük aktarım hızıyla birlikte görülebilir: zamanın büyük kısmı veri taşımak yerine beklemeye harcanmaktadır.
Bazı bağlantılar istekler arasında bilinçli olarak açık tutulur. Buna genellikle keep-alive denir. Her seferinde yeni bağlantı kurmayı önler, ancak hizmet açık bağlantıları sayıyorsa boşta olan bağlantı yine de bir yer kaplayabilir. Uygulamanın havuzuna dönen bir bağlantı yeniden kullanıma hazırdır; proxy sunucusunda mutlaka kapanmış değildir.
Bağlantıların gerektiği gibi temizlenmemesi ayrı bir sorundur. Bu durum özel betiklerde olduğu gibi hazır yazılımlarda da görülebilir. Örneğin kod bir yanıtı okumaya başlayabilir, hatayla karşılaşabilir ve önceki yanıtı tamamlamadan veya kapatmadan başka bir istek başlatabilir. Eski bağlantılar kullanımda kalırken yenileri açılmaya devam ederse uygulama daha fazla yararlı iş yapmadan kotasını doldurabilir. Bu nedenle yalnızca başarılı isteklerden sonra değil, hata ve iptallerden sonra da temizleme işlemlerini kontrol etmek gerekir.
Doğru temizleme, istemcinin uygun bir bağlantıyı yeniden kullanmasına veya artık gerek duymadığını kapatmasına olanak verir. Zaman aşımı ayarları, yarıda bırakılan işlemlerin süresiz beklemesini önler. Yeniden kullanımı her yerde devre dışı bırakmak genel bir çözüm değildir: bağlantı kurma işini artırır ve yeni bağlantı hızını yükseltebilir. Amaç, gereksiz olanlar düzgün biçimde serbest bırakılırken veya kapatılırken yeniden kullanılabilir bağlantı sayısını kontrol altında tutmaktır.
Proxy sunucuları neden çalışıyor, sonra duruyor, sonra yeniden çalışıyor gibi görünür?
Yük altında aralıklı hatalar görülmesi, bağlantı sınırını erkenden kontrol etmek için bir nedendir. Bazı proxy adresleri çalışırken diğerleri hata veriyor gibi görünür; kısa süre sonra bu durum değişir. Uygulama açısından, proxy listesinin farklı bölümleri sürekli çevrimdışı oluyormuş izlenimi doğabilir.
Bir açıklama, paylaşılan kotanın dolu olmasıdır. Mevcut bağlantılar devam ederken yenilerini açma girişimleri reddedilebilir veya bekletilebilir. Önceki bağlantılar kapandıkça bazı yeni denemeler geçer. Boş yerler yeniden dolduğunda diğer denemeler başarısız olur. Değişen sonuç, sabit bir bozuk IP grubundan değil, aynı kota için rekabetten kaynaklanır.
Bu davranış bazen kısıtlama (throttling) olarak adlandırılır. Buradaki kısıtlama, yeni bağlantıların kabulünü etkiler; kurulmuş her bağlantının hızını mutlaka düşürmez. Kesin tepki hizmete bağlıdır: açık bir sınır mesajı döndürebilir, bağlantıyı reddedebilir veya istemciyi zaman aşımına bırakabilir. Bekleme kuyruğu garanti edilmez.
Bu açıklamayı kontrol etmek için hataları bağlantı sayısıyla karşılaştırın ve kotayı paylaşan programlardaki paralel etkinliği geçici olarak azaltın. Etkinlik sınırın altına düştüğünde hatalar duruyor ve kota yeniden dolduğunda geri dönüyorsa bağlantı sınırı olası bir nedendir. Benzer kesintiler hedef web sitesinden veya ağdan da kaynaklanabilir. Tek başına zaman aşımı ya da HTTP 429, 502 veya 503 yanıtı, proxy bağlantı sınırına ulaşıldığını göstermez; hatanın kaynağı ve ifadesi önemlidir.
Yararlı işi sınır içinde nasıl tutabilirsiniz?
Yazılımınızın kullanması gereken gerçek siteler ve işlemlerle başlayın. Paralel etkinliği kademeli olarak artırın; başarılı sonuçları, yanıt sürelerini ve bağlantıların en yüksek değerlerini izleyin. Hızlı bir sayfada yapılan kısa test, oturum açma işlemleri, büyük yanıtlar ve daha yavaş bağlantı uç noktaları içeren tam bir çalıştırmayı temsil etmeyebilir.
- Tüm programlara ortak bir bağlantı bütçesi ayırın. Diğer etkinlikler ve kısa süreli ani artışlar için yer bırakın. Birden fazla süreç aynı paketi kullanıyorsa her süreci paketin toplam kotasına ayarlamak, birlikte çalıştıklarında hizmete aşırı yük bindirebilir.
- Hem görevleri hem de bağlantıları kontrol edin. Bağlantı havuzu, bağlantıları yeniden kullanmak üzere saklar. Havuz boyutu ayarının kesin bir sınır mı yoksa yalnızca sonradan saklanan bağlantı sayısı mı olduğunu kontrol edin; bazı istemciler bekleme modu etkinleştirilmedikçe ek bağlantılar açar. İş başarısız olduğunda da yanıtları temizleme ve zaman aşımı mekanizmalarını çalışır tutun.
- Başlatmaları ve yeniden denemeleri zamana yayın. Tüm tarayıcıları aynı anda başlatmak veya başarısız her isteği hemen tekrarlamak yeni bir zirve oluşturur. Giderek artan bekleme süreleriyle sınırlı sayıda yeniden deneme kullanın ve bunları aynı iş yükü bütçesi içinde tutun. Zaman aşımı, gönderilen işlemin başarısız olduğunu da kanıtlamaz; bu nedenle satın alma veya güncelleme işlemini tekrarlamak dikkat gerektirir.
- Tamamlanan işi ölçün. Daha fazla çalışan süreç, ancak başarıyla tamamlanan iş miktarını artırdığı sürece yararlıdır. Çoğunlukla bekleme ve hata eklediklerinde daha düşük bir ayar aynı işi daha erken bitirebilir. Bir gösterge paneli etkinliğin zaman içindeki ortalamasını alıyorsa kısa süreli zirveler, uygulamanın hata zaman damgalarındakinden daha az görünür olabilir.
Tarayıcı görevlerinde gereksiz indirmelerden kaçınmak da ağ etkinliğini azaltabilir. Görev gerektirmiyorsa görselleri veya videoyu engellemek yardımcı olabilir; betikleri kaldırmak ise işlemin kendisini bozabilir. Değişikliği, amaçlanan görevin hâlâ doğru biçimde tamamlanıp tamamlanmadığına göre değerlendirin.
Daha yüksek sınır ne zaman yardımcı olur?
Uygulama bağlantılarını doğru yönetiyor ve gereken iş yükü sürekli olarak sağlayıcının üst sınırına ulaşıyorsa daha fazla bağlantı kapasitesi yararlıdır. Aynı küçük kota için rekabet etmeden daha fazla görevin birlikte çalışmasını sağlayabilir.
Satın alma, gerçekten ulaşılan sınırı artırmalıdır. İş IP adreslerine dağıtıldığında IP eklemek, IP başına kısıtlamaya yardımcı olabilir. Paylaşılan paket sınırında yeni paketin veya eklentinin bu ortak kotayı yükseltmesi gerekir. Tek başına IP sayısının artması, bunun gerçekleşeceğini kanıtlamaz.
Başka üst sınırlar da vardır. İstemcinin havuzu daha küçük olabilir, bilgisayarın ağ kaynakları yetersiz kalabilir veya hedef istekleri sınırlandırabilir. İzin verilen proxy bağlantısı sayısından bağımsız olarak tek bir mobil bağlantının da kendi kullanılabilir bant genişliği vardır. Daha fazla eşzamanlılık satın almak bu kısıtlamaları kaldırmaz ve sürekli bağlantı sızıntısına yol açan bir betiği düzeltmez.
Pratik hedef, hataları düşük tutarken iş yükünün olağan zirvelerine yetecek alan sağlamaktır. Bu sağlandığında ek bağlantı kotası, uygulamayı düzeltmeyi ertelemenin yolu olmak yerine yararlı bir kapasite yükseltmesi olabilir.
