Layer 4 vs Layer 7 Load Balancing


21

Saya mencoba untuk memutuskan antara menggunakan solusi load balancing layer 4 untuk datacenter saya atau solusi layer 7. Sayangnya (untuk kewarasan saya, yaitu), kasus penggunaan saya cukup sederhana sehingga kedua solusi akan bekerja dengan baik, menghindari sebagian besar kelemahan dan tidak benar-benar memanfaatkan kekuatan di sisi lain. Apapun solusi yang akhirnya kita gunakan, harus memiliki ketersediaan tinggi dan throughput yang tinggi. Tetapi kami hanya berencana untuk menggunakannya untuk memuat keseimbangan pada sekelompok server web, tidak ada yang memiliki persyaratan untuk manajemen sesi "sticky" (cookie atau IP), aturan penulisan ulang yang kompleks - atau, dalam hal ini, aturan penulisan ulang di semua.

Penyeimbang beban akan terhubung ke dua sakelar, keduanya dengan koneksi independen hingga ke lapisan agregasi pusat data dan digabungkan bersama-sama menggunakan Rapid Spanning Tree dan protokol kepemilikan apa pun yang digunakan sakelar untuk virtualisasi. Penyeimbang beban juga akan dihubungkan silang satu sama lain melalui kabel crossover. Semua server di kluster terhubung ke kedua sakelar. Yang harus dilakukan penyeimbang muatan adalah mengarahkan lalu lintas ke atas mereka.

Karena ini hanya HTTP, saya bisa menggunakan solusi load balancing layer 7 seperti HAProxy atau nginx. Tapi saya juga bisa menggunakan proyek LVS dengan ldirectord atau keepalived atau apa pun.

Saya sudah mencoba untuk memecah pro dan kontra seperti yang saya lihat, tetapi hanya berakhir di cuci. Apa yang akan Anda rekomendasikan dan mengapa? Apakah saya melewatkan sesuatu?

Jawaban:


17

Salah satu manfaat bermanfaat dari "L7" seperti haproxy adalah dapat menggunakan cookie untuk menjaga browser yang sama mengenai server backend yang sama. Ini membuat hit klien debugging lebih mudah.

Penyeimbangan L4 dapat memantulkan satu pengguna di beberapa server backend. (yang dalam kasus tertentu mungkin menguntungkan, tetapi dalam arti debugging / profiling, menggunakan "L7" jauh lebih berharga.)

EDIT: Ada juga keuntungan kecepatan potensial menggunakan HTTP balancing. Dengan keep-alives, klien dapat membuat sesi TCP tunggal ke penyeimbang Anda dan kemudian mengirim banyak HIT tanpa perlu membangun kembali sesi TCP baru (jabat tangan 3 arah). Demikian pula banyak LB mempertahankan sesi tetap hidup untuk sistem back end menghapus kebutuhan untuk melakukan jabat tangan yang sama di back end.

Penyetelan beban TCP yang ketat mungkin tidak menyelesaikan keduanya dengan mudah.

/ * FWIW: Saya tidak akan mengatakan "L7" atau "L4", saya akan mengatakan HTTP atau TCP. Tapi saya ngotot untuk menghindari menggunakan OSI untuk menggambarkan hal-hal yang tidak cocok dengan baik. * /

Saya pikir secara mendasar jika Anda tidak yakin harus menggunakan apa, ikuti apa yang terasa sederhana dan alami bagi Anda. Uji (gunakan bangku apache?) Dan pastikan itu berfungsi untuk kebutuhan Anda. Bagi saya HTTP LB lebih alami.


Stickiness, berbasis cookie atau berbasis IP, tentu saja merupakan keuntungan dari peralihan L7. Tapi itu bukan aplikasi yang bisa kita manfaatkan secara khusus.
Scrivener

Tidakkah satu kelemahan dari penyeimbangan beban level HTTP adalah Anda harus memiliki penyeimbang beban level TCP di depan penyeimbang HTTP untuk mengaktifkan failover di antara keduanya?
Scrivener

@Scrivener - Anda seharusnya tidak, tidak. DNS round-robin dapat mengatasi hal itu yang saya yakini, kecuali jika saya salah memahami pertanyaan Anda.
mfinni

@mfinni: DNS geografis global akan dapat menunjuk ke satu IP per pusat data. Saya perlu sesuatu untuk menanggapi IP itu.
Scrivener

Saya melihat. Yah, itu tergantung pada kemampuan perangkat Anda. Anda mungkin dapat menemukan perangkat berkemampuan L7 yang dapat bekerja berpasangan dengan satu cluster VIP yang tidak memerlukan perangkat keras penyeimbang beban TCP / IP. Jika IIS dan MS Windows NLB dapat melakukannya, saya membayangkan sebagian besar produk komersial lainnya dapat melakukannya.
mfinni

4

Mengingat kurangnya keuntungan bagi Anda dari melakukan penyeimbangan L7, saya akan memilih penyeimbang L4 sebagai gantinya. Saya penggemar berat agar sesederhana mungkin, tanpa mengorbankan terlalu banyak.

L7 mengharuskan penyeimbang untuk memeriksa header http dalam paket yang akan melewatinya untuk perutean yang sesuai, menambahkan overhead tambahan dan sedikit peningkatan latensi untuk pengguna akhir. Tampaknya menjadi pengeluaran yang sia-sia bagi saya jika Anda tidak akan mendapatkan apa-apa dari itu.


0

Beberapa penyedia DNS memiliki fungsi failover sederhana. Anda telah menyebutkan apa persyaratan Anda bukan dan bukan apa persyaratannya, tetapi jika semua yang Anda butuhkan adalah round robin dengan failover jika ada masalah, maka Anda dapat menggunakan misal Failover zoneedit.com . Tergantung pada kebutuhan HA Anda yang mungkin cukup baik dan Anda bisa melewati seluruh tingkatan dalam arsitektur Anda.


Saya berharap sesederhana itu - kita membutuhkan sesuatu yang lebih seperti round-robin dengan fail-over, ditambah pemisahan geografis. Namun, semua itu tidak ada dalam pertanyaan, karena itu dilakukan oleh perusahaan luar.
Ahli menulis

Apa maksud Anda - saya kira maksud saya DNS sedang dilakukan oleh perusahaan luar juga, dan beberapa dari mereka mendukung penyeimbangan beban geografis dan failover sebagai layanan DNS - atau maksud Anda ada beberapa pihak ketiga tambahan antara Anda dan penyedia DNS, atau bahwa Anda hanya tidak memiliki pendapat langsung atas DNS?
Ernest Mueller

Yang pertama - kami sudah melakukan DNS dengan perusahaan luar yang melakukan failover dan penyeimbangan beban geografis ke pusat data yang berbeda. Saya hanya perlu memuat keseimbangan di dalam pusat data.
Scrivener

Anda dapat menggunakan round robin yang sama untuk server dengan server di ujung depan, bukan? DNS untuk penyeimbangan muatan round robin sering digunakan untuk pusat data tunggal; banyak geolokasi adalah persyaratan besar di atas itu.
Ernest Mueller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.