La sociĂ©tĂ© Cloudflare a annoncĂ© le passage de son rĂ©seau de livraison de contenu Ă l'utilisation du proxy Pingora, dĂ©veloppĂ© en Rust. Ce nouveau proxy remplace la configuration basĂ©e sur NGINX avec des scripts Lua, et traite plus d'un trillion de requĂȘtes par jour. Il est Ă noter que la transition vers un proxy spĂ©cialisĂ© a non seulement permis de rĂ©aliser de nouvelles fonctionnalitĂ©s et d'augmenter la sĂ©curitĂ© grĂące Ă une gestion sĂ©curisĂ©e de la mĂ©moire, mais a Ă©galement conduit Ă une amĂ©lioration significative des performances et Ă des Ă©conomies de ressources - la solution basĂ©e sur Pingora nĂ©cessite 70 % de ressources CPU en moins et 67 % de mĂ©moire en moins lors du traitement du mĂȘme volume de trafic.
Pendant longtemps, le systĂšme de proxy pour le trafic entre les utilisateurs et les destinataires serveurs trĂšs chargĂ©s basĂ© sur NGINX et des scripts Lua a satisfait les besoins de Cloudflare, mais avec la croissance du rĂ©seau et l'augmentation de sa complexitĂ©, la solution universelle s'est rĂ©vĂ©lĂ©e insuffisante tant en termes de performance qu'en raison de limitations en matiĂšre d'Ă©volutivitĂ© et de mise en Ćuvre de nouvelles fonctionnalitĂ©s pour les clients. En particulier, des difficultĂ©s sont apparues pour ajouter des fonctionnalitĂ©s dĂ©passant le simple rĂŽle de passerelle et d'Ă©quilibreur de charge. Par exemple, il est devenu nĂ©cessaire, en cas d'Ă©chec de traitement de la requĂȘte, serveur de rediriger la requĂȘte vers un autre serveur en lui fournissant un autre ensemble d'en-tĂȘtes HTTP.
Au lieu d'une architecture divisant les requĂȘtes entre diffĂ©rents processus de traitement (worker), Pingora utilise un modĂšle multithread qui, dans les scĂ©narios d'utilisation de Cloudflare (haute concentration de trafic provenant de diffĂ©rents sites avec un important dĂ©calage statistique), a montrĂ© une distribution des ressources plus efficace entre les cĆurs CPU. En particulier, l'affectation de requĂȘtes dĂ©sĂ©quilibrĂ©es aux processus dans nginx entraĂźnait une charge dĂ©sĂ©quilibrĂ©e sur les cĆurs CPU, ce qui ralentissait le traitement d'autres requĂȘtes en raison de requĂȘtes gourmandes en ressources et d'entrĂ©es/sorties bloquantes. De plus, l'affectation de pools de connexions aux processus de traitement empĂȘchait la rĂ©utilisation des connexions dĂ©jĂ Ă©tablies par d'autres processus de traitement, ce qui diminuaient l'efficacitĂ© du travail avec un grand nombre de processus de traitement.
NGINX :

Pingora :

L'implĂ©mentation de Pingora a permis de rĂ©duire de 160 fois le nombre d'opĂ©rations d'Ă©tablissement de nouvelles connexions et d'augmenter la part des requĂȘtes rĂ©utilisĂ©es de 87,1 % Ă 99,92 %. En plus de rĂ©duire les connexions rĂ©pĂ©tĂ©es et d'utiliser plus efficacement les cĆurs CPU, l'amĂ©lioration des performances du nouveau proxy a principalement Ă©tĂ© favorisĂ©e par l'Ă©limination des gestionnaires lents en Lua utilisĂ©s avec nginx.
Le langage Rust a Ă©tĂ© choisi pour sa capacitĂ© Ă offrir de hautes performances tout en fournissant des outils pour assurer une gestion sĂ©curisĂ©e de la mĂ©moire. Il est mentionnĂ© que malgrĂ© le haut niveau de compĂ©tence des ingĂ©nieurs de Cloudflare et la rĂ©vision du code Ă©crit en C, il nâa pas Ă©tĂ© possible d'Ă©viter les erreurs entraĂźnant des problĂšmes de mĂ©moire (par exemple, une vulnĂ©rabilitĂ© dans le parseur HTML). En ce qui concerne le nouveau code, des cas d'Ă©chec dans Pingora ont Ă©tĂ© rapportĂ©s comme Ă©tant causĂ©s non par des problĂšmes dans l'application, mais par une erreur dans le noyau Linux et des pannes matĂ©rielles.
On peut Ă©galement noter le commentaire de Linus Torvalds sur l'inclusion du support du langage Rust dans le noyau Linux, exprimĂ© lors de la confĂ©rence Open-Source Summit Europe. Dans le noyau 6.0, les patchs pour le dĂ©veloppement de pilotes en Rust n'ont pas Ă©tĂ© inclus, mais selon Linus, ils devraient probablement ĂȘtre acceptĂ©s dans le noyau 6.1, car il ne souhaite pas retarder l'intĂ©gration. Comme motivation pour ajouter le support de Rust, en plus de l'impact positif sur la sĂ©curitĂ©, Linus mentionne Ă©galement la possibilitĂ© d'accroĂźtre l'intĂ©rĂȘt pour le travail sur le noyau de nouveaux participants, ce qui est pertinent dans le contexte du vieillissement des vĂ©tĂ©rans.
Source : opennet.ru
