Cloudflare schakelde over van NGINX naar zijn eigen Pingora-proxy geschreven in Rust

Cloudflare heeft de transitie aangekondigd van zijn contentleveringsnetwerk om de Pingora-proxy te gebruiken, geschreven in de Rust-taal. De nieuwe proxy vervangt de NGINX-servergebaseerde configuratie door Lua-scripts en verwerkt meer dan een biljoen verzoeken per dag. Opgemerkt wordt dat de overgang naar een gespecialiseerde proxy het niet alleen mogelijk maakte om nieuwe functies te implementeren en de beveiliging te verhogen dankzij de veilige werking van het geheugen, maar ook leidde tot een aanzienlijke toename van de prestaties en besparingen op hulpbronnen - de op Pingora gebaseerde oplossing vereist niet het gebruik van Lua, en verbruikt daarom 70% minder CPU-bronnen en 67% minder geheugen terwijl dezelfde hoeveelheid verkeer wordt verwerkt.

Lange tijd voldeed een systeem voor het proxyen van verkeer tussen gebruikers en eindservers op basis van NGINX- en Lua-scripts aan de behoeften van Cloudflare, maar naarmate het netwerk groeide en de complexiteit ervan toenam, bleek een universele oplossing onvoldoende, zowel op het vlak van prestaties en vanwege beperkingen in de uitbreidbaarheid en implementatie van nieuwe kansen voor klanten. Er waren met name uitdagingen bij het toevoegen van functionaliteit die verder ging dan een eenvoudige gateway en load balancer. Als de server er bijvoorbeeld niet in slaagt een verzoek te verwerken, werd het bijvoorbeeld nodig om het verzoek opnieuw naar een andere server te sturen, waarbij deze werd voorzien van een andere set HTTP-headers.

In plaats van een architectuur die verzoeken in afzonderlijke werkprocessen scheidt, gebruikt Pingora een multi-threaded model, dat in Cloudflare-gebruiksscenario's (hoge concentratie van verkeer van verschillende sites met een grote statistische verschuiving) een efficiëntere verdeling van bronnen tussen CPU-kernen liet zien. Met name het binden door nginx van onevenwichtige verzoeken aan processen resulteerde in een onevenwichtige belasting van de CPU-kernen, resulterend in resource-intensieve verzoeken en het blokkeren van I/O, waardoor de verwerking van andere verzoeken werd vertraagd. Bovendien maakte het binden van de verbindingspool aan afhandelingsprocessen geen hergebruik van reeds tot stand gebrachte verbindingen van andere afhandelingsprocessen mogelijk, wat de efficiëntie vermindert als er een groot aantal afhandelingsprocessen is.

NGINX:

Cloudflare schakelde over van NGINX naar zijn eigen Pingora-proxy geschreven in Rust

Pingora:

Cloudflare schakelde over van NGINX naar zijn eigen Pingora-proxy geschreven in Rust

De implementatie van Pingora maakte het mogelijk om het aantal installaties van nieuwe verbindingen met 160 keer te verminderen en het aandeel hergebruikte queries te vergroten van 87.1% naar 99.92%. Naast het verminderen van herverbindingen en een efficiënter gebruik van CPU-kernen, was de prestatieverbetering van de nieuwe proxy voornamelijk te danken aan het verwijderen van trage Lua-handlers die met nginx werden gebruikt.

Er is gekozen voor de Rust-taal om hoge prestaties te bereiken, gecombineerd met de beschikbaarheid van tools om een ​​veilige werking met geheugen te garanderen. Er wordt vermeld dat ondanks de hooggekwalificeerde technici van Cloudflare en het beoordelen van de code geschreven in de C-taal, het niet mogelijk was om fouten te voorkomen die tot geheugenproblemen leidden (bijvoorbeeld een kwetsbaarheid in de HTML-parser). Wat de nieuwe code betreft, deze gaat over gevallen van analyse van fouten in Pingora, die niet veroorzaakt bleken te worden door problemen in de applicatie, maar door een fout in de Linux-kernel en hardwarefouten.

Daarnaast kunnen we kennis nemen van het commentaar van Linus Torvalds, geuit op de Open-Source Summit Europe conferentie die deze dagen plaatsvindt, met betrekking tot de opname van ondersteuning voor de Rust-taal in de Linux-kernel. Patches voor het ontwikkelen van apparaatstuurprogramma's in de Rust-taal waren niet opgenomen in de 6.0-kernel, maar volgens Linus zullen ze hoogstwaarschijnlijk worden geaccepteerd in de 6.1-kernel; hij gaat de integratie niet vertragen. Als motivatie voor het toevoegen van steun aan Rust noemt Linus, naast de positieve impact op de veiligheid, ook de mogelijkheid om de belangstelling voor het werken aan de kern van nieuwe deelnemers te vergroten, wat belangrijk is in de context van ouder wordende oldtimers.

Bron: opennet.ru

Voeg een reactie