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

Cloudflare kunngjorde overgangen til innholdsleveringsnettverket for å bruke Pingora-proxyen, skrevet på Rust-språket. Den nye proxyen erstatter den NGINX-serverbaserte konfigurasjonen med Lua-skript, og behandler mer enn en billion forespørsler per dag. Det bemerkes at overgangen til en spesialisert proxy ikke bare tillot å implementere nye funksjoner og øke sikkerheten på grunn av sikker drift av minnet, men også førte til en betydelig økning i ytelse og ressursbesparelser - den Pingora-baserte løsningen krever ikke bruk av Lua, og bruker derfor 70 % mindre ressurser CPU og 67 % mindre minne mens den behandler samme mengde trafikk.

Et system for proxying av trafikk mellom brukere og sluttservere basert på NGINX- og Lua-skript tilfredsstilte lenge behovene til Cloudflare, men etter hvert som nettverket vokste og kompleksiteten økte, viste en universalløsning seg å være utilstrekkelig, både mht. ytelse og på grunn av begrensninger i utvidbarhet og implementering av nye muligheter for klienter. Spesielt var det utfordringer med å legge til funksjonalitet utover en enkel gateway og lastbalanser. For eksempel ble det nødvendig, hvis serveren ikke klarer å behandle en forespørsel, å sende forespørselen på nytt til en annen server, og gi den et annet sett med HTTP-hoder.

I stedet for en arkitektur som skiller forespørsler inn i separate arbeidsprosesser, bruker Pingora en flertrådsmodell, som i Cloudflare-brukstilfeller (høy konsentrasjon av trafikk fra forskjellige nettsteder med et stort statistisk skifte) viste en mer effektiv fordeling av ressurser mellom CPU-kjerner. Spesielt resulterte nginx sin binding av ubalanserte forespørsler til prosesser i ubalansert belastning på CPU-kjernene, noe som resulterte i ressurskrevende forespørsler og blokkering av I/O som bremset behandlingen av andre forespørsler. I tillegg tillot ikke binding av tilkoblingspoolen til behandlerprosesser gjenbruk av allerede etablerte tilkoblinger fra andre behandlerprosesser, noe som reduserer effektiviteten når det er et stort antall behandlerprosesser.

NGINX:

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

Pingora:

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

Implementeringen av Pingora gjorde det mulig å redusere antall installasjoner av nye forbindelser med 160 ganger og øke andelen gjenbrukte forespørsler fra 87.1 % til 99.92 %. I tillegg til å redusere gjentilkoblinger og mer effektiv bruk av CPU-kjerner, skyldtes den nye proxyens ytelsesforbedring hovedsakelig fjerningen av trege Lua-behandlere brukt med nginx.

Rust-språket ble valgt for å oppnå høy ytelse kombinert med tilgjengeligheten av verktøy for å sikre sikker drift med minne. Det nevnes at til tross for de høyt kvalifiserte ingeniørene til Cloudflare og gjennomgang av koden skrevet på C-språket, var det ikke mulig å unngå feil som førte til minneproblemer (for eksempel en sårbarhet i HTML-parseren). Når det gjelder den nye koden, snakker den om tilfeller av analysefeil i Pingora, som viste seg å være forårsaket ikke av problemer i applikasjonen, men av en feil i Linux-kjernen og maskinvarefeil.

I tillegg kan vi merke oss kommentaren til Linus Torvalds, gitt uttrykk for på Open-Source Summit Europe-konferansen som finner sted i disse dager, angående inkludering av støtte for Rust-språket i Linux-kjernen. Patcher for utvikling av enhetsdrivere på Rust-språket var ikke inkludert i 6.0-kjernen, men ifølge Linus vil de mest sannsynlig bli akseptert i 6.1-kjernen; han kommer ikke til å utsette integreringen. Som en motivasjon for å legge til støtte for Rust, i tillegg til den positive innvirkningen på sikkerheten, nevner Linus også muligheten til å øke interessen for å jobbe med kjernen av nye deltakere, noe som er viktig i sammenheng med aldrende oldtimers.

Kilde: opennet.ru

Legg til en kommentar