Cloudflare har offentliggjort en udgave af Pingora 0.7-rammeværket, der er designet til udvikling af sikre, højtydende netværkstjenester på Rust. Proxyen bygget med Pingora har allerede været i brug i mere end to år i Cloudflares indholdleveringsnetværk som erstatning for nginx og håndterer over 40 millioner anmodninger per sekund. Koden er skrevet i Rust og offentliggjort under Apache 2.0-licensen.
Funktioner i Pingora:
- Understøttelse af HTTP/1 og HTTP/2 (HTTP/3 er på vej), samt muligheden for at skabe tjenester med egne protokoller eller UDP/TCP.
- Understøttelse af flertrådet behandling af anmodninger i asynkront mode.
- Mulighed for tilknytning af callback-håndterere og filtre, der gør det muligt at styre forskellige faser af anmodningsbehandlingen samt at ændre, omdirigere, blokere og logge anmodninger og svar.
- Proxyering af gRPC og WebSocket.
- Plug-in load-balancere.
- Mulighed for at ændre konfigurationen uden genstart.
- Understøttelse af opdatering af applikationskoden uden at afbryde forbindelser.
- Værktøjer til lastskift i tilfælde af fejl (failover).
- Integration med forskellige overvågnings- og logningssystemer (Syslog, Prometheus, Sentry, OpenTelemetry).
- Understøttelse af TLS-kryptering (OpenSSL, BoringSSL eller Rustls anvendes).
- Klare Rust-pakker til opbygning af HTTP-proxy, arbejde med netværksprotokoller, parsing af HTTP-overskrifter, trafikovervågning og -begrænsning, load balancing, arbejde med den distribuerede hashtabel Ketama, vedligeholdelse af cache i hukommelsen og asynkron behandling af tidsafbrud.
Blandt ændringerne i den nye version:
- Strukturen SslDigest har fået et felt "extension", og for typen TlsAccept er der implementeret en håndterer handshake_complete_callback, der gør det muligt at knytte vilkårlige data specifikke for applikationen til TLS-forbindelsen. Der vises et eksempel på, hvordan denne mulighed kan bruges til at skabe server, der læser information fra klientcertifikatet og returnerer det i HTTP-svaret.
- Der er tilføjet en type ConnectionFilter til filtrering af TCP-forbindelser før forhandlingen af TLS-parametre, hvilket sparer ressourcer ved at nulstille forbindelser tidligt.
- Understøttelse af virtuelle transportniveau streams (Virtual L4 Streams) er blevet tilføjet, hvilket gør det muligt at integrere egne implementeringer af netværksprotokoller i pingora-proxy.
- Muligheden for at bruge indstillingerne verify_cert og verify_hostname i konfigurationerne med rustls er blevet implementeret.
- Adgang til strukturen HttpProxy for eksterne crate-pakker er blevet tilladt for at overskride logikken i proxiering af anmodninger.
- Det er nu tilladt at выделение фоновых обработчиков подзапросов fra hovedhåndtereren af sessionen.
- Muligheden for at spore størrelsen af HTTP/1 og HTTP/2 anmodningskroppe samt proxyens driftsmålinger er blevet tilbudt.
- Muligheden for at oprette egne sessioner til indkapsling af HTTP-trafik er blevet tilføjet.
- Der er indført begrænsninger på brugen af versioner af lru-biblioteket (0.16.3 eller nyere) på grund af en sårbarhed i implementeringen af iteratoren IterMut, der kan føre til nedbrud som følge af borrowsystemets (borrow checker) kontrol.
Kilde: opennet.ru
