Cloudflare lülitus NGINX-ilt oma Rustis kirjutatud Pingora puhverserverile

Cloudflare teatas oma sisu edastamise võrgu üleminekust Rusti keeles kirjutatud Pingora puhverserverile. Uus puhverserver asendab NGINX-i serveripõhise konfiguratsiooni Lua skriptidega ja töötleb rohkem kui triljonit päringut päevas. Märgitakse, et üleminek spetsiaalsele puhverserverile ei võimaldanud mitte ainult uusi funktsioone juurutada ja turvalisuse suurendamist tänu mälu turvalisele kasutamisele, vaid tõi kaasa ka jõudluse ja ressursisäästu olulise tõusu – Pingora-põhine lahendus ei nõua selle kasutamist. Luast ja tarbib seetõttu 70% vähem ressursse CPU ja 67% vähem mälu, töötledes sama palju liiklust.

Pikka aega täitis NGINX ja Lua skriptidel põhinev puhverserveri liiklus kasutajate ja lõppserverite vahel Cloudflare'i vajadusi, kuid võrgu kasvades ja selle keerukuse kasvades osutus universaalne lahendus ebapiisavaks, nii toimivuse ning laiendatavuse ja klientidele uute võimaluste rakendamise piirangute tõttu. Eelkõige oli probleeme funktsionaalsuse lisamisega peale lihtsa lüüsi ja koormuse tasakaalustaja. Näiteks kui server ei suuda päringut töödelda, tekkis vajadus saata päring uuesti teisele serverile, lisades sellele teistsuguse HTTP-päiste komplekti.

Päringud eraldi tööprotsessideks eraldava arhitektuuri asemel kasutab Pingora mitme lõimega mudelit, mis Cloudflare’i kasutusjuhtudel (suure statistilise nihkega eri saitide liikluse kontsentratsioon) näitas efektiivsemat ressursside jaotust protsessori tuumade vahel. Eelkõige põhjustas nginxi tasakaalustamata päringute sidumine protsessidega CPU tuumade tasakaalustamata koormuse, mille tulemuseks olid ressursimahukad päringud ja blokeeritud I/O, mis aeglustab teiste päringute töötlemist. Lisaks ei võimaldanud ühenduskogumi sidumine käitlejaprotsessidega uuesti kasutada juba loodud ühendusi teistest käitlejaprotsessidest, mis vähendab tõhusust, kui töötlejaprotsesse on palju.

NGINX:

Cloudflare lülitus NGINX-ilt oma Rustis kirjutatud Pingora puhverserverile

Pingora:

Cloudflare lülitus NGINX-ilt oma Rustis kirjutatud Pingora puhverserverile

Pingora juurutamine võimaldas vähendada uute ühenduste paigalduste arvu 160 korda ja suurendada taaskasutatud päringute osakaalu 87.1%-lt 99.92%-le. Lisaks taasühendamiste vähendamisele ja protsessori tuumade tõhusamale kasutamisele oli uue puhverserveri jõudluse paranemine peamiselt tingitud nginxiga kasutatud aeglaste Lua töötlejate eemaldamisest.

Rust keel valiti selleks, et saavutada kõrge jõudlus koos tööriistade olemasoluga, et tagada mäluga ohutu töö. Mainitakse, et vaatamata Cloudflare'i kõrgelt kvalifitseeritud inseneridele ja C-keeles kirjutatud koodi ülevaatamisele ei suudetud vältida mäluprobleeme viivaid vigu (näiteks haavatavus HTML-i parseris). Mis puudutab uut koodi, siis see räägib Pingora tõrgete analüüsimise juhtudest, mis osutusid põhjustatud mitte rakenduse probleemidest, vaid Linuxi tuuma ja riistvara tõrgetest.

Lisaks võime märkida Linus Torvaldsi kommentaari, mis kõlas neil päevil toimuval Open-Source Summit Europe konverentsil, seoses Rust keele toe lisamisega Linuxi tuumasse. Rusti keeles seadmedraiverite arendamise plaastreid 6.0 kernelisse ei lisatud, kuid Linuse sõnul võetakse need suure tõenäosusega vastu 6.1 kernelisse, integreerimisega ta viivitada ei kavatse. Rusti toetuse lisamise motivatsioonina toob Linus lisaks positiivsele mõjule turvalisusele välja ka võimaluse suurendada huvi uute osalejate tuumikuga tegelemise vastu, mis on vananevate vanameeste kontekstis oluline.

Allikas: opennet.ru

Lisa kommentaar