Företaget Cloudflare har slÀppt version 0.7 av ramverket Pingora, som Àr avsett för utveckling av skyddade, högpresterande nÀtverkstjÀnster pÄ Rust. Proxy byggd med Pingora har redan anvÀnts i Cloudflares innehÄllsleveransnÀtverk i mer Àn tvÄ Är istÀllet för nginx och hanterar mer Àn 40 miljoner förfrÄgningar per sekund. Koden Àr skriven pÄ Rust och publicerad under Apache 2.0-licensen.
Huvudfunktioner i Pingora:
- Stöd för HTTP/1 och HTTP/2 (HTTP/3 Àr planerat) samt möjlighet att skapa tjÀnster som anvÀnder egna protokoll eller UDP/TCP.
- Stöd för flerdelad behandling av förfrÄgningar i asynkront lÀge.
- Möjlighet att fÀsta callback-handledare och filter som möjliggör styrning av olika steg i förfrÄgningshanteringen, samt att Àndra, omdirigera, blockera och logga förfrÄgningar och svar.
- Proxy för gRPC och WebSocket.
- Anpassningsbara lastbalanserare.
- Möjlighet att Àndra konfigurationen utan omstart.
- Stöd för att uppdatera applikationskoden utan att bryta anslutningar.
- Verktyg för lastvÀxling vid fel (failover).
- Integration med olika övervaknings- och logghanteringssystem (Syslog, Prometheus, Sentry, OpenTelemetry).
- Stöd för TLS-kryptering (anvÀnder OpenSSL, BoringSSL eller Rustls).
- FÀrdiga Rust-paket för att skapa HTTP-proxy, arbeta med nÀtverksprotokoll, analysera HTTP-rubriker, övervaka och begrÀnsa trafik, balansera last, arbeta med den distribuerade hash-tabellen Ketama, upprÀtthÄlla cache i minnet samt asynkron hantering av tidsgrÀnser.
Bland förÀndringarna i den nya versionen:
- I strukturen SslDigest har ett fÀlt 'extension' lagts till och för typen TlsAccept har en handler för handshake_complete_callback implementerats, vilket möjliggör att fÀsta applikationsspecifik data till TLS-anslutningen. Som exempel visas hur denna funktion kan anvÀndas för att skapa servern, som lÀser information frÄn klientcertifikatet och returnerar det i HTTP-svaret.
- En typ ConnectionFilter har lagts till för filtrering av TCP-anslutningar vid steg före TLS-parametrar, vilket sparar resurser genom att avbryta anslutningar i ett tidigt skede.
- Stöd för virtuella transportnivÄflöden (Virtual L4 Streams) har lagts till, vilket möjliggör integration av egna implementationer av nÀtverksprotokoll i pingora-proxy.
- Möjlighet att anvÀnda alternativen verify_cert och verify_hostname i konfigurationer med rustls har implementerats.
- För externa crate-paket har Ätkomst till HttpProxy-strukturen beviljats för att överskrida logiken för att proxya förfrÄgningar.
- Det har blivit tillÄtet att separera bakgrundshanterare av delförfrÄgningar frÄn huvudsessionens hanterare.
- Möjlighet att spÄra storleken pÄ HTTP1 och HTTP2 förfrÄgningskroppar samt proxyverksamhetsmetrik har tillhandahÄllits.
- Möjlighet att skapa egna sessioner för inkapslad HTTP-trafik har lagts till.
- Det har införts begrÀnsningar för att anvÀnda versioner av biblioteket lru (0.16.3 eller nyare) pÄ grund av en sÄrbarhet i implementationen av iteratorn IterMut, vilket kan leda till krasch pÄ grund av att lÄnecheckern aktiveras.
KĂ€lla: opennet.ru
