Compania Cloudflare a lansat versiunea 0.4 a framework-ului Pingora, destinat dezvoltării de servicii de rețea securizate și de înaltă performanță în limbajul Rust. Proxy-ul construit cu Pingora este folosit de mai bine de doi ani în rețeaua de livrare a conținutului Cloudflare, înlocuind nginx și procesând 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:
- Suport inițial pentru biblioteca criptografică Rustls, care utilizează furnizori de criptografie bazați pe bibliotecile aws-lc-rs și ring, bazate pe BoringSSL.
- Suport experimental pentru platforma Windows.
- Modul TLS fictiv (dummy TLS), care poate fi aplicat în situații în care nu este posibil să se utilizeze o implementare reală a TLS.
- A fost adăugat suport pentru modulul gRPC-web pentru a traduce cererile clienților gRPC-web în cereri la server gRPC.
- A fost posibilă procesarea conexiunilor H2C (HTTP/2 peste TCP simplu, fără criptare) și HTTP/1 pe același port de rețea.
- A fost adăugată posibilitatea de a conecta implementări proprii ale funcției connect() pentru a modifica comportamentul la stabilirea unei conexiuni de rețea, de exemplu, pentru a seta opțiuni suplimentare pentru socket sau pentru a simula erori în timpul testării.
- A fost permisă ignorarea răspunsurilor informative în timpul proxy-ului, cum ar fi răspunsurile cu antetul „Expect: 100-continue”.
- A fost adăugat suport pentru decompresia răspunsurilor comprimate cu metoda gzip.
- A fost implementată monitorizarea stării backend-ului în scopuri de supraveghere.
- A fost adăugată posibilitatea de a lega la o gamă de porturi locale.
Sursa: opennet.ro
