Compania Cloudflare a anunțat migrarea rețelei sale de livrare a conținutului la un proxy Pingora, scris în Rust. Noua soluție a înlocuit configurația bazată pe serverul NGINX cu scripturi Lua și procesează peste un trilion de cereri pe zi. Se constată că trecerea la un proxy specializat nu a permis doar implementarea de noi funcționalități și creșterea securității prin gestionarea sigură a memoriei, ci a dus și la o creștere semnificativă a performanței și economisire de resurse — soluția bazată pe Pingora nu necesită utilizarea Lua, consumând astfel cu 70% mai puține resurse CPU și cu 67% mai puțină memorie la procesarea aceleași cantități de trafic.
O lungă perioadă de timp, sistemul de proxy pentru trafic între utilizatori și destinații finale servers bazat pe NGINX și scripturi Lua a satisfăcut nevoile Cloudflare, dar odată cu creșterea rețelei și complexității sale, o soluție universală s-a dovedit a fi insuficientă atât din punct de vedere al performanței, cât și din cauza limitărilor în scalabilitate și implementarea de noi funcționalități pentru clienți. În special, au apărut dificultăți în adăugarea de funcționalități care depășesc simpla funcție de gateway și de echilibrarea a sarcinii. De exemplu, a apărut necesitatea de a redirecționa cererile în cazul unei erori de procesare serverul către un alt server, furnizând un alt set de antete HTTP.
În locul arhitecturii care separa cererile în procese de manipulare distincte (worker), Pingora utilizează un model multi-threaded, care în scenariile de utilizare ale Cloudflare (concentrarea mare a traficului de pe diferite site-uri cu un mare deviere statistică) a arătat o distribuție mai eficientă a resurselor între nucleele CPU. În special, alocarea cererilor nesolicitate către procesele din nginx ducea la o sarcină dezechilibrată asupra nucleelor CPU, rezultând în cereri consumatoare de resurse și intrări-iedare blocate care încetinau procesarea altor cereri. În plus, alocarea unui pool de conexiuni către procesele de manipulare nu permitea reutilizarea conexiunilor deja stabilite de alte procese de manipulare, ceea ce reduce eficiența în condiții de mare număr de procese de manipulare.
NGINX:

Pingora:

Implementarea Pingora a redus de 160 de ori numărul operațiunilor de instalare a noilor conexiuni și a crescut proporția cererilor reutilizate de la 87,1% la 99,92%. Pe lângă reducerea reconexiunilor și utilizarea mai eficientă a nucleelor CPU, îmbunătățirii performanței noului proxy i-a contribuit în principal eliminarea handler-elor lente scrise în Lua utilizate cu nginx.
Limbajul Rust a fost ales pentru a asigura o performanță înaltă combinată cu metode pentru a garanta o utilizare sigură a memoriei. Se menționează că, în ciuda calificării ridicate a inginerilor Cloudflare și a revizuirilor codului scris în limbajul C, nu s-au putut evita erorile care duc la probleme de memorie (de exemplu, vulnerabilitatea din parserul HTML). În ceea ce privește noul cod, sunt prezentate cazuri de erori în Pingora, cauzate nu de probleme ale aplicației, ci de erori în nucleul Linux și de defecțiuni hardware.
De asemenea, merită menționat comentariul lui Linus Torvalds privind includerea suportului pentru limbajul Rust în nucleul Linux, expus la conferința Open-Source Summit Europe care are loc în aceste zile. În nucleul 6.0, patch-urile pentru dezvoltarea driverelor de dispozitive în limbajul Rust nu au fost incluse, dar, conform lui Linus, acestea ar putea fi acceptate în nucleul 6.1; nu are intenția de a întârzia integrarea. Ca motiv pentru adăugarea suportului pentru Rust, pe lângă impactul pozitiv asupra securității, Linus menționează și capacitatea de a crește interesul pentru dezvoltarea nucleului de către participanți noi, ceea ce este relevant în contextul îmbătrânirii vechilor membri.
Sursa: opennet.ro
