Cloudflare ha pubblicato il rilascio del framework Pingora 0.4, pensato per sviluppare servizi di rete sicuri e performanti in linguaggio Rust. Il proxy creato utilizzando Pingora è stato utilizzato nella rete di distribuzione dei contenuti Cloudflare al posto di Nginx per più di due anni ed elabora più di 40 milioni di richieste al secondo. Il codice è scritto in Rust e pubblicato sotto la licenza Apache 2.0.
Caratteristiche principali di Pingora:
- Supporto per HTTP/1 e HTTP/2 (HTTP/3 nei piani), nonché la possibilità di creare servizi utilizzando i propri protocolli o UDP/TCP.
- Supporto per l'elaborazione multi-thread delle richieste in modalità asincrona.
- La possibilità di allegare gestori di callback e filtri che consentono di gestire varie fasi dell'elaborazione delle richieste, nonché di modificare, reindirizzare, bloccare e registrare richieste e risposte.
- Proxy di gRPC e WebSocket.
- Bilanciatori di carico collegabili.
- Possibilità di modificare la configurazione senza riavviare.
- Supporto per l'aggiornamento del codice dell'applicazione senza interrompere le connessioni.
- Mezzi per la commutazione del carico in caso di guasto (failover).
- Integrazione con vari sistemi di monitoraggio e logging (Syslog, Prometheus, Sentry, OpenTelemetry).
- Supporto per la crittografia TLS (utilizzando OpenSSL, BoringSSL o Rustls).
- Pacchetti Rust già pronti per la creazione di proxy HTTP, il lavoro con protocolli di rete, l'analisi di intestazioni HTTP, la contabilità e la limitazione del traffico, il bilanciamento del carico, il lavoro con la tabella hash distribuita Ketama, il mantenimento della cache nella RAM e l'elaborazione asincrona dei timeout.
Tra le novità della nuova versione:
- Supporto iniziale per la libreria di crittografia Rustls utilizzando provider di crittografia basati su aws-lc-rs e librerie ad anello basate su BoringSSL.
- Supporto sperimentale per la piattaforma Windows.
- Modalità TLS fittizia, che può essere utilizzata in situazioni in cui non è possibile utilizzare una vera implementazione TLS.
- Aggiunto supporto per il modulo gRPC-web per tradurre le richieste del client gRPC-web in richieste a server gRPC.
- Fornisce la possibilità di gestire connessioni H2C (HTTP/2 su TCP semplice, senza crittografia) e HTTP/1 sulla stessa porta di rete.
- Aggiunta la possibilità di connettere le proprie implementazioni della funzione connect() per modificare il comportamento quando si stabilisce una connessione di rete, ad esempio, per impostare opzioni aggiuntive per il socket o simulare errori durante i test.
- Fornita la possibilità di ignorare le risposte informative durante l'inoltro, come le risposte con l'intestazione "Expect: 100-continue".
- Aggiunto supporto per decomprimere le risposte compresse con gzip.
- Contabilità implementata dello stato del backend a fini di monitoraggio.
- Aggiunta la possibilità di collegarsi a una serie di porte locali.
Fonte: opennet.ru
