Cloudflare bertukar daripada NGINX kepada proksi Pingora sendiri yang ditulis dalam Rust

Cloudflare mengumumkan peralihan rangkaian penghantaran kandungannya untuk menggunakan proksi Pingora, yang ditulis dalam bahasa Rust. Proksi baharu menggantikan konfigurasi berasaskan pelayan NGINX dengan skrip Lua dan memproses lebih daripada satu trilion permintaan setiap hari. Adalah diperhatikan bahawa peralihan kepada proksi khusus membenarkan bukan sahaja untuk melaksanakan ciri-ciri baharu dan meningkatkan keselamatan kerana pengendalian memori yang selamat, tetapi juga membawa kepada peningkatan ketara dalam prestasi dan penjimatan sumber - penyelesaian berasaskan Pingora tidak memerlukan penggunaan daripada Lua, dan oleh itu menggunakan 70% kurang sumber CPU dan 67% kurang memori semasa memproses jumlah trafik yang sama.

Untuk masa yang lama, sistem untuk memproksi trafik antara pengguna dan pelayan akhir berdasarkan skrip NGINX dan Lua memenuhi keperluan Cloudflare, tetapi apabila rangkaian berkembang dan kerumitannya meningkat, penyelesaian universal ternyata tidak mencukupi, kedua-duanya dari segi prestasi dan disebabkan oleh batasan dalam pemanjangan dan pelaksanaan peluang baharu untuk pelanggan. Khususnya, terdapat cabaran dalam menambah kefungsian di luar gerbang mudah dan pengimbang beban. Sebagai contoh, ia menjadi perlu, jika pelayan gagal memproses permintaan, untuk menghantar semula permintaan ke pelayan lain, memberikannya set pengepala HTTP yang berbeza.

Daripada seni bina yang memisahkan permintaan ke dalam proses pekerja yang berasingan, Pingora menggunakan model berbilang benang, yang dalam kes penggunaan Cloudflare (kepekatan tinggi trafik dari tapak berbeza dengan anjakan statistik yang besar) menunjukkan pengagihan sumber yang lebih cekap antara teras CPU. Khususnya, proses pengikatan permintaan tidak seimbang nginx mengakibatkan beban tidak seimbang pada teras CPU, mengakibatkan permintaan intensif sumber dan menyekat I/O memperlahankan pemprosesan permintaan lain. Di samping itu, mengikat kumpulan sambungan kepada proses pengendali tidak membenarkan penggunaan semula sambungan yang telah ditetapkan daripada proses pengendali lain, yang mengurangkan kecekapan apabila terdapat sejumlah besar proses pengendali.

nginx:

Cloudflare bertukar daripada NGINX kepada proksi Pingora sendiri yang ditulis dalam Rust

Pingora:

Cloudflare bertukar daripada NGINX kepada proksi Pingora sendiri yang ditulis dalam Rust

Pelaksanaan Pingora memungkinkan untuk mengurangkan bilangan pemasangan sambungan baharu sebanyak 160 kali dan meningkatkan bahagian permintaan yang digunakan semula daripada 87.1% kepada 99.92%. Di samping mengurangkan penyambungan semula dan penggunaan teras CPU yang lebih cekap, peningkatan prestasi proksi baharu ini disebabkan terutamanya oleh penyingkiran pengendali Lua perlahan yang digunakan dengan nginx.

Bahasa Rust dipilih untuk mencapai prestasi tinggi digabungkan dengan ketersediaan alatan untuk memastikan operasi selamat dengan memori. Disebutkan bahawa walaupun jurutera Cloudflare yang berkelayakan tinggi dan menyemak kod yang ditulis dalam bahasa C, adalah tidak mungkin untuk mengelakkan ralat yang membawa kepada masalah ingatan (contohnya, kelemahan dalam penghurai HTML). Bagi kod baru, ia bercakap tentang kes menganalisis kegagalan dalam Pingora, yang ternyata bukan disebabkan oleh masalah dalam aplikasi, tetapi oleh ralat dalam kernel Linux dan kegagalan perkakasan.

Selain itu, kita boleh perhatikan ulasan Linus Torvalds, yang disuarakan pada persidangan Open-Source Summit Europe yang berlangsung hari ini, mengenai kemasukan sokongan untuk bahasa Rust dalam kernel Linux. Patch untuk membangunkan pemacu peranti dalam bahasa Rust tidak disertakan dalam kernel 6.0, tetapi menurut Linus, mereka kemungkinan besar akan diterima ke dalam kernel 6.1; dia tidak akan menangguhkan penyepaduan. Sebagai motivasi untuk menambah sokongan untuk Rust, sebagai tambahan kepada impak positif terhadap keselamatan, Linus juga memetik peluang untuk meningkatkan minat dalam mengusahakan teras peserta baharu, yang penting dalam konteks orang tua yang semakin tua.

Sumber: opennet.ru

Tambah komen