Bir UDP sunucusunu Dengeleme


10

Bir udp sunucum var, bu benim iş sürecimin merkezi bir parçası. üretim ortamında beklediğim yükleri işlemek için muhtemelen sunucunun 2 veya 3 örneğine ihtiyacım olacak. Sunucu neredeyse tamamen vatansızdır, çoğunlukla veri toplar ve üstündeki katman, birden çok sunucu örneğinden kaynaklanabilecek asgari miktarda eski verinin nasıl işleneceğini bilir.

Benim sorum, sunucular arasında yük dengelemesini nasıl uygulayabilirim? İstekleri sunucular arasında olabildiğince eşit bir şekilde dağıtmayı tercih ederim. Ben de biraz sadakat istiyorum, yani istemci X sunucu y'ye yönlendirildiyse, o zaman X'in sonraki tüm isteklerinin mantıklı olduğu ve Y'yi aşırı yüklemediği sürece Y sunucusuna gitmesini istiyorum.

Bu arada bir .NET sistemi ... ne önerirsiniz?


durum bir tür işlem değil, sunucular içinde içseldir. durum, sunucuların aldıkları verilerden topladığı bazı verilerdir ve basit bir WCF WebService ile değiştirilebilir. Uygulama UDP dayanmaktadır ve karar kabul etmese de, onun "Benim ödeme derecesinin üstünde"

Şu anda MS'in NLB'sini deniyorum, tamam çalışıyor, sadakatini kutudan çıkarıyor, ancak tüm ağda gürültü üretiyor ...

Ayrıca DNS yok ... Oh ve tamamen kostüm protokolü.


İleride başvurmak için sadece bir not - sorular moderatör ve yüksek itibarlı kullanıcılar tarafından stackexchange siteleri arasında taşınabilir. Bu, daha önce yerleştirilmiş olan cevapların korunmasına yardımcı olur, bu nedenle genellikle kendi başınıza yeniden göndermekten daha iyidir (cevap yoksa, bu durumda eski soruyu silin, böylece kimse yanlışlıkla cevaplamaz). Taşımak için bir öneriyi kabul ediyorsanız, sadece bu etkiye bir yorum ekleyin ve (mümkünse) yayınınızı moderatörlerin dikkatine çekmek için işaretleyin; gönderi sizin için taşınmalıdır.
bdonlan

Yanıtlar:


4

Ben bir udp sunucum var, [...] sunucu neredeyse tamamen vatansız [..] biraz sadakat var, yani istemci X sunucu y yönlendirilirse, sonra X'in sonraki tüm istekleri Y sunucusuna gitmek istiyorum mantıklı olduğu ve Y'yi aşırı yüklemediği sürece.

Yani, bazı uygulama durumunu tutan ve UDP'nin üstünde çalışan açıklanmayan bir uygulama protokolü mü kullanıyorsunuz? Zor bir yöne gidiyorsunuz. UDP güvenilir bir veri aktarımı değildir , tüm mesele budur - güvenilir veri aktarımı için popüler arkadaş TCP'sine bakın. 'Sadakatinizi' elde etmenin tek yolu, uygulama katmanı protokolünüzü anlayan ve geçerli uygulama durumunuzun ne olduğunu bilen ve buna göre hareket edebilen bir yük dengeleme proxy'sine sahip olmaktır .

Aradığınızı sağlamaya yaklaşan 3 yaklaşım görüyorum:

  • Kaynak (son kullanıcı) IP adresine göre gelen bağlantıları statik olarak 3 IP adresine dağıtır . Bu şekilde, belirli bir kullanıcı her zaman aynı sunucuya yönlendirilir. Çoğu profesyonel güvenlik duvarı bunu sizin için yapabilir. Çoğu güvenlik duvarı sizin için arka uç sağlık kontrolleri yapmayacağından, 3 sunucuyu yüksek oranda kullanılabilir hale getirmeniz gerekebilir.

  • Matt Simmons tarafından önerildiği gibi DNS'yi ve DNS Round Robin'i kullanın.

  • Windows'un yerleşik Ağ Yükü Dengeleme işlevini (NLB) kullanın . Dürüst olmak gerekirse, yük devretme senaryosunun NLB ve yarı durumlu UDP tabanlı hizmetinizle nasıl oynayacağını bilmiyorum - başvurunuzun durumu nasıl ele aldığına göre bunu kendiniz araştırmanız gerekir. Artı tarafta, NLB'nin kurulumu çok kolaydır, Windows lisansı ile ücretsiz, olgun ve iyi performans gösterir.



6

Linux Sanal Sunucusu , gerçek sunucular kümesi üzerine kurulmuş yüksek düzeyde ölçeklenebilir ve yüksek oranda kullanılabilir bir sunucudur. LVS destekli UDP protokolü ve kaynak karma algoritması (bu, bir istemcinin her zaman aynı gerçek sunucuda görünmesini istediğinizde kullanılır).

DNS (rr), SIP (sh) 'yi dengelemek için LVM kullanıyorum.


4

İlginç. Gördüğüm proxy yazılımının çoğu TCP tabanlı.

Yetersiz deneyimimde gördüğüm UDP'ye özgü yük dengelemesinin çoğu DNS tabanlı (yani: zaman sunucuları, DNS sunucuları, vb.). Birden fazla A kaydı sağlamanın herhangi bir yolu var mı? Bu işe yararsa, normal DNS Round Robin, isteklerin adil bir şekilde dağıtılmasını (muhtemelen yeterince adil olsa da) ve istemci önbelleğe almayı sadakatin korunmasını sağlayacaktır (istemci tarafında önbellek tabanlı bir platform kullandığınız varsayılarak).


hiç DNS yok.
Hellfrost

2

Bunu yapmak için her türlü yük dengeleyiciyi kullanabilirsiniz, donanım veya yazılım, ihtiyacınıza göre farklı yük dengeleyiciler arasından seçim yapabilirsiniz.

Seviye 3 yük dengeleyici: Dengeyi sadece gelen IP'ye ve mevcut arka uç IP'lerine bakarak yükler, bu tür yük dengeleyici her zaman aynı gelen IP adresini aynı arka uca göndererek yapışkanlığı sağlar, ancak bu tür bir strateji bir tane aşırı yükleyebilir Aynı IP'den gelen birçok istemci varsa (proxy veya şirket ağ geçidi olsun) arka uçların

Seviye 7 yük dengeleyici: Seviye 7 yük dengeleyici sadece seviye 3 dengeleyici olarak dengelenmeyecek, aynı zamanda paketin içeriğine de bakacak ve dengeleme politikalarınız için size çok daha fazla esneklik sağlayacaktır.

UDP kullandığınız düşünüldüğünde, her iki dengeleyici de iyi bir performans sağlamalıdır, ayrıca UDP'deki derin paket denetimi TCP'den biraz daha sınırlıdır (sadece protokol nedenlerinden dolayı).

Bütçenize bağlı olarak bir yazılım yük dengeleyici (örneğin linux + IPVS) kullanarak başlayabilir ve daha sonra Cisco veya Netapp tarafından sunulanlar gibi donanım yük dengeleyicilerine başlayabilirsiniz.


L7 kısmı için -1. Bir Katman / Seviye 7 yük dengeleyici uygulama katmanında çalışır - ama OP UDP kullandığı olduğundan, o düz eski HTTP kullanarak değil, o da hangi uygulama ifşa edilmemiştir edilir kullanarak. OP'nin kullandığı protokol için bir L7 yük dengeleyicisinin olduğunu bilmiyoruz.
Jesper M

1
Sadece yük dengeleyicilerdeki seçeneklerini yorumluyordum ve UDP üzerinde ne kullandığını bilmiyoruz, sanırım bunu çok sıkı
kesiyorsunuz

NLB / linux ve Cisco / netapp arasında bir şey var: KEMP yük dengeleyicileri. Tonlarca paraya mal olmayan sanal bir sürümünü alabilirsiniz, kullanıyoruz ve çok mutluyuz.
pauska

2

Açık kaynaklı NGINX ve uygulama dağıtım platformu NGINX Plus artık UDP yük dengelemesini destekliyor. Yeni özellik, mevcut TCP ve HTTP yeteneklerimizi temel alarak NGINX'i daha da geniş bir İnternet uygulamaları ve cihazları yelpazesi için güçlü, kullanımı kolay ve tutarlı bir ön uç haline getiriyor.

Nginx-1.9.13 sürümünde mevcuttur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.