Load Balancing server UDP

10

Saya memiliki server udp, ini adalah bagian sentral dalam proses bisnis saya. untuk menangani beban yang saya harapkan di lingkungan produksi saya mungkin perlu 2 atau 3 contoh server. Server hampir seluruhnya stateless, sebagian besar mengumpulkan data, dan lapisan di atasnya tahu bagaimana menangani jumlah minimal data basi yang dapat muncul dari beberapa server contoh.

Pertanyaan saya adalah, bagaimana saya bisa menerapkan load balancing antara server? Saya lebih suka mendistribusikan permintaan secara merata di antara server. Saya juga ingin memiliki kesetiaan, maksud saya jika klien X dialihkan ke server y, maka saya ingin semua permintaan X berikutnya pergi ke server Y, selama itu masuk akal dan tidak membebani Y.

Omong-omong, ini adalah sistem .NET ... apa yang akan Anda rekomendasikan?


keadaan internal di dalam server, bukan semacam transaksi. negara adalah beberapa data yang dikumpulkan server dari data yang mereka terima, dan dapat dipertanyakan dengan Layanan Web WCF sederhana. Aplikasi ini didasarkan pada UDP, dan meskipun saya tidak setuju dengan keputusan, itu "Di atas nilai gaji saya"

Saat ini saya sedang mencoba NLB MS, berfungsi dengan baik, ia melakukan hal yang benar, tetapi menghasilkan suara di seluruh jaringan ...

Juga tidak ada DNS ... Oh dan itu protokol yang sepenuhnya kostum.

Hellfrost
sumber
Hanya catatan untuk referensi di masa mendatang - pertanyaan dapat dipindahkan di antara situs pertukaran stack dalam banyak kasus oleh moderator dan pengguna reputasi tinggi. Ini membantu menjaga setiap jawaban yang sudah ditempatkan, jadi biasanya lebih baik daripada mengepos ulang sendiri (kecuali jika tidak ada jawaban, dalam hal ini hapus pertanyaan lama sehingga tidak ada yang secara tidak sengaja menjawabnya). Jika Anda setuju dengan saran untuk pindah, tambahkan saja komentar ke efek itu dan (jika mungkin) beri tanda pada posting Anda untuk mendapatkan perhatian moderator, dan postingan tersebut pada akhirnya akan dipindahkan untuk Anda.
bdonlan

Jawaban:

4

Saya memiliki udp server, [...] server hampir seluruhnya stateless [..] memiliki beberapa kesetiaan, maksud saya jika klien X dialihkan ke server y, maka saya ingin semua permintaan X selanjutnya pergi ke server Y, karena selama itu masuk akal dan tidak membebani Y.

Jadi, Anda menggunakan protokol aplikasi yang dirahasiakan yang membuat beberapa status aplikasi, dan berjalan di atas UDP? Anda agak menuju ke arah yang sulit. UDP bukan transportasi data yang andal, itulah intinya - untuk transportasi data yang andal lihat teman populernya TCP. Satu-satunya cara Anda bisa mendapatkan 'kesetiaan' Anda adalah dengan memiliki proxy penyeimbang muatan yang memahami protokol lapisan aplikasi Anda, dan yang tahu apa status aplikasi Anda saat ini dan dapat bertindak sesuai.

Saya melihat 3 pendekatan yang mendekati memberikan apa yang Anda cari:

  • Sebarkan secara statis koneksi masuk ke 3 alamat IP, berdasarkan alamat IP sumber (pengguna akhir). Dengan cara ini pengguna yang diberikan akan selalu diarahkan ke server yang sama. Sebagian besar firewall profesional dapat melakukan ini untuk Anda. Anda mungkin harus membuat sendiri 3 server yang sangat tersedia, karena kebanyakan firewall tidak akan melakukan pemeriksaan kesehatan backend untuk Anda.

  • Gunakan DNS, dan gunakan DNS Round Robin, seperti yang sudah disarankan oleh Matt Simmons.

  • Gunakan Network Load Balancing (NLB) bawaan Windows . Jujur, saya tidak tahu bagaimana skenario failover akan bermain dengan NLB dan layanan berbasis UDP semi-stateful Anda - Anda harus menyelidiki sendiri, berdasarkan bagaimana aplikasi Anda menangani negara. Di sisi positifnya, NLB sangat mudah diatur, gratis dengan lisensi Windows, matang, dan berkinerja baik.

