Cloudflare va canviar de NGINX al seu propi proxy Pingora, escrit en Rust

Cloudflare va anunciar la transició de la seva xarxa de lliurament de contingut per utilitzar el servidor intermediari Pingora, escrit en el llenguatge Rust. El nou servidor intermediari substitueix la configuració basada en el servidor NGINX amb scripts Lua i processa més d'un bilió de sol·licituds per dia. Cal assenyalar que la transició a un servidor intermediari especialitzat va permetre no només implementar noves funcions i augmentar la seguretat a causa del funcionament segur de la memòria, sinó que també va provocar un augment significatiu del rendiment i l'estalvi de recursos: la solució basada en Pingora no requereix l'ús. de Lua, i per tant consumeix un 70% menys de recursos CPU i un 67% menys de memòria mentre processa la mateixa quantitat de trànsit.

Durant molt de temps, un sistema de proxy de trànsit entre usuaris i servidors finals basat en scripts NGINX i Lua va satisfer les necessitats de Cloudflare, però a mesura que la xarxa creixia i augmentava la seva complexitat, una solució universal va resultar ser insuficient, tant pel que fa a rendiment i per limitacions d'extensibilitat i implementació de noves oportunitats per als clients. En particular, hi va haver reptes per afegir funcionalitats més enllà d'una simple passarel·la i un equilibrador de càrrega. Per exemple, si el servidor no processa una sol·licitud, va ser necessari tornar a enviar la sol·licitud a un altre servidor, proporcionant-li un conjunt diferent de capçaleres HTTP.

En lloc d'una arquitectura que separa les sol·licituds en processos de treball separats, Pingora utilitza un model multifil, que en els casos d'ús de Cloudflare (alta concentració de trànsit de diferents llocs amb un gran canvi estadístic) va mostrar una distribució més eficient dels recursos entre els nuclis de la CPU. En particular, la vinculació de sol·licituds desequilibrades de nginx als processos va donar lloc a una càrrega desequilibrada als nuclis de la CPU, donant lloc a sol·licituds intensives en recursos i al bloqueig d'E/S alentint el processament d'altres sol·licituds. A més, l'enllaç de l'agrupació de connexions als processos del controlador no permetia la reutilització de connexions ja establertes d'altres processos del controlador, la qual cosa redueix l'eficiència quan hi ha un gran nombre de processos del controlador.

NGINX:

Cloudflare va canviar de NGINX al seu propi proxy Pingora, escrit en Rust

Pingora:

Cloudflare va canviar de NGINX al seu propi proxy Pingora, escrit en Rust

La implantació de Pingora va permetre reduir 160 vegades el nombre d'instal·lacions de noves connexions i augmentar la quota de sol·licituds reutilitzades del 87.1% al 99.92%. A més de reduir les reconnexions i l'ús més eficient dels nuclis de la CPU, la millora del rendiment del nou proxy es va deure principalment a l'eliminació dels controladors Lua lents utilitzats amb nginx.

El llenguatge Rust va ser escollit per aconseguir un alt rendiment combinat amb la disponibilitat d'eines per garantir un funcionament segur amb memòria. S'esmenta que malgrat els enginyers altament qualificats de Cloudflare i revisant el codi escrit en llenguatge C, no va ser possible evitar errors que portaven a problemes de memòria (per exemple, una vulnerabilitat en l'analitzador HTML). Pel que fa al nou codi, parla de casos d'anàlisi d'errors a Pingora, que no van resultar ser causats per problemes a l'aplicació, sinó per un error al nucli de Linux i errors de maquinari.

A més, podem destacar el comentari de Linus Torvalds, expressat a la conferència Open-Source Summit Europe que té lloc aquests dies, sobre la inclusió del suport per al llenguatge Rust al nucli de Linux. Els pedaços per desenvolupar controladors de dispositiu en llenguatge Rust no es van incloure al nucli 6.0, però segons Linus, probablement s'acceptaran al nucli 6.1; no retardarà la integració. Com a motivació per afegir suport a Rust, a més de l'impacte positiu en la seguretat, Linus també cita l'oportunitat d'augmentar l'interès per treballar el nucli dels nous participants, que és important en el context de l'envelliment dels vells.

Font: opennet.ru

Afegeix comentari