Cloudflare har udgivet rammeværket Pingora 0.4, der er designet til at udvikle sikre, højtydende netværkstjenester på Rust-sprog. Proxyen, der er bygget ved hjælp af Pingora, har været i brug i Cloudflares indholdsleveringsnetværk i mere end to år i stedet for nginx og håndterer over 40 millioner forespørgsler i sekundet. Koden er skrevet på 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:
- Indledende støtte til kryptografibiblioteket Rustls, der bruger kryptoleverandører baseret på bibliotekerne aws-lc-rs og ring, som er baseret på BoringSSL.
- Eksperimentel støtte til Windows-platformen.
- Dummy TLS-tilstand, som kan anvendes i situationer, hvor det ikke er muligt at bruge en reel TLS-implementering.
- Der er tilføjet støtte til gRPC-web-modulet til oversættelse af gRPC-web-klientforespørgsler til forespørgsler til server gRPC.
- Muligheden for at håndtere H2C-forbindelser (HTTP/2 over rå TCP, uden kryptering) og HTTP/1 på en enkelt netværksport er blevet introduceret.
- Muligheden for at tilslutte brugerdefinerede implementeringer af funktionen connect() for at ændre adfærden ved oprettelse af netværksforbindelser, f.eks. for at indstille yderligere muligheder for socketen eller simulere fejl ved test.
- Muligheden for at ignorere informationssvar under proxying, såsom svar med headeren «Expect: 100-continue», er blevet introduceret.
- Implementeret støtte til udpakning af svar, der er komprimeret med gzip.
- Der er implementeret registrering af backendens tilstand til overvågning.
- Mulighed for binding til et interval af lokale porte er blevet tilføjet.
Kilde: opennet.ru
