Compania Cloudflare a lansat cea de-a doua versiune a framework-ului Pingora, destinat dezvoltării de servicii de rețea securizate și performante în limbajul Rust. Proxy-ul construit cu Pingora este utilizat de aproximativ un an în rețeaua de livrare a conținutului Cloudflare, înlocuind 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 (planificat HTTP/3), precum și posibilități de a crea servicii care utilizează propriile protocoale sau UDP/TCP.
- Capacitatea de a procesa cereri în mod multithreaded, în mod asincron.
- Suport pentru atașarea de callback-uri și filtre, care permit gestionarea diferitelor etape ale procesării cererii, precum și modificarea, redirecționarea, blocarea și înregistrarea 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 sau BoringSSL).
- 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:
- A fost adăugat suport pentru instalarea filtrelor pentru header-ele suplimentare HTTP/2.
- A fost adăugată capacitatea de a modifica dimensiunea buffer-ului pentru pachetele de intrare TCP.
- A fost adăugată funcția body_bytes_read().
- A fost adăugat filtrul cache_not_modified_filter.
- A fost adăugată capacitatea de a ține un jurnal al cheilor TLS.
- A fost adăugată funcția callback purge_response.
Sursa: opennet.ro
