L'azienda Cloudflare ha pubblicato la seconda versione del framework Pingora, progettato per lo sviluppo di servizi di rete ad alte prestazioni e sicuri in linguaggio Rust. Costruito con Pingora, un proxy viene utilizzato da circa un anno nella rete di distribuzione dei contenuti di Cloudflare al posto di nginx e gestisce oltre 40 milioni di richieste al secondo. Il codice è scritto in linguaggio Rust ed è pubblicato con licenza Apache 2.0.
Caratteristiche principali di Pingora:
- Supporto per HTTP/1 e HTTP/2 (in fase di pianificazione HTTP/3), così come funzionalità per la creazione di servizi che utilizzano i propri protocolli o UDP/TCP.
- Possibilità di elaborazione multithread delle richieste in modalità asincrona.
- Supporto per l'attacco di callback e filtri, che consentono di gestire le diverse fasi dell'elaborazione della richiesta, oltre a modificare, reindirizzare, bloccare e registrare richieste e risposte.
- Proxy per gRPC e WebSocket.
- Bilanciatori di carico plug-in.
- Possibilità di modifica della configurazione senza riavvio.
- Supporto per l'aggiornamento del codice dell'app senza interruzione delle connessioni.
- Strumenti per il failover in caso di guasti.
- Integrazione con vari sistemi di monitoraggio e logging (Syslog, Prometheus, Sentry, OpenTelemetry).
- Supporto per la crittografia TLS (utilizza OpenSSL o BoringSSL).
- Pacchetti Rust pronti per la creazione di proxy HTTP, lavorare con protocolli di rete, analizzare gli header HTTP, monitorare e limitare il traffico, bilanciamento del carico, lavorare con tabelle hash distribuite Ketama, mantenere una cache in memoria e gestione asincrona dei timeout.
Tra le novità nella nuova versione:
- Aggiunta la supporto per l'installazione di filtri per intestazioni HTTP/2 aggiuntive.
- Aggiunta la possibilità di modificare la dimensione del buffer dei pacchetti in ingresso per TCP.
- Aggiunta la funzione body_bytes_read().
- Aggiunto il filtro cache_not_modified_filter.
- Aggiunta la possibilità di registrare le chiavi TLS.
- Aggiunta la funzione di callback purge_response.
Fonte: opennet.ru
