Keluaran pengimbang HTTP/TCP HAProxy 2.0

diterbitkan pelepasan pengimbang beban Proksi HA 2.0, yang membolehkan anda mengedarkan trafik HTTP dan permintaan TCP sewenang-wenangnya antara sekumpulan pelayan, dengan mengambil kira banyak faktor (contohnya, menyemak ketersediaan pelayan, menilai tahap beban, mempunyai langkah balas DDoS) dan melakukan penapisan data utama (contohnya , anda boleh menghuraikan pengepala HTTP, menapis penghantaran parameter pertanyaan yang salah, menyekat penggantian SQL dan XSS, menyambung ejen pemprosesan kandungan). HAProxy pun boleh memohon untuk menyelaraskan interaksi komponen dalam sistem berdasarkan seni bina perkhidmatan mikro. Kod projek ditulis dalam bahasa C dan dibekalkan dilesenkan di bawah GPLv2. Projek ini digunakan oleh banyak tapak utama termasuk Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter dan Vimeo.

Ciri utama keluaran:

  • API baharu diperkenalkan Pelan Data, yang membolehkan anda mengurus tetapan HAProxy dengan cepat melalui API Web REST. Antara lain, anda boleh menambah dan mengalih keluar backend dan pelayan secara dinamik, mencipta ACL, menukar penghalaan permintaan, menukar pengikatan pengendali kepada IP;
  • Menambahkan arahan nbthread untuk melaraskan bilangan utas yang digunakan dalam HAProxy untuk mengoptimumkan prestasi pada CPU berbilang teras. Secara lalai, bilangan utas pekerja dipilih bergantung pada teras CPU yang tersedia dalam persekitaran semasa dan dalam persekitaran awan, satu utas ditetapkan secara lalai. Untuk menetapkan had keras, pilihan pemasangan MAX_THREADS dan MAX_PROCS telah ditambahkan, yang mengehadkan had atas bilangan utas dan proses;
  • Penggunaan ringkas arahan bind untuk mengikat pengendali ke alamat rangkaian. Apabila mengkonfigurasi, tidak lagi perlu untuk menentukan parameter proses - secara lalai, sambungan akan diedarkan antara aliran bergantung pada bilangan sambungan aktif.
  • Penyediaan log dipermudahkan apabila dijalankan dalam bekas terpencil - log kini boleh diarahkan ke stdout dan stderr, serta kepada mana-mana deskriptor fail sedia ada (contohnya, "log fd@1 local0");
  • Sokongan HTX (Perwakilan HTTP Asli) didayakan secara lalai untuk memberikan keseimbangan apabila menggunakan ciri lanjutan seperti HTTP/2 hujung ke hujung, Percubaan Semula Lapisan 7 dan gRPC. HTX tidak menggantikan pengepala di tempatnya, tetapi mengurangkan operasi perubahan untuk mengalih keluar dan menambah pengepala baharu ke penghujung senarai, yang membolehkan anda memanipulasi sebarang versi lanjutan protokol HTTP sambil mengekalkan semantik asal pengepala dan membenarkan anda untuk mencapai prestasi yang lebih tinggi apabila menterjemah HTTP/2 kepada HTTP/1.1 dan sebaliknya;
  • Menambahkan sokongan rasmi untuk mod HTTP/2 End-to-End (mengendalikan semua peringkat dalam HTTP/2, termasuk panggilan ke bahagian belakang, dan bukan hanya interaksi proksi dengan klien);
  • Sokongan penuh untuk proksi dwiarah gRPC telah dilaksanakan dengan keupayaan untuk menghuraikan strim gRPC, mengekstrak mesej individu, mencerminkan trafik gRPC dalam log dan menapis mesej menggunakan ACL. gRPC membolehkan anda mengatur kerja perkhidmatan mikro dalam pelbagai bahasa pengaturcaraan yang berinteraksi antara satu sama lain menggunakan API universal. Komunikasi rangkaian dalam gRPC dilaksanakan di atas protokol HTTP/2 dan berdasarkan penggunaan Protocol Buffers untuk penyirian data.
  • Menambah sokongan untuk mod "Lapisan 7 Cuba Semula", yang membolehkan anda menghantar permintaan HTTP berulang sekiranya berlaku kegagalan perisian yang tidak berkaitan dengan masalah mewujudkan sambungan rangkaian (contohnya, jika tiada respons atau respons kosong kepada POST permintaan). Untuk melumpuhkan mod, bendera "disable-l7-retry" telah ditambahkan pada pilihan "http-request", dan pilihan "retry-on" telah muncul dalam bahagian lalai, dengar dan belakang untuk penalaan halus. Bendera cuba semula berikut tersedia: semua ralat boleh cuba semula, tiada, kegagalan sambungan, jawapan kosong, respons sarap, tamat masa respons, 0rtt-ditolak dan mengikat kod status yang dikembalikan (404, dsb.) ;
  • Pengurus Proses baharu telah dilaksanakan yang membolehkan anda mengkonfigurasi panggilan fail boleh laku luaran dengan pengendali untuk HAProxy.
    Sebagai contoh, dalam bentuk pengendali luaran sedemikian, API Pelan Data (/usr/sbin/dataplaneapi) dilaksanakan, serta pelbagai enjin pemprosesan aliran offload;

  • Binding telah ditambahkan untuk .NET Core, Go, Lua dan Python untuk membangunkan sambungan SPOE (Stream Processing Offload Engine) dan SPOP (Stream Processing Offload Protocol). Sebelum ini hanya pembangunan sambungan C disokong;
  • Menambahkan pengendali spoa-cermin luaran (/usr/sbin/spoa-mirror) untuk pencerminan permintaan ke pelayan yang berasingan (contohnya, untuk menyalin sebahagian daripada trafik kerja untuk menguji persekitaran eksperimen pada beban sebenar);
  • Dikemukakan oleh Pengawal Ingress HAProxy Kubernetes untuk menyediakan integrasi dengan platform Kubernetes;
  • Menambah sokongan terbina dalam untuk mengeksport statistik ke sistem pemantauan Prometheus;
  • Memperluaskan Protokol Peers yang digunakan untuk bertukar maklumat dengan nod lain dengan HAProxy. Termasuk sokongan tambahan untuk Denyutan Jantung dan pemindahan data yang disulitkan;
  • Parameter "sampel" telah ditambahkan pada arahan "log", yang membenarkan hanya sebahagian daripada permintaan dibuang ke dalam log, sebagai contoh, 1 daripada 10, untuk membentuk sampel analisis;
  • Menambah mod pemprofilan automatik (arahan profiling.tasks, yang boleh menghidupkan dan mematikan nilai secara automatik). Pemprofilan automatik didayakan jika nilai kelewatan purata melebihi 1000 ms. Untuk melihat data pemprofilan, arahan "tunjukkan pemprofilan" telah ditambahkan pada API Runtime atau mungkin untuk menetapkan semula statistik pada log;
  • Menambah sokongan untuk mengakses pelayan bahagian belakang menggunakan protokol SOCKS4;
  • Terminal tambahan (hujung ke hujung, pada laluan pemprosesan permintaannya, meliputi bahagian belakang) sokongan untuk TCP Fast Open (TFO - TCP Fast Open, RFC 7413), yang membolehkan anda mengurangkan bilangan langkah persediaan sambungan dengan menggabungkan pertama menjadi satu permintaan dan langkah kedua proses rundingan sambungan 3 langkah klasik dan membolehkan data dihantar pada peringkat awal persediaan sambungan;
  • Menambah tindakan baharu:
    • "http-request replace-uri" untuk menggantikan URL menggunakan ungkapan biasa;
    • "tcp-request content do-resolve" dan "http-request do-resolve" untuk resolusi nama hos;
    • "tcp-request content set-dst" dan "tcp-request content set-dst-port" untuk menggantikan alamat IP sasaran dan port.
  • Menambah modul penukaran baharu:
    • aes_gcm_dev untuk menyahsulit strim menggunakan algoritma AES128-GCM, AES192-GCM dan AES256-GCM;
    • protobuf untuk mengekstrak medan daripada mesej Protocol Buffers;
    • ungrpc untuk mengekstrak medan daripada mesej gRPC.

    Sumber: opennet.ru

Tambah komen