Cloudflare beralih dari NGINX ke proxy Pingora-nya sendiri, yang ditulis dalam Rust

Cloudflare mengumumkan transisi jaringan pengiriman kontennya untuk menggunakan proxy Pingora, yang ditulis dalam bahasa Rust. Proksi baru ini menggantikan konfigurasi berbasis server NGINX dengan skrip Lua, dan memproses lebih dari satu triliun permintaan per hari. Perlu dicatat bahwa transisi ke proxy khusus memungkinkan tidak hanya untuk mengimplementasikan fitur-fitur baru dan meningkatkan keamanan karena pengoperasian memori yang aman, namun juga menyebabkan peningkatan yang signifikan dalam kinerja dan penghematan sumber daya - solusi berbasis Pingora tidak memerlukan penggunaan Lua, dan karena itu mengkonsumsi sumber daya CPU 70% lebih sedikit dan memori 67% lebih sedikit ketika memproses jumlah lalu lintas yang sama.

Untuk waktu yang lama, sistem untuk mem-proxy lalu lintas antara pengguna dan server akhir berdasarkan skrip NGINX dan Lua memenuhi kebutuhan Cloudflare, tetapi seiring dengan pertumbuhan jaringan dan kompleksitasnya, solusi universal ternyata tidak cukup, baik dari segi kinerja dan karena keterbatasan dalam perluasan dan penerapan peluang baru bagi klien. Secara khusus, terdapat tantangan dalam menambahkan fungsionalitas di luar gateway sederhana dan penyeimbang beban. Misalnya, jika server gagal memproses permintaan, maka perlu mengirim ulang permintaan tersebut ke server lain, menyediakan kumpulan header HTTP yang berbeda.

Alih-alih arsitektur yang memisahkan permintaan ke dalam proses pekerja yang terpisah, Pingora menggunakan model multi-utas, yang dalam kasus penggunaan Cloudflare (konsentrasi lalu lintas yang tinggi dari situs berbeda dengan perubahan statistik yang besar) menunjukkan distribusi sumber daya yang lebih efisien antar inti CPU. Secara khusus, pengikatan permintaan yang tidak seimbang oleh nginx ke proses mengakibatkan beban yang tidak seimbang pada inti CPU, mengakibatkan permintaan yang intensif sumber daya dan pemblokiran I/O sehingga memperlambat pemrosesan permintaan lainnya. Selain itu, mengikat kumpulan koneksi ke proses penangan tidak memungkinkan penggunaan kembali koneksi yang sudah ada dari proses penangan lainnya, sehingga mengurangi efisiensi ketika ada banyak proses penangan.

NGINX:

Cloudflare beralih dari NGINX ke proxy Pingora-nya sendiri, yang ditulis dalam Rust

Pingora:

Cloudflare beralih dari NGINX ke proxy Pingora-nya sendiri, yang ditulis dalam Rust

Penerapan Pingora memungkinkan pengurangan jumlah pemasangan koneksi baru sebanyak 160 kali lipat dan meningkatkan pangsa kueri yang digunakan kembali dari 87.1% menjadi 99.92%. Selain mengurangi koneksi ulang dan penggunaan inti CPU yang lebih efisien, peningkatan kinerja proxy baru ini terutama disebabkan oleh penghapusan penangan Lua lambat yang digunakan dengan nginx.

Bahasa Rust dipilih untuk mencapai kinerja tinggi yang dikombinasikan dengan ketersediaan alat untuk memastikan pengoperasian memori yang aman. Disebutkan bahwa meskipun para insinyur Cloudflare berkualifikasi tinggi dan meninjau kode yang ditulis dalam bahasa C, kesalahan tidak dapat dihindari yang menyebabkan masalah memori (misalnya, kerentanan dalam parser HTML). Sedangkan untuk kode barunya membahas tentang kasus kegagalan analisa di Pingora yang ternyata bukan disebabkan oleh masalah pada aplikasinya, melainkan oleh kesalahan pada kernel Linux dan kegagalan hardware.

Selain itu, kita dapat mencatat komentar Linus Torvalds, yang disuarakan pada konferensi Open-Source Summit Europe yang berlangsung hari ini, mengenai penyertaan dukungan untuk bahasa Rust di kernel Linux. Patch untuk mengembangkan driver perangkat dalam bahasa Rust tidak disertakan dalam kernel 6.0, tetapi menurut Linus, kemungkinan besar patch tersebut akan diterima di kernel 6.1; dia tidak akan menunda integrasi. Sebagai motivasi untuk menambahkan dukungan untuk Rust, selain dampak positif pada keamanan, Linus juga mengutip peluang untuk meningkatkan minat mengerjakan inti peserta baru, yang penting dalam konteks penuaan peserta lama.

Sumber: opennet.ru

Tambah komentar