Compania Cloudflare a publicat versiunea 0.7 a framework-ului Pingora, destinat dezvoltării de servicii de rețea protejate și de înaltă performanță în limbajul Rust. Proxie construită cu Pingora este utilizată de mai bine de doi ani în rețeaua de livrare de conținut Cloudflare, în locul nginx, și procesează peste 40 de milioane de cereri pe secundă. Codul este scris în limbajul Rust și publicat sub licența Apache 2.0.
Funcționalitățile principale ale Pingora:
- Suport pentru HTTP/1 și HTTP/2 (în planuri pentru HTTP/3), precum și posibilitatea de a crea servicii care folosesc protocoale proprii sau UDP/TCP.
- Suport pentru procesarea multiplă a cererilor în mod asincron.
- Posibilitatea de a atașa callback-uri și filtre care permit gestionarea diferitelor etape ale procesării cererii, precum și modificarea, redirecționarea, blocarea și jurnalizarea cererilor și răspunsurilor.
- Proxificare gRPC și WebSocket.
- Balansatoare de încărcare plugin.
- Capacitatea de a modifica configurația fără a reporni.
- Suport pentru actualizarea codului aplicației fără a întrerupe conexiunile.
- Mijloace de comutare a încărcării în caz de defecțiune (failover).
- Integrare cu diferite sisteme de monitorizare și jurnalizare (Syslog, Prometheus, Sentry, OpenTelemetry).
- Suport pentru criptarea TLS (se utilizează OpenSSL, BoringSSL sau Rustls).
- Pachete Rust gata făcute pentru crearea de http-proxy, lucrul cu protocoalele de rețea, parsarea header-elor HTTP, contabilizarea și limitarea traficului, balansarea încărcării, lucrul cu hash-tabele distribuite Ketama, menținerea cache-ului în memorie și procesarea asincronă a timeout-urilor.
Printre modificările din noua versiune:
- În structura SslDigest a fost adăugat câmpul «extension», iar pentru tipul TlsAccept a fost implementat handler-ul handshake_complete_callback, care permite atașarea de date arbitrare specifice aplicației la conexiunea TLS. Ca exemplu, este arătat cum se folosește această posibilitate pentru a crea server, un serviciu care citește informațiile din certificatul clientului și le returnează în răspunsul HTTP.
- A fost adăugat tipul ConnectionFilter pentru filtrarea conexiunilor TCP în etapa anterioară negocierii parametrilor TLS, ceea ce permite economisirea resurselor prin resetarea conexiunilor într-o etapă timpurie.
- A fost adăugat suport pentru fluxuri virtuale de nivel de transport (Virtual L4 Streams), permițând integrarea propriilor implementări ale protocoalelor de rețea în pingora-proxy.
- A fost implementată posibilitatea de a folosi opțiunile verify_cert și verify_hostname în configurațiile cu rustls.
- Pentru pachetele externe crate, a fost permis accesul la structura HttpProxy pentru a suprascrie logica de proxying a cererilor.
- A fost permisă extragerea procesatorilor de fundal pentru subcereri din handler-ul principal al sesiunii.
- A fost oferită posibilitatea de a urmări dimensiunea corpului cererilor HTTP1 și HTTP2, precum și metricile de funcționare ale proxy-ului.
- A fost adăugată posibilitatea de a crea sesiuni proprii pentru traficul HTTP încapsulat.
- Au fost impuse restricții privind utilizarea versiunilor bibliotecii lru (0.16.3 sau mai recent) din cauza unei vulnerabilități în implementarea iteratoarelor IterMut care poate provoca o terminare neașteptată din cauza activării verificării împrumutului variabilelor (borrow checker).
Sursa: opennet.ro
