Cloudflare skiftede fra NGINX til sin egen Pingora-proxy skrevet i Rust

Cloudflare har annonceret, at det migrerer sit indholdsleveringsnetværk for at bruge Pingora-proxyen, skrevet i Rust. Den nye proxy har erstattet den NGINX-serverbaserede konfiguration med Lua-scripts og håndterer over en billion anmodninger om dagen. Det bemærkes, at overgangen til en specialiseret proxy ikke kun gjorde det muligt at implementere nye funktioner og øge sikkerheden på grund af sikkert arbejde med hukommelse, men også førte til en betydelig stigning i ydeevne og ressourcebesparelser - en løsning baseret på Pingora kræver ikke brug af Lua, derfor bruger den 70 % færre ressourcer CPU og 67 % mindre hukommelse, mens den håndterer den samme mængde trafik.

I lang tid opfyldte et system til proxying af trafik mellem brugere og slutservere baseret på NGINX- og Lua-scripts Cloudflares behov, men efterhånden som netværket voksede og dets kompleksitet steg, var en universel løsning ikke nok, både med hensyn til ydeevne, og på grund af begrænsninger i udvidelsesmuligheder og implementering af nye muligheder for kunder. Især var der vanskeligheder med at tilføje funktionalitet ud over en simpel gateway og load balancer. For eksempel, i tilfælde af at serveren ikke kunne behandle en anmodning, blev det nødvendigt at omdirigere anmodningen til en anden server og forsyne den med et andet sæt HTTP-headere.

I stedet for en arkitektur med opdeling af anmodninger i separate arbejdsprocesser (arbejdere), bruger Pingora en multi-threaded model, som i Cloudflare brugsscenarier (høj koncentration af trafik fra forskellige websteder med et stort statistisk skift) viste en mere effektiv fordeling af ressourcer mellem CPU-kerner. Især førte binding af ubalancerede anmodninger til processer i nginx til en ubalanceret belastning af CPU-kernerne, som et resultat af hvilket ressourcekrævende anmodninger og blokering af I/O bremsede behandlingen af ​​andre anmodninger. Derudover tillod binding af forbindelsespuljen til behandlerprocesser ikke genbrug af allerede etablerede forbindelser fra andre behandlerprocesser, hvilket reducerer effektiviteten, når der er et stort antal behandlerprocesser.

nginx:

Cloudflare skiftede fra NGINX til sin egen Pingora-proxy skrevet i Rust

Pingora:

Cloudflare skiftede fra NGINX til sin egen Pingora-proxy skrevet i Rust

Introduktionen af ​​Pingora gjorde det muligt at reducere antallet af nye forbindelsesetableringer med 160 gange og øge andelen af ​​genbrugte anmodninger fra 87.1 % til 99.92 %. Ud over at reducere genforbindelser og mere effektiv brug af CPU-kerner, skyldes ydeevnen af ​​den nye proxy hovedsageligt at slippe af med de langsomme Lua-handlere, der bruges med nginx.

Rust-sproget blev valgt for at give mulighed for høj ydeevne kombineret med tilgængeligheden af ​​hukommelsessikre værktøjer. Det nævnes, at på trods af den høje kvalifikation af Cloudflare-ingeniører og kodegennemgange skrevet på C-sproget, var det ikke muligt at undgå fejl, der førte til hukommelsesproblemer (for eksempel en sårbarhed i HTML-parseren). Hvad angår den nye kode, talte vi om tilfælde af analyse af nedbrud i Pingora, som viste sig ikke at være forårsaget af problemer i applikationen, men af ​​en fejl i Linux-kernen og hardwarefejl.

Derudover kan det bemærkes, at Linus Torvalds kommenterede inkluderingen af ​​støtte til Rust-sproget i Linux-kernen, som blev givet udtryk for på Open-Source Summit Europe-konferencen, der finder sted i disse dage. 6.0-kernen inkluderede ikke patches til udvikling af enhedsdrivere i Rust-sproget, men ifølge Linus vil de sandsynligvis blive accepteret i 6.1-kernen, han vil ikke trække med integration. Som et motiv for at tilføje støtte til Rust, udover en positiv indvirkning på sikkerheden, kalder Linus også muligheden for at øge interessen for at arbejde på kernen af ​​nye deltagere, hvilket er vigtigt i forbindelse med aldrende oldtimers.

Kilde: opennet.ru

Tilføj en kommentar