L'azienda Cloudflare ha pubblicato la versione 0.6 del framework Pingora, progettato per lo sviluppo di servizi di rete ad alte prestazioni e sicuri in Rust. I proxy costruiti utilizzando Pingora sono già in uso da oltre due anni nella rete di distribuzione dei contenuti di Cloudflare al posto di nginx, gestendo oltre 40 milioni di richieste al secondo. Il codice è scritto in Rust ed è pubblicato con licenza Apache 2.0.
Principali funzionalità di Pingora:
- Supporto per HTTP/1 e HTTP/2 (presto anche HTTP/3), con la possibilità di creare servizi che utilizzano i propri protocolli o UDP/TCP.
- Supporto per l'elaborazione multithreading delle richieste in modalità asincrona.
- Possibilità di ancorare gestori di callback e filtri, che permettono di gestire diverse fasi dell'elaborazione della richiesta, oltre a modificare, reindirizzare, bloccare e registrare richieste e risposte.
- Proxy gRPC e WebSocket.
- Bilanciatori di carico plug-and-play.
- Possibilità di modificare la configurazione senza riavviare.
- Supporto per l'aggiornamento del codice dell'applicazione senza interrompere le connessioni.
- Strumenti per il failover in caso di guasti.
- Integrazione con diversi sistemi di monitoraggio e registrazione (Syslog, Prometheus, Sentry, OpenTelemetry).
- Supporto per la crittografia TLS (utilizza OpenSSL, BoringSSL o Rustls).
- Pacchetti Rust pronti per creare proxy HTTP, lavorare con protocolli di rete, analizzare intestazioni HTTP, contare e limitare il traffico, bilanciare il carico, gestire una tabella hash distribuita Ketama, mantenere una cache in memoria e gestire in modo asincrono i timeout.
Tra le modifiche nella nuova versione:
- Durante il completamento, è stato garantito il salvataggio nei log dei nomi dei componenti runtime per semplificare la diagnosi dei problemi causati dall'assenza di componenti runtime che portano a ritardi nel completamento.
- È stato incluso il tracciamento delle fasi di esecuzione server, le cui informazioni possono essere utili per il monitoraggio o la garanzia di resilienza. Quando si cambia fase di esecuzione, viene generato un messaggio ExecutionPhase, che può essere intercettato tramite l'API Server::watch_execution_phase.
- È consentita la memorizzazione di dizionari compressi.
- Nell'implementazione del server http e del proxy http sono state aggiunte le direttive HttpServerOptions e H2Options.
- È stata implementata la protezione contro l'attacco MadeYouReset, che consente di provocare un'interruzione del servizio attraverso la manipolazione dei frame di controllo HTTP/2.
Fonte: opennet.ru
