Rilis Pingora 0.4, kerangka kerja untuk membuat layanan jaringan

Cloudflare telah menerbitkan rilis kerangka Pingora 0.4, yang dirancang untuk mengembangkan layanan jaringan yang aman dan berkinerja tinggi dalam bahasa Rust. Proksi yang dibuat menggunakan Pingora telah digunakan di jaringan pengiriman konten Cloudflare alih-alih Nginx selama lebih dari dua tahun dan memproses lebih dari 40 juta permintaan per detik. Kode ini ditulis dalam Rust dan diterbitkan di bawah lisensi Apache 2.0.

Fitur utama Pingora:

  • Dukungan untuk HTTP/1 dan HTTP/2 (HTTP/3 dalam paket), serta kemampuan untuk membuat layanan menggunakan protokolnya sendiri atau UDP/TCP.
  • Dukungan untuk pemrosesan permintaan multi-utas dalam mode asinkron.
  • Kemampuan untuk melampirkan penangan panggilan balik dan filter yang memungkinkan Anda mengelola berbagai tahapan pemrosesan permintaan, serta memodifikasi, mengalihkan, memblokir, dan mencatat permintaan dan respons.
  • Memproksi gRPC dan WebSocket.
  • Penyeimbang beban yang dapat dihubungkan.
  • Kemampuan untuk mengubah konfigurasi tanpa memulai ulang.
  • Dukungan untuk memperbarui kode aplikasi tanpa memutus koneksi.
  • Sarana untuk peralihan beban jika terjadi kegagalan (failover).
  • Integrasi dengan berbagai sistem pemantauan dan logging (Syslog, Prometheus, Sentry, OpenTelemetry).
  • Dukungan untuk enkripsi TLS (menggunakan OpenSSL, BoringSSL atau Rustls).
  • Paket Rust siap pakai untuk membuat proxy HTTP, bekerja dengan protokol jaringan, mengurai header HTTP, menghitung dan membatasi lalu lintas, penyeimbangan beban, bekerja dengan tabel hash terdistribusi Ketama, memelihara cache di RAM, dan pemrosesan batas waktu asinkron.

Di antara perubahan dalam versi baru:

  • Dukungan awal untuk perpustakaan kriptografi Rustls menggunakan penyedia kripto berdasarkan aws-lc-rs dan perpustakaan ring berdasarkan BoringSSL.
  • Dukungan eksperimental untuk platform Windows.
  • Mode Dummy TLS, yang dapat digunakan dalam situasi di mana tidak memungkinkan untuk menggunakan implementasi TLS yang sebenarnya.
  • Menambahkan dukungan untuk modul gRPC-web untuk menerjemahkan permintaan klien gRPC-web menjadi permintaan ke server gRPC.
  • Memberikan kemampuan untuk menangani koneksi H2C (HTTP/2 melalui TCP kosong, tanpa enkripsi) dan HTTP/1 pada port jaringan yang sama.
  • Menambahkan kemampuan untuk menghubungkan implementasi fungsi connect() Anda sendiri untuk mengubah perilaku saat membuat koneksi jaringan, misalnya, untuk menyetel opsi tambahan untuk soket atau mensimulasikan kesalahan selama pengujian.
  • Memberikan kemampuan untuk mengabaikan respons informasional saat melakukan proksi, seperti respons dengan header "Harapkan: 100-lanjutkan".
  • Menambahkan dukungan untuk membongkar tanggapan terkompresi gzip.
  • Menerapkan akuntansi status backend untuk tujuan pemantauan.
  • Menambahkan kemampuan untuk mengikat ke berbagai port lokal.

Sumber: opennet.ru

Tambah komentar