Cloudflare est passé à Pingora, son propre proxy écrit en Rust

Cloudflare migre de NGINX vers Pingora

Pingora, est un nouveau proxy HTTP créé par cloudflare en utilisant Rust

Cloudflare dévoilé récemment qui migre votre réseau de diffusion de contenu pour utiliser le proxy «pingore», qui se distingue par son écriture en Rust. La nouveau proxy remplacé Configuration basée sur le serveur NGINX avec des scripts Lua et gère plus d'un milliard de requêtes par jour.

Il est à noter que la transition vers le proxy spécialisé «Pingora» a non seulement permis de mettre en œuvre de nouvelles fonctions et d'augmenter la sécurité grâce à un travail sûr avec la mémoire, mais a également conduit à une augmentation significative des performances et des économies de ressources.

Une solution basée sur Pingora ne nécessite pas l'utilisation de Lua et utilise l'architecture à charge optimisée de Cloudflare, consommant 70 % de ressources CPU en moins et 67 % de mémoire en moins tout en traitant la même quantité de trafic.

Pendant très longtemps, un système de proxy de trafic entre les utilisateurs et les serveurs finaux basé sur des scripts NGINX et Lua a répondu aux besoins de Cloudflare, mais à mesure que le réseau grandissait et que sa complexité augmentait, une solution universelle ne suffisait pas, tant en termes de performances que de limites d'extensibilité et de mise en œuvre de nouvelles opportunités pour les clients.

En particulier, il y avait des difficultés à ajouter des fonctionnalités au-delà d'une simple passerelle et d'un équilibreur de charge. Par exemple, dans le cas où le serveur n'était pas en mesure de traiter une requête, il était nécessaire de rediriger la requête vers un autre serveur, en lui fournissant un ensemble différent d'en-têtes HTTP.

Au lieu d'une architecture avec des demandes divisées en processus de travail distincts (travailleurs), Pingora utilise un modèle multi-threading, qui dans les scénarios d'utilisation de Cloudflare (forte concentration de trafic provenant de différents sites avec un grand décalage statistique) a montré une répartition plus efficace des ressources entre les cœurs de processeur.

En particulier, la liaison des requêtes déséquilibrées aux processus dans nginx a entraîné une charge déséquilibrée sur les cœurs de processeur, à la suite de quoi les requêtes gourmandes en ressources et le blocage des E/S ont ralenti le traitement des autres requêtes.

De plus, la liaison du pool de connexions aux processus de contrôleur ne permettait pas de réutiliser les connexions déjà établies à partir d'autres processus de contrôleur, ce qui réduit l'efficacité lorsqu'il existe un grand nombre de processus de contrôleur.

L'introduction de Pingora a permis de réduire le nombre d'opérations de 160 fois établir de nouvelles connexions et augmenter la proportion de demandes réutilisées de 87,1 % à 99,92 %. Outre la réduction des reconnexions et l'utilisation plus efficace des cœurs de processeur, l'amélioration des performances du nouveau proxy était principalement due à la suppression des pilotes Lua lents utilisés avec nginx.

Le langage Rust a été choisi car il permet des performances élevées combinée à la disponibilité d'outils sécurisés en mémoire. Il est mentionné que malgré les ingénieurs hautement qualifiés de Cloudflare et la révision du code, les programmes écrits en langage C n'ont pas pu éviter les bogues qui entraînent des problèmes de mémoire (par exemple, une vulnérabilité dans l'analyseur HTML).

En ce qui concerne le nouveau code, nous avons parlé de cas d'analyse de plantage dans Pingora, qui se sont avérés être causés non pas par des problèmes dans l'application, mais par un bogue dans le noyau Linux et des pannes matérielles.

De plus, on peut noter que Linus Torvalds a commenté l'inclusion de la prise en charge du langage Rust dans le noyau Linux, exprimée lors de la conférence Open-Source Summit Europe qui a lieu ces jours-ci. Le noyau 6.0 n'incluait pas de correctifs pour développer des pilotes de périphériques dans le langage Rust, mais selon Linus, ils sont susceptibles d'être acceptés dans le noyau 6.1, vous n'allez pas profiter de l'intégration.

Comme raison d'ajouter le support de Rust, en plus d'un impact positif sur la sécurité, Linus en profite également pour accroître l'intérêt des nouveaux entrants à travailler sur le noyau, ce qui est important dans le contexte des vétérans vieillissants.

Enfin si vous souhaitez en savoir plus, vous pouvez vérifier les détails dans le lien suivant.


Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont marqués avec *

*

*

  1. Responsable des données : AB Internet Networks 2008 SL
  2. Finalité des données: Contrôle du SPAM, gestion des commentaires.
  3. Légitimation: votre consentement
  4. Communication des données: Les données ne seront pas communiquées à des tiers sauf obligation légale.
  5. Stockage des données: base de données hébergée par Occentus Networks (EU)
  6. Droits: à tout moment, vous pouvez limiter, récupérer et supprimer vos informations.