Cloudflare har annonceret overgangen af sit indholdsleveringsnetværk til brug af Pingora-proxyen, der er skrevet i Rust. Den nye proxy har erstattet NGINX-serverkonfigurationen med Lua-scripts og håndterer over en trillion anmodninger om dagen. Det bemærkes, at overgangen til en specialiseret proxy ikke kun har muliggjort nye funktioner og øget sikkerhed gennem sikker hukommelsesstyring, men også har ført til en betydelig stigning i ydeevne og ressourcebesparelser — løsningen baseret på Pingora kræver ikke brug af Lua, hvilket resulterer i 70% mindre CPU-ressourcer og 67% mindre hukommelse ved behandling af samme trafikmængde.
I lang tid var systemet til proxying af trafik mellem brugere og slutpunkter servere baseret på NGINX og Lua-scripts tilstrækkeligt for Cloudflare, men med netværkets vækst og stigende kompleksitet viste den universelle løsning sig utilstrækkelig, både hvad angår ydeevne og på grund af begrænsninger i skalerbarhed og implementering af nye funktioner til kunder. Især opstod der udfordringer i at tilføje funktionalitet, der gik ud over en simpel gateway og belastningsfordeler. For eksempel opstod behovet for i tilfælde af fejlhåndtering serveren at omdirigere anmodningen til en anden server med et andet sæt af HTTP-header.
I stedet for en arkitektur, der opdeler anmodningerne i separate behandlingsprocesser (worker), anvender Pingora en multithreaded-model, som i Cloudflares brugsscenarier (høj trafikkoncentration fra forskellige websites med stort statistisk skift) har vist sig at fordele ressourcerne mere effektivt mellem CPU-kernene. Især førte bindingen af ubalancerede anmodninger til processerne i nginx til en ubalanceret belastning af CPU-kernene, hvilket gjorde, at ressourcekrævende anmodninger og blokering af I/O forsinkede behandlingen af andre anmodninger. Desuden tillod bindingen af forbindelsespuljen til behandlingsprocesserne ikke genbrug af allerede oprettede forbindelser fra andre behandlingsprocesser, hvilket reducerede effektiviteten ved et stort antal behandlingsprocesser.
NGINX:

Pingora:

Implementeringen af Pingora har reduceret antallet af installationer af nye forbindelser med 160 gange og øget andelen af genanvendte anmodninger fra 87,1% til 99,92%. Ud over reduktionen af gentagne forbindelser og mere effektiv brug af CPU-kerner, er forbedringen af ydeevnen for den nye proxy primært drevet af elimineringen af de langsomme Lua-håndterere, der bruges med nginx.
Rust-sproget er valgt, fordi det muliggør høj ydeevne og har værktøjer til at sikre sikker hukommelsesadgang. Det nævnes, at selv med højt kvalificerede ingeniører fra Cloudflare og kodegennemgang i C-sproget, kunne man ikke undgå fejl, der førte til hukommelsesproblemer (f.eks. sårbarhed i HTML-parseren). Vedrørende den nye kode er der omtalt tilfældige nedbrud i Pingora, som viste sig at være forårsaget af fejl i Linux-kernen og hardwarefejl.
Derudover kan det nævnes, at Linus Torvalds i en kommentar under den igangværende Open-Source Summit Europe konference talte om at inkludere understøttelse af Rust-sprog i Linux-kernen. I kernel 6.0 blev der ikke inkluderet patches til at udvikle enhedsdrivere i Rust, men ifølge Linus vil de sandsynligvis blive accepteret i kernel 6.1, da han ikke har til hensigt at forsinke integrationen. Som motivation for at tilføje Rust-understøttelse nævner Linus ikke kun den positive indvirkning på sikkerheden, men også muligheden for at øge interessen blandt nye bidragydere, hvilket er relevant i lyset af, at de nuværende veteraner bliver ældre.
Kilde: opennet.ru