Jesper M
sumber
saya mengedit pertanyaan saya
Hellfrost
6

Linux Virtual Server adalah server yang sangat skalabel dan sangat tersedia yang dibangun di atas sekelompok server nyata. LVS mendukung protokol UDP dan algoritma hash sumber (ini digunakan ketika Anda ingin klien selalu muncul di server yang sama).

Saya menggunakan LVM untuk menyeimbangkan DNS (rr), SIP (sh).

alvosu
sumber
4

Menarik. Sebagian besar perangkat lunak proksi yang saya lihat diakui berbasis TCP.

Sebagian besar load balancing khusus UDP yang saya lihat dalam pengalaman saya yang sedikit berbasis DNS (yaitu: server waktu, server DNS, dll). Apakah ada cara untuk memberikan beberapa catatan A? Jika itu akan berhasil, Round Round DNS normal akan memastikan distribusi permintaan yang adil (mungkin cukup adil) dan caching klien akan memastikan bahwa kesetiaan dipertahankan (dengan asumsi Anda menggunakan platform berbasis cache di ujung klien).

Matt Simmons
sumber
tidak ada DNS sama sekali.
Hellfrost
2

Anda dapat menggunakan segala jenis penyeimbang beban untuk melakukan ini, baik perangkat keras atau perangkat lunak, Anda dapat memilih dari penyeimbang beban yang berbeda berdasarkan apa yang Anda butuhkan.

Level 3 load balancer: Akan memuat saldo hanya dengan melihat IP masuk dan IP backend yang tersedia, penyeimbang beban semacam ini akan memastikan kekakuan dengan selalu mengirim alamat IP masuk yang sama ke backend yang sama, meskipun strategi semacam ini dapat membebani satu dari backends jika banyak klien berasal dari IP yang sama (baik itu proxy atau gateway perusahaan)

Level 7 load balancer: Level 7 load balancer tidak hanya akan menyeimbangkan sebagai penyeimbang level 3 tetapi juga akan melihat konten paket, yang akan memberi Anda lebih banyak fleksibilitas untuk kebijakan balancing Anda.

Mempertimbangkan bahwa Anda menggunakan UDP, kedua penyeimbang harus memberikan kinerja yang baik, juga inspeksi paket yang mendalam di UDP sedikit lebih terbatas daripada di TCP (hanya karena alasan protokol).

Tergantung pada anggaran Anda, Anda dapat mulai dengan menggunakan penyeimbang beban perangkat lunak (linux + IPVS misalnya) dan kemudian mulai naik ke penyeimbang beban perangkat keras seperti yang ditawarkan oleh Cisco atau Netapp

lynxman
sumber
-1 untuk bagian L7. Lapisan / Tingkat 7 penyeimbang beban bekerja pada lapisan aplikasi - tapi karena OP menggunakan UDP, dia tidak menggunakan HTTP tua polos, dan dia belum diungkapkan aplikasi mana dia adalah menggunakan. Kita tidak bisa tahu bahwa penyeimbang beban L7 ada untuk protokol OP menggunakan.
Jesper M
1
Saya baru saja mengomentari opsinya dalam load balancers, dan kami tidak tahu apa yang dia gunakan di atas UDP, saya pikir Anda terlalu ketat memotong ini;)
lynxman
Ada sesuatu antara NLB / linux dan Cisco / netapp: loadbalancers KEMP. Anda bisa mendapatkan edisi virtualnya yang tidak memerlukan biaya banyak uang, kami menggunakannya dan kami sangat senang.
pauska
2

Sumber terbuka NGINX dan platform pengiriman aplikasi, NGINX Plus sekarang mendukung penyeimbangan beban UDP. Kemampuan baru ini dibangun di atas kemampuan TCP dan HTTP kami yang ada, menjadikan NGINX sebagai antarmuka yang kuat, mudah digunakan, dan konsisten untuk berbagai aplikasi dan perangkat Internet yang lebih luas.

Tersedia di rilis nginx-1.9.13

anish
sumber