Udgivelse af Pingora 0.4, en ramme til oprettelse af netværkstjenester

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

Tilføj en kommentar