L'azienda Cloudflare ha pubblicato la versione 0.4 del framework Pingora, progettato per lo sviluppo di servizi di rete sicuri e ad alte prestazioni in linguaggio Rust. Già da oltre due anni, un proxy costruito con Pingora è utilizzato 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 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:
- Supporto iniziale per la libreria crittografica Rustls, che utilizza provider crittografici basati sulle librerie aws-lc-rs e ring, fondati su BoringSSL.
- Supporto sperimentale per la piattaforma Windows.
- Modalità TLS fittizia (dummy TLS), utilizzabile in situazioni in cui non è possibile utilizzare un'implementazione reale di TLS.
- Aggiunto supporto per il modulo gRPC-web per tradurre le richieste dei client gRPC-web in richieste a server gRPC.
- È stata fornita la possibilità di gestire connessioni H2C (HTTP/2 su TCP nudo, senza crittografia) e HTTP/1 su una singola porta di rete.
- Aggiunta la possibilità di collegare implementazioni personalizzate della funzione connect() per modificare il comportamento durante l'impostazione della connessione di rete, ad esempio, per impostare opzioni aggiuntive per il socket o simulare errori durante i test.
- È stata fornita la possibilità di ignorare le risposte informative durante il proxying, come le risposte con l'intestazione "Expect: 100-continue".
- Aggiunto supporto per l'espansione delle risposte compresse con gzip.
- Realizzato il monitoraggio dello stato del backend.
- Aggiunta la possibilità di vincolarsi a un intervallo di porte locali.
Fonte: opennet.ru
