Cloudflare har publicerat version 0.4 av Pingora-ramverket, utformat för att utveckla sÀkra, högpresterande nÀtverksservicer pÄ Rust. Proxy byggd med Pingora har anvÀnts i Cloudflares innehÄllsleveransnÀtverk i över tvÄ Är istÀllet för nginx och hanterar mer Àn 40 miljoner förfrÄgningar per sekund. Koden Àr skriven i 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:
- Inledande stöd för kryptografisk bibliotek Rustls, som anvÀnder kryptoleverantörer baserade pÄ biblioteken aws-lc-rs och ring, som bygger pÄ BoringSSL.
- Experimentellt stöd för Windows-plattformen.
- Dummy TLS-lÀget, som kan anvÀndas i situationer dÀr det inte Àr möjligt att anvÀnda en verklig TLS-implementation.
- Stöd för gRPC-web-modulen har lagts till för att översÀtta gRPC-web-klientförfrÄgningar till förfrÄgningar till servern gRPC.
- Möjlighet att hantera H2C-anslutningar (HTTP/2 över ren TCP, utan kryptering) och HTTP/1 pÄ samma nÀtverksport.
- Möjlighet att ansluta egna implementationer av funktionen connect() för att Àndra beteendet vid upprÀttande av nÀtverksanslutningar, till exempel för att stÀlla in ytterligare alternativ för socket eller simulera fel vid testning.
- Möjlighet att ignorera informationssvar vid proxyhantering, sÄsom svar med rubriken 'Expect: 100-continue'.
- Stöd för att packa upp svar som komprimerats med gzip har lagts till.
- Implementering av övervakning av backendens tillstÄnd.
- Möjlighet att binda till ett intervall av lokala portar.
KĂ€lla: opennet.ru
