Sunucular arasında TCP verimi nasıl tahmin edilir?
1Gbit/s (veya daha fazla) hız sunacağı garanti edilen özel bir kanala sahip bir sunucu satın aldınız ve dosya aktarımlarının beklediğiniz kadar hızlı olmadığını görünce hayal kırıklığına uğradınız. Teknik desteğe yazmadan ve ağ sorunları aramadan önce, bir ana bilgisayardan diğerine gerçek TCP verimini değerlendirmeye çalışın.
TCP üzerinden başarılı veri aktarımı için en önemli iki faktör vardır:
- TCP penceresinin boyutu - bir tarafın onay almadan kabul edeceği bayt sayısıdır;
- İletim-alma döngüsel gecikmesi (latency) - bir paketin gönderilmesi ve teslimatının onaylanması için geçen süre.
- Bunların her ikisini de bilmek, bant genişliğinden bağımsız olarak iki ana bilgisayar arasında paylaşılabilecek maksimum bant genişliğini hesaplamanıza olanak sağlayacaktır.
TCP bant genişliğini hesaplamak için formül
TCP verimi (bit/s) = TCP pencere boyutu (bit) / Gidiş-dönüş gecikmesi (s)
Bunu basit bir örnekle açıklayalım. Sunucular arasında 30 ms dairesel gecikme süresine sahip bir gigabit Ethernet bağlantımız var. Bir sunucudan başka bir sunucuya FTP yoluyla büyük bir dosya göndermemiz gerekiyor. Ne kadar gerçek bant genişliği bekleyebiliriz?
Öncelikle TCP pencere boyutunu bayttan bite dönüştürmeniz gerekir. Bu durumda, 64 KB = 65 536 B = 65 536 * 8 = 524 288 bitlik standart Windows makine TCP pencere boyutunu kullanacağız.
Daha sonra TCP pencere boyutunu bit cinsinden almanız ve saniye cinsinden ifade edilen kanalın dairesel gecikme süresine bölmeniz gerekir. Bu hesaplamaların amaçları doğrultusunda, 30 ms 0,030 sn'ye dönüşür.
Maksimum TCP verimi = 524,288 bit / 0.030 s = 17,476,266 bps = 17.4 Mbps
İki sunucu arasında gigabit Ethernet bağlantısı olmasına rağmen, dosya aktarırken 17 Mbit/s'den fazlasını bekleyemezsiniz.
Ağı nasıl daha hızlı hale getirebiliriz? Cevap açıktır: TCP penceresinin boyutunu artırmak ve/veya sinyal gecikmesini azaltmak.
Daha büyük bir TCP pencere boyutunu müzakere etmek için her sunucunun ayrı ayrı elle yapılandırılması gerekir. Bu da şu soruya yol açar: en uygun TCP pencere boyutu nedir? Bunu bulmak için bant genişliğine dayalı ters bir hesaplama yapmak gerekir.
Optimum TCP pencere boyutunu hesaplamak için formül
TCP pencere boyutu (bayt) = TCP pencere boyutu (bit) / 8 = Bant Genişliği (bit/s) * Gidiş-dönüş gecikmesi (s) / 8
Yukarıdaki örnekte, 30 ms dairesel gecikme süresine sahip sunucular arasında bir gigabit Ethernet rotası için aşağıdaki değer elde edilir:
1.000.000.000 bit/s * 0,030 s = 30.000.000 bit / 8 = 3.750.000 bayt.
Başka bir deyişle, her iki sunucuyu da 3.750 KB'lık bir TCP penceresi için yapılandırırsanız, FTP bağlantısı bant genişliğini tamamen dolduracak ve 1 Gbit/s'lik bir bant genişliğine ulaşacaktır.
TCP pencere boyutunu artırmanın dezavantajları olduğunu bilmelisiniz.
İlk olarak, sunucuları tamponlamak için daha fazla bellek gerekecektir, bu da mevcut olması durumunda onaylanmamış verileri depolamak için gereklidir.
İkinci olarak, TCP pencere boyutunun artırılması daha fazla kayıp pakete neden olabilir ve bu da tüm pencerenin yeniden gönderilmesini gerektirir. Bunun performans üzerinde olumsuz bir etkisi olabilir. Bu sorunu çözmek için, sunucunun TCP/IP yığını varsayılan olarak devre dışı olan "seçici onay" seçeneğini etkinleştirebilir.
Sorunu çözmek için, WAN Hızlandırıcıları - küresel ağ gaz pedalları - hattın her iki ucuna da yerleştirilebilir. Aşağıdakileri yapabilirler:
- Genişletilmiş bir TCP penceresi açın;
- TCP protokolünü hassas bir şekilde optimize etme yeteneği sağlar (örneğin, yalnızca gaz pedalları arasında seçici onaylama);
- özel sunucu yapılandırması veya ek tampon bellek gerektirmez;
- Dairesel gecikmeyi azaltmak için OSI modelinin uygulama katmanının (Katman 7 - ağ hizmetlerine erişim) özel işlevlerini kullanabilir.
Gecikme
Sinyal gecikmesini azaltmak mı istiyorsunuz? Prensipte bu yapılabilir mi? Işık hızının üstesinden gelemediğimiz için, bir sinyalin belirli bir mesafeyi ne kadar sürede kat edeceğini etkileyemeyiz. Tüm sistemi optimize etmenin en iyi yolu, hattın her iki ucuna, alınan TCP paketlerini yerel sunucuya ileten ve böylece gerçek veri aktarım hızında "hile yapan" bir WAN hızlandırıcı kurmaktır. Uzak sunucudan durmuş bir yanıt beklemek yerine, yerel sunucu gaz pedalından anlık onaylar alır. Bu da bizi sunucuların kendi TCP pencere boyutunu ayarlamak zorunda kalmaktan kurtarır. Bir çift WAAS cihazı, tüm hat segmenti boyunca artırılmış bir TCP pencere boyutu ve seçici onaylar kullanır.
Buna ek olarak WAAS, TCP akışını gereksiz verilerden etkili bir şekilde temizleyerek son derece yüksek düzeyde sıkıştırma (kompresyon) sağlar. Her gaz pedalı daha önce görüntülenen verileri hatırlar. Yinelenen bir parça tekrar oluşursa, kaldırılır ve 2 baytlık küçük bir etiketle değiştirilir. Bu küçük işaret, trafiği yerel sunucuya göndermeden önce orijinal veri parçasını yerine ekleyen uzak gaz pedalı tarafından tanınır.
Optimizasyonun kanıtlanmış sonucu, yerel sunucularda herhangi bir özel TCP ayarı yapılmaksızın sunucular arasında daha yüksek verim elde edilmesidir.
Belirli bir verim için izin verilen maksimum gecikmeyi hesaplama formülü
Örnek. İki uzak sunucu arasındaki bir sitede, standart bir TCP pencere boyutu (64KB) kullanarak 10 Gbps FTP verimini garanti etmelisiniz. İzin verilen maksimum sinyal gecikmesi nedir?
Gidiş-dönüş gecikmesi (ms) = TCP pencere boyutu (bit) / gerekli bant genişliği (bps)
524.288 bit / 10.000.000 bps = 52,4 mikrosaniye
Ne yapmalıyım?
Temel olarak, TCP penceresini artırmanıza veya WAN güçlendiricileri yüklemenize gerek yoktur. Sadece multithreading kullanın ve kanalı bant genişliğinin %100'ünde kullanabilirsiniz!