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
