Cloudflare har udgivet udgivelsen af Pingora 0.4 frameworket, designet til at udvikle sikre, højtydende netværkstjenester på Rust-sproget. Proxyen bygget ved hjælp af Pingora er blevet brugt i Cloudflare-indholdsleveringsnetværket i stedet for Nginx i mere end to år og behandler mere end 40 millioner anmodninger i sekundet. Koden er skrevet i Rust og udgivet under Apache 2.0-licensen.
Nøglefunktioner ved Pingora:
- Understøttelse af HTTP/1 og HTTP/2 (HTTP/3 i planer), samt muligheden for at oprette tjenester ved hjælp af deres egne protokoller eller UDP/TCP.
- Understøttelse af multi-threaded behandling af anmodninger i asynkron tilstand.
- Muligheden for at vedhæfte tilbagekaldsbehandlere og filtre, der giver dig mulighed for at administrere forskellige stadier af anmodningsbehandling, samt ændre, omdirigere, blokere og logge anmodninger og svar.
- Proxying af gRPC og WebSocket.
- Tilslutbare belastningsbalancer.
- Mulighed for at ændre konfiguration uden at genstarte.
- Understøttelse af opdatering af applikationskode uden at afbryde forbindelser.
- Midler til lastskift i tilfælde af fejl (failover).
- Integration med forskellige overvågnings- og logningssystemer (Syslog, Prometheus, Sentry, OpenTelemetry).
- Understøttelse af TLS-kryptering (ved hjælp af OpenSSL, BoringSSL eller Rustls).
- Færdiglavede Rust-pakker til oprettelse af HTTP-proxyer, arbejde med netværksprotokoller, parsing af HTTP-headere, regnskab og begrænsning af trafik, belastningsbalancering, arbejde med Ketama distribuerede hash-tabel, vedligeholdelse af en cache i RAM og asynkron behandling af timeouts.
Blandt ændringerne i den nye version:
- Indledende understøttelse af Rustls kryptografibibliotek ved hjælp af kryptoudbydere baseret på aws-lc-rs og ringbiblioteker baseret på BoringSSL.
- Eksperimentel support til Windows-platformen.
- Dummy TLS-tilstand, som kan bruges i situationer, hvor det ikke er muligt at bruge en rigtig TLS-implementering.
- Tilføjet understøttelse af gRPC-web-modulet til at oversætte gRPC-web-klientanmodninger til anmodninger til server gRPC.
- Giver mulighed for at håndtere H2C (HTTP/2 over bare TCP, ingen kryptering) og HTTP/1-forbindelser på den samme netværksport.
- Tilføjet muligheden for at forbinde dine egne implementeringer af connect()-funktionen for at ændre adfærden, når du etablerer en netværksforbindelse, for eksempel for at indstille yderligere muligheder for soklen eller simulere fejl under test.
- Giver muligheden for at ignorere informative svar ved proxy, såsom svar med "Forvent: 100-fortsæt"-headeren.
- Tilføjet support til udpakning af gzip-komprimerede svar.
- Implementeret regnskab af backend-tilstanden til overvågningsformål.
- Tilføjet muligheden for at binde til en række lokale porte.
Kilde: opennet.ru
