Ne tür bir yük dengeleme algoritması var?


32

HTTP için farklı yük dengeleme algoritmaları araştırıyordum ve az önce 3 buldum. Random, Round Robin ve Weighted Round Robin. Başka seçenek var mı?

Teşekkürler Paul

Yanıtlar:


33

HTTP yük dengeleyiciler için en yaygın yük dengeleme algoritmaları IMHO'dur:

  • Round Robin (bazen "Loop'ta Next" denir).

  • Ağırlıklı Yuvarlak Robin - Yuvarlak Robin olarak, ancak bazı sunucular genel trafikten daha büyük pay alır.

  • Rastgele .

  • Kaynak IP karması. Bağlantılar, kaynak IP adresine göre arka uç sunuculara dağıtılır. Bir webnode başarısız olursa ve kullanım dışı bırakılırsa dağıtım değişir. Tüm sunucular çalıştığı sürece IP adresi her zaman aynı web sunucusuna gidecektir.

  • URL karma. Çok kaynak IP karma gibi, isteğin URL'sinde karma dışında yapılması. Belirli bir nesne için talepler her zaman yalnızca bir arka uç önbelleğine gideceğinden, proxy önbelleklerinin önündeki yük dengelemesi sırasında kullanışlıdır. Bu, önbellek yinelemesini önler, aynı nesnenin birkaç / tüm önbellekte depolanması ve arka uç önbelleklerin etkin kapasitesini artırması.

  • En az bağlantı , ağırlıklı en az bağlantı. Yük dengeleyici, her sunucu için açık bağlantı sayısını izler ve en az meşgul sunucuya gönderir.

  • En az trafik , en az trafik ağırlıklı. Yük dengeleyici her bir sunucudan bit hızını izler ve en az giden trafiği olan sunucuya gönderir.

  • En az gecikme . Perlbal , sunucuların arka uçlarına hızlı bir HTTP SEÇENEĞİ isteği yapar ve isteği yanıtlayan ilk sunucuya gönderir.

Muhtemelen yukarıdakiler katı bir bilgisayar bilimi anlamında algoritmalar değildir, bunlar genel yaklaşımların daha genel tanımlarıdır. İşte Cisco'dan kullandıkları bazı algoritmaları daha ayrıntılı olarak anlatan küçük bir makale . Diğer satıcılardan gelen uygulamalar biraz farklı olacaktır.

Daha egzotik algoritmaların kullanışlı olduğu son durumlar vardır - örneğin, video akışı kendisini "en az trafik" e ödünç verebilir. Ancak genel olarak konuşmak gerekirse, çoğu web uygulaması ve web sitesi için en uygun çözüm şudur:

  • Bir paylaşılan / dağıtılan oturumu sistemi , herhangi Webnode herhangi bir kullanıcı isteğini cevap verebilir böylece (örneğin oturum çerezi gibi yani kullanıcı oturum verileri tüm sunuculara eşit mevcuttur).

  • Round Robin (isteğe bağlı Ağırlıklı Round Robin) veya Rastgele dağılım kullanarak yük dengeleme . Round Robin ve Random, herhangi bir 'hot spot' problemi olmadan basit ve esnek algoritmalardır, yani arka uçlara yük dağılımı her durumda adil kalır.


5

Soru eksik:

Yük Dengesi NEDİR?

CPU'lar doygunluk alabilir; olağan bakış açısı geriye doğrudur - onu çekmek yerine bir kaynağa doğru itmek.

Diskler, yer, okuma hızları, yazma hızları, verim, vb. Gibi dengelenecek birçok farklı yük türüne sahiptir.

Ağlar gecikme süresine veya toplam verime bağlı olarak yük dengeli ...

İnsanlar bireysel kapasitelere göre yük dengeli olabilir; Bazı çok görevli iyi, diğerleri değil ve sonra kalite vs miktar var. İnsan kaynaklarınızı birçok faktöre ve farklı niteliklere verilen farklı ağırlıklara göre optimize edebilirsiniz.

Yukarıdakiler ayrıntılı değildir; Mesele şu ki, farklı kaynaklar tamamen farklı yük dengelemeleri alıyor. Mevcut nitelikleri ve kapasiteleri arasında, WHICH'in dengeleme ile ilgilendiğini belirtmeniz gerekir.

Dengelemeye çalıştığınız şey, iyi bir dengeleme algoritması yapmanın ilk kriteridir. Ve sadece üç tane olduğuna dair öneri ... aydınlatılmamış. Tüm "yüklerin dengelenmesi" yollarını tarif etmeye çalışarak uygun bir iş yapmak doktora derecesine sahip olacaktır.

RT


2
Richard sorusunu kaçırıyorsunuz, algoritmalar herhangi bir yöntemin veya uygulamanın temelidir.
monomy

2
Pardon monomyth, lanet olası bir şeyi kaçırmadım. Zihnini aç.
Richard T,

@monomyth, @Richard haklıdır - Algoritma seçimi, ne yük dengeleyeceğinize bağlıdır. Denge disk alanı kullanımını yüklemek için bir algoritma geliştirebilirsiniz ve HTTP istekleri gibi başka bir şey için geçerli olmayabilir.
Josh,

@Josh, @ Richard, yük dengeleme kavramları aynı olsa. Disk kullanımı, iSCSI, HTTP, CPU, herhangi bir şeyi dengelemek için Round Robin kullanabilirsiniz.
Mark Henderson

@ Farseeker Katılıyorum, Robin Robin oldukça evrensel. Ancak göreve özgü bazı yük dengeleme algoritmaları yok mu?
Josh

0

Sorunuza doğrudan bir cevap değil, faydalı bulduğumuz gerçek bir çözüm. LVS ve darbe servisini kullanarak, HTTP yük dengelememiz basit bir SSH bağlantısı ve çalışma süresi çağrısı ile "gerçek sunucular" üzerindeki yükü belirleyen özel bir bash betiğini çağıracak şekilde yapılandırılmıştır .

Ardından, sunucuların yük ortalamasına bağlı olarak, sunucu başına bir ağırlık belirlenir. En bilimsel yaklaşım değildir, çünkü yük ortalaması mutlaka bu bağlantıların neden olduğu HTTP bağlantılarını veya CPU yükünü göstermez. Bununla birlikte, şaşırtıcı derecede etkili sonuçlar elde ettik.

Benim 2c. YMMV.

Not: LVS projesine bir bakın - kesinlikle yük dengesi planlama uygulamaları hakkında bilgi bulacaksınız.

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.