UDP
yük dengeleyicisini Netty
kullanarak yazıyorum.UDP yük dengeleyici Netty kullanarak
Yük dengeleyici, yerel bir taşıma adresinde dinler. Netty
açısından, bu adresi dinlemek için sadece bir adet Channel
oluşturulmuştur. Gelen UDP paketleri daha sonra, tek iş parçacığı (tek iş parçacıklı olay döngü grubunun) tarafından işlenmek üzere bir işçi iş parçacığı havuzuna gönderilir (burada, yük dengelemesi gerçekleştirme araçları).
Giden tarafında birden çok sunucu kullanılabilir. Alınan her UDP paketi için ilişkili çalışan iş parçacığı bir sunucu seçer ve UDP paketini bu sunucuya iletir. UDP paketini iletmek için Channel
'a ihtiyaç vardır. sunucularına tüm paketleri yönlendirmek için kullanılan bir tek giden Channel
kullanma
- :
Ben dört yaklaşımı görebilirsiniz. Bu yaklaşımı kullanarak, paketler her zaman aynı taşıma adresinden gönderilecektir.
- Kullanılabilir sunucu başına bir giden
Channel
kullanın. Bir sunucuya yönlendirilen her paket, bu sunucuyla ilişkiliChannel
kullanılarak iletilecektir. - N kullanılabilir sunucu başına giden
Çıkış Channel
. Bir sunucuya iletilen her paket, bu sunucuyla ilişkiliChannels
grubundan birChannel
kullanılarak iletilecektir. - Her paketin iletilmesi için yeni bir
Channel
kullanın.
Yaklaşım 4'ü denedim ve kötü performans getirdiğini görebiliyorum. Özellikle çok fazla soketin oluşturulduğu bir sorunla karşılaştım ve bu nedenle açık dosya limitini aştı.
Birden çok paket arasında paylaşıldığı için, 1, 2 ve 3 numaralı yaklaşımlar, UDP paketinin içine gönderenin adresini eklemeyi gerektirir, ancak bu aslında benim için bir sorun değil çünkü bu bilgiyi, aslında paketi işleyen sunucu için bu bilgiye gereksinim duyuyorum .
1, 2 ve 3 arasında önerilen yaklaşım nedir? Hedef sunucu başına bir veya daha fazla Channel
kullanmak iyi bir uygulamadır mı?
DÜZENLEME: aklıma geliyor
diğer yaklaşım Channels
bir ortak havuz kullanmaktır. Bir UDP paketi alındığında, mevcut bir sunucu seçilir, ardından havuzdan bir Channel
seçilir (örneğin yuvarlak robin seçim algoritması kullanılarak) ve paket bu Channel
kullanılarak iletilir.