Cloudflare supprime nginx et crée un proxy HTTP (Pingora) en Rust pour l’utiliser
(blog.cloudflare.com)nginx avait des limites
- un seul worker était utilisé pour chaque requête, ce qui entraînait un déséquilibre dans l’utilisation des cœurs CPU
- comme il existait un pool de connexions par worker, le taux de réutilisation des connexions TCP et TLS était mauvais, ce qui augmentait le TTFB
- Cloudflare implémentait aussi en interne les fonctionnalités nécessaires à l’exploitation de nginx, mais nginx, conçu en C, n’était pas memory-safe, et même des ingénieurs expérimentés pouvaient faire des erreurs
Pingora
- Cloudflare reçoit beaucoup de requêtes non conformes aux spécifications RFC, mais des bibliothèques tierces comme
hypersont implémentées de manière stricte vis-à-vis des RFC ; les étendre aurait demandé un travail supplémentaire, d’où la décision de le construire en interne - Rust a été choisi parce qu’il peut remplacer ce que C permet de faire, de manière memory-safe et sans perte de performance
- pour partager plus facilement le pool de connexions, un système d’ordonnancement de type work-stealing a été introduit, ce qui a augmenté le taux de réutilisation. Par rapport à avant, le nombre de connexions établies par seconde est tombé à un tiers
- par rapport à avant, l’utilisation CPU a diminué de 70 % et la mémoire de 67 %
- publication en open source prévue ultérieurement
5 commentaires
70 % de CPU et 67 % de mémoire inactifs, c’est impressionnant..
Ah, nginx aussi était vraiment très bien, mais si ça sort en open source, j’ai envie de l’essayer tout de suite.
Même en étudiant Rust, il n’y a pas vraiment d’emplois où postuler.
Du Rust ? Voilà qui me plaît.
En programmation système, Rust semble devenir de plus en plus sans équivalent...