Rilis penyeimbang HTTP/TCP HAProxy 2.0

diterbitkan rilis penyeimbang beban HA Proksi 2.0, yang memungkinkan Anda mendistribusikan lalu lintas HTTP dan permintaan TCP sewenang-wenang di antara sekelompok server, dengan mempertimbangkan banyak faktor (misalnya, memeriksa ketersediaan server, menilai tingkat beban, memiliki tindakan penanggulangan DDoS) dan melakukan pemfilteran data primer ( misalnya, Anda dapat mengurai header HTTP, memfilter transmisi parameter kueri yang salah, memblokir substitusi SQL dan XSS, menghubungkan agen pemrosesan konten). HAProxy juga bisa berlaku untuk mengoordinasikan interaksi komponen dalam sistem berdasarkan arsitektur layanan mikro. Kode proyek ditulis dalam C dan disediakan berlisensi di bawah GPLv2. Proyek ini digunakan di banyak situs besar, termasuk Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter, dan Vimeo.

Fitur rilis utama:

  • API baru diperkenalkan Paket Data, yang memungkinkan Anda mengelola pengaturan HAProxy dengan cepat melalui REST Web API. Termasuk, Anda dapat secara dinamis menambah dan menghapus backend dan server, membuat ACL, mengubah perutean permintaan, mengubah pengikatan penangan ke IP;
  • Menambahkan arahan nbthread, yang memungkinkan Anda mengonfigurasi jumlah thread yang digunakan di HAProxy untuk mengoptimalkan kinerja pada CPU multi-core. Secara default, jumlah thread pekerja dipilih tergantung pada inti CPU yang tersedia di lingkungan saat ini, dan di lingkungan cloud, defaultnya adalah satu thread. Untuk menetapkan batas keras, opsi perakitan MAX_THREADS dan MAX_PROCS telah ditambahkan, membatasi batas atas jumlah thread dan proses;
  • Penggunaan direktif bind untuk mengikat penangan ke alamat jaringan telah disederhanakan. Saat pengaturan, tidak perlu lagi menentukan parameter proses - secara default, koneksi akan didistribusikan di antara thread tergantung pada jumlah koneksi aktif.
  • Menyiapkan log saat dijalankan dalam wadah terisolasi telah disederhanakan - log sekarang dapat dikirim ke stdout dan stderr, serta ke deskriptor file apa pun yang ada (misalnya, “log fd@1 local0”);
  • Dukungan untuk HTX (Representasi HTTP Asli) diaktifkan secara default, memungkinkan penyeimbangan saat menggunakan fitur-fitur canggih seperti HTTP/2 end-to-end, Percobaan Ulang Lapisan 7, dan gRPC. HTX tidak menggantikan header yang ada, tetapi mengurangi operasi modifikasi menjadi menghapus dan menambahkan header baru ke akhir daftar, yang memungkinkan Anda memanipulasi varian protokol HTTP yang diperluas, menjaga semantik asli header dan memungkinkan Anda untuk mencapai kinerja yang lebih tinggi saat menerjemahkan HTTP/2 ke HTTP/1.1 dan sebaliknya;
  • Menambahkan dukungan resmi untuk mode HTTP/2 End-to-End (pemrosesan semua tahapan dalam HTTP/2, termasuk panggilan ke backend, dan bukan hanya interaksi antara proxy dan klien);
  • Dukungan penuh untuk proksi dua arah pada protokol gRPC telah diterapkan dengan kemampuan untuk mengurai aliran gRPC, menyorot pesan individual, mencerminkan lalu lintas gRPC di log, dan memfilter pesan menggunakan ACL. gRPC memungkinkan Anda mengatur kerja layanan mikro dalam berbagai bahasa pemrograman yang berinteraksi satu sama lain menggunakan API universal. Komunikasi jaringan di gRPC diimplementasikan di atas protokol HTTP/2 dan didasarkan pada penggunaan Protocol Buffer untuk serialisasi data.
  • Menambahkan dukungan untuk mode "Percobaan Ulang Lapisan 7", yang memungkinkan Anda mengirim permintaan HTTP berulang jika terjadi kegagalan perangkat lunak yang tidak terkait dengan masalah pembuatan koneksi jaringan (misalnya, jika tidak ada respons atau respons kosong ke a permintaan POSTING). Untuk menonaktifkan mode ini, tanda “disable-l7-retry” telah ditambahkan ke opsi “http-request”, dan opsi “retry-on” telah ditambahkan untuk menyempurnakan bagian default, pendengaran, dan backend. Tanda-tanda berikut tersedia untuk dikirim ulang: kesalahan yang dapat dicoba ulang, tidak ada, kegagalan sambungan, respons kosong, respons sampah, waktu respons habis, 0rtt ditolak, serta pengikatan ke kode status pengembalian (404, dll.) ;
  • Manajer proses baru telah diterapkan, yang memungkinkan Anda mengonfigurasi pemanggilan file eksternal yang dapat dieksekusi dengan penangan untuk HAProxy.
    Misalnya, Data Plan API (/usr/sbin/dataplaneapi), serta berbagai mesin pemrosesan aliran Offload, diimplementasikan dalam bentuk pengendali eksternal;

  • Binding telah ditambahkan untuk .NET Core, Go, Lua dan Python untuk mengembangkan ekstensi SPOE (Stream Processing Offload Engine) dan SPOP (Stream Processing Offload Protocol). Sebelumnya, pengembangan ekstensi hanya didukung di C;
  • Menambahkan pengendali spoa-mirror eksternal (/usr/sbin/spoa-mirror) untuk mencerminkan permintaan ke server terpisah (misalnya, untuk menyalin sebagian lalu lintas produksi untuk menguji lingkungan eksperimental di bawah beban nyata);
  • Disampaikan oleh Pengontrol Masuknya HAProxy Kubernetes untuk memastikan integrasi dengan platform Kubernetes;
  • Menambahkan dukungan bawaan untuk mengekspor statistik ke sistem pemantauan Prometheus;
  • Protokol Peers, yang digunakan untuk bertukar informasi dengan node lain yang menjalankan HAProxy, telah diperluas. Termasuk dukungan tambahan untuk Detak Jantung dan transmisi data terenkripsi;
  • Parameter "sampel" telah ditambahkan ke direktif "log", yang memungkinkan Anda membuang hanya sebagian permintaan ke dalam log, misalnya 1 dari 10, untuk membentuk sampel analitis;
  • Menambahkan mode pembuatan profil otomatis (direktif profiling.tasks, yang dapat mengambil nilai secara otomatis, hidup dan mati). Pembuatan profil otomatis diaktifkan jika latensi rata-rata melebihi 1000 ms. Untuk melihat data pembuatan profil, perintah “tampilkan profil” telah ditambahkan ke Runtime API atau dimungkinkan untuk mengatur ulang statistik ke log;
  • Menambahkan dukungan untuk mengakses server backend menggunakan protokol SOCKS4;
  • Menambahkan dukungan ujung ke ujung untuk mekanisme pembukaan koneksi TCP dengan cepat (TFO - TCP Fast Open, RFC 7413), yang memungkinkan Anda mengurangi jumlah langkah pengaturan koneksi dengan menggabungkan yang pertama menjadi satu permintaan dan langkah kedua dari proses negosiasi koneksi 3 langkah klasik dan memungkinkan pengiriman data pada tahap awal pembuatan koneksi;
  • Tindakan baru ditambahkan:
    • "http-request replace-uri" untuk mengganti URL menggunakan ekspresi reguler;
    • “tcp-request content do-resolve” dan “http-request do-resolve” untuk menyelesaikan nama host;
    • “tcp-request content set-dst” dan “tcp-request content set-dst-port” untuk menggantikan alamat IP dan port target.
  • Menambahkan modul konversi baru:
    • aes_gcm_dev untuk mendekripsi aliran menggunakan algoritma AES128-GCM, AES192-GCM dan AES256-GCM;
    • protobuf untuk mengekstrak bidang dari pesan Protocol Buffer;
    • ungrpc untuk mengekstrak kolom dari pesan gRPC.

    Sumber: opennet.ru

Tambah komentar