Cloudflare è passato da NGINX al proprio proxy Pingora, scritto in Rust

Cloudflare ha annunciato la transizione della sua rete di distribuzione dei contenuti per utilizzare il proxy Pingora, scritto nel linguaggio Rust. Il nuovo proxy sostituisce la configurazione basata su server NGINX con script Lua ed elabora più di un trilione di richieste al giorno. Va notato che il passaggio a un proxy specializzato ha consentito non solo di implementare nuove funzionalità e aumentare la sicurezza grazie al funzionamento sicuro della memoria, ma ha anche portato a un aumento significativo delle prestazioni e al risparmio di risorse: la soluzione basata su Pingora non richiede l'uso di Lua, e quindi consuma il 70% in meno di risorse CPU e il 67% in meno di memoria elaborando la stessa quantità di traffico.

Per molto tempo, un sistema di proxy del traffico tra utenti e server finali basato su script NGINX e Lua ha soddisfatto le esigenze di Cloudflare, ma con la crescita della rete e l'aumento della sua complessità, una soluzione universale si è rivelata insufficiente, sia in termini di prestazioni e a causa di limitazioni nell’estensibilità e nell’implementazione di nuove opportunità per i clienti. In particolare, è stato difficile aggiungere funzionalità oltre il semplice gateway e il sistema di bilanciamento del carico. Ad esempio, è diventato necessario, se il server non riesce a elaborare una richiesta, inviare nuovamente la richiesta a un altro server, fornendogli un diverso set di intestazioni HTTP.

Invece di un'architettura che separa le richieste in processi di lavoro separati, Pingora utilizza un modello multi-thread, che nei casi d'uso di Cloudflare (alta concentrazione di traffico da siti diversi con un ampio spostamento statistico) ha mostrato una distribuzione più efficiente delle risorse tra i core della CPU. In particolare, il processo di associazione delle richieste sbilanciate da parte di nginx ha comportato un carico sbilanciato sui core della CPU, con conseguenti richieste ad alta intensità di risorse e blocco dell'I/O che rallentava l'elaborazione di altre richieste. Inoltre, il collegamento del pool di connessioni ai processi del gestore non consente il riutilizzo delle connessioni già stabilite da altri processi del gestore, il che riduce l'efficienza quando è presente un numero elevato di processi del gestore.

NGINX:

Cloudflare è passato da NGINX al proprio proxy Pingora, scritto in Rust

Pingora:

Cloudflare è passato da NGINX al proprio proxy Pingora, scritto in Rust

L'implementazione di Pingora ha permesso di ridurre di 160 volte il numero di installazioni di nuove connessioni e di aumentare la quota di richieste riutilizzate dall'87.1% al 99.92%. Oltre alla riduzione delle riconnessioni e all'uso più efficiente dei core della CPU, il miglioramento delle prestazioni del nuovo proxy è dovuto principalmente alla rimozione dei gestori Lua lenti utilizzati con nginx.

Il linguaggio Rust è stato scelto per ottenere prestazioni elevate combinate con la disponibilità di strumenti per garantire un funzionamento sicuro con la memoria. Si dice che nonostante gli ingegneri altamente qualificati di Cloudflare e la revisione del codice scritto in linguaggio C, non è stato possibile evitare errori che portassero a problemi di memoria (ad esempio, una vulnerabilità nel parser HTML). Per quanto riguarda il nuovo codice, si parla di casi di analisi dei guasti in Pingora, che si sono rivelati causati non da problemi nell'applicazione, ma da un errore nel kernel Linux e da guasti hardware.

Inoltre, possiamo notare il commento di Linus Torvalds, espresso alla conferenza Open-Source Summit Europe che si tiene in questi giorni, riguardo all'inclusione del supporto per il linguaggio Rust nel kernel Linux. Le patch per lo sviluppo di driver di dispositivo nel linguaggio Rust non erano incluse nel kernel 6.0, ma secondo Linus molto probabilmente verranno accettate nel kernel 6.1 e non ritarderà l'integrazione. Come motivazione per aggiungere il supporto a Rust, oltre all'impatto positivo sulla sicurezza, Linus cita anche l'opportunità di aumentare l'interesse nel lavorare sul nucleo dei nuovi partecipanti, il che è importante nel contesto dell'invecchiamento dei veterani.

Fonte: opennet.ru

Aggiungi un commento