Compania Cloudflare a publicat lansarea cadrului Pingora 0.6, destinat dezvoltării de servicii de rețea securizate și performante, scrise în limbajul Rust. Proxy-ul construit cu ajutorul Pingora este utilizat de mai bine de doi ani în rețeaua de livrare a conținutului Cloudflare, în locul nginx, și gestionează peste 40 de milioane de solicitări 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 timpul încheierii activității, a fost asigurat păstrarea în jurnal a denumirilor componentelor runtime pentru a simplifica diagnosticul problemelor cauzate de absența componentelor runtime, care duc la întârzieri în timpul închiderii.
- A fost inclusă urmărea fazelor de execuție server, informațiile despre care pot fi utile pentru monitorizare sau asigurarea redundanței. La schimbarea fazei de execuție se generează un mesaj ExecutionPhase, care poate fi interceptat prin API Server::watch_execution_phase.
- A fost permisă alocarea în memorie a dicționarelor comprimate.
- În implementarea serverului http și a proxy-ului http, au fost adăugate directivele HttpServerOptions și H2Options.
- A fost implementată protecția împotriva atacului MadeYouReset, care permite provocarea unei indisponibilități prin manipularea cadrelor de control HTTP/2.
Sursa: opennet.ro
