Algoritma load balancing seperti apa yang ada

32

Saya sedang meneliti berbagai algoritma load balancing untuk HTTP dan saya baru saja menemukan 3. Random, Round Robin dan Weighted Round Robin. Apakah ada opsi lain?

Terima kasih Paul

Paul Sheldrake
sumber

Jawaban:

33

Algoritma load balancing yang paling umum untuk penyeimbang beban HTTP adalah IMHO:

  • Round Robin (kadang-kadang disebut "Next in Loop").

  • Rounded Round Robin - sebagai Round Robin, tetapi beberapa server mendapatkan bagian yang lebih besar dari keseluruhan lalu lintas.

  • Acak .

  • Sumber IP hash. Koneksi didistribusikan ke server backend berdasarkan alamat IP sumber. Jika webnode gagal dan dihapus dari layanan, distribusi berubah. Selama semua server menjalankan alamat IP klien yang diberikan akan selalu pergi ke server web yang sama.

  • Hash URL . Sama seperti hash IP sumber, kecuali hashing dilakukan pada URL permintaan. Berguna saat memuat penyeimbangan di depan cache proxy, karena permintaan untuk objek tertentu akan selalu pergi ke satu cache backend. Ini menghindari duplikasi cache, memiliki objek yang sama disimpan di beberapa / semua cache, dan meningkatkan kapasitas cache backend yang efektif.

  • Koneksi paling tidak, koneksi paling ringan. Load balancer memonitor jumlah koneksi terbuka untuk setiap server, dan mengirim ke server yang paling tidak sibuk.

  • Lalu lintas minimum, lalu lintas terbobot. Load balancer memonitor bitrate dari setiap server, dan mengirim ke server yang memiliki lalu lintas keluar paling sedikit.

  • Paling tidak latensi . Perlbal membuat permintaan HTTP OPTIONS cepat ke server backend, dan mengirim permintaan ke server pertama untuk menjawab.

Bisa dibilang di atas bukan algoritma dalam arti ilmu komputer yang ketat, mereka lebih umum deskripsi dari pendekatan umum. Berikut ini adalah satu kertas kecil dari Cisco yang menjelaskan beberapa algoritma yang mereka gunakan secara lebih rinci . Implementasi dari vendor lain akan sedikit berbeda.

Ada kasus tepi di mana algoritma yang lebih eksotis berguna - misalnya streaming video mungkin cocok untuk "lalu lintas paling sedikit". Namun secara umum, untuk sebagian besar aplikasi web dan situs web, solusi optimalnya adalah:

  • Sistem sesi bersama / didistribusikan , sehingga setiap webnode dapat menjawab permintaan pengguna apa pun (yaitu data sesi pengguna seperti cookie sesi tersedia secara merata untuk semua server).

  • Load balancing menggunakan Round Robin (opsional Rounded Weight Robin) atau distribusi acak . Round Robin dan Random adalah algoritma sederhana dan tangguh tanpa masalah 'hot spot', yaitu distribusi beban ke backend tetap adil di semua situasi.

Jesper M
sumber
5

Pertanyaannya tidak lengkap:

Load Balance APA?

CPU mungkin membutuhkan saturasi; perspektif yang biasa adalah mundur - mendorong sumber daya bukannya menariknya.

Disk memiliki berbagai jenis beban untuk diseimbangkan, seperti ruang, kecepatan baca, kecepatan tulis, throughput, dll.

Jaringan dapat dimuat secara seimbang berdasarkan latensi atau total ...

Orang dapat diseimbangkan berdasarkan kapasitas individu; beberapa tugas multi dengan baik, yang lain tidak dan kemudian ada kualitas vs kuantitas. Anda dapat mengoptimalkan sumber daya manusia Anda berdasarkan banyak faktor dan dengan bobot yang berbeda diberikan untuk atribut yang berbeda.

Di atas jauh dari lengkap; intinya adalah bahwa sumber daya yang berbeda mengambil jenis penyeimbangan beban yang sama sekali berbeda. Dari atribut dan kapasitas mereka yang tersedia, Anda harus menyatakan bahwa WHICH tertarik untuk menyeimbangkan.

Apa yang Anda coba untuk menyeimbangkan adalah kriteria pertama dalam membuat algoritma penyeimbangan yang baik. Dan saran bahwa hanya ada tiga adalah ... belum tercerahkan. Akan layak gelar PhD untuk melakukan pekerjaan yang layak mencoba untuk menggambarkan semua cara "beban seimbang."

RT

Richard T
sumber
2
Anda melewatkan pertanyaan Richard, algoritma adalah dasar dari setiap metode atau implementasi.
monomyth
2
Maaf monomyth, aku tidak melewatkan hal terkutuk. Buka pikiranmu.
Richard T
@monomyth, @Richard benar - Pilihan algoritma tergantung pada apa yang Anda load balancing. Anda dapat mengembangkan algoritme untuk memuat penggunaan ruang disk yang seimbang dan yang mungkin tidak berlaku sama sekali untuk hal lain, seperti permintaan HTTP.
Josh
@Josh, @ Richard, konsep load balancing adalah sama. Anda mungkin masih menggunakan Round Robin untuk menyeimbangkan penggunaan disk, iSCSI, HTTP, CPU, apa pun.
Mark Henderson
@Farseeker Saya setuju, Round Robin cukup universal. Tapi bukankah ada algoritma load balancing yang spesifik untuk tugas itu?
Josh
0

Bukan jawaban langsung untuk pertanyaan Anda, tetapi solusi aktual yang kami temukan bermanfaat. Menggunakan LVS dan daemon pulsa, penyeimbangan beban HTTP kami dikonfigurasikan untuk memanggil skrip bash khusus yang menentukan beban pada "server sebenarnya" melalui koneksi SSH sederhana dan panggilan ke waktu aktif .

Kemudian, berdasarkan rata-rata beban server, bobot ditetapkan per server. Bukan pendekatan yang paling ilmiah, karena rata-rata beban tidak selalu mengindikasikan koneksi HTTP atau beban CPU yang disebabkan oleh koneksi tersebut. Meskipun demikian, kami memiliki hasil yang sangat efektif.

2c saya YMMV.

PS: lihat proyek LVS - Anda pasti akan menemukan info tentang implementasi penjadwalan keseimbangan beban.

Zayne S Halsall
sumber