26 points par yunyun0505 2022-09-15 | 5 commentaires | Partager sur WhatsApp

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 hyper sont 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

 
functor 2022-09-27

70 % de CPU et 67 % de mémoire inactifs, c’est impressionnant..

 
ifmkl 2022-09-16

Ah, nginx aussi était vraiment très bien, mais si ça sort en open source, j’ai envie de l’essayer tout de suite.

 
forteleaf 2022-09-16

Même en étudiant Rust, il n’y a pas vraiment d’emplois où postuler.

 
jungmin1237 2022-09-15

Du Rust ? Voilà qui me plaît.

 
jjpark78 2022-09-15

En programmation système, Rust semble devenir de plus en plus sans équivalent...