L'entreprise Cloudflare a publiĂ© la version 0.6 du framework Pingora, destinĂ© au dĂ©veloppement de services rĂ©seau sĂ©curisĂ©s et Ă hautes performances en langage Rust. DĂ©ployĂ© avec Pingora, le proxy est utilisĂ© depuis plus de deux ans dans le rĂ©seau de distribution de contenu Cloudflare, Ă la place de nginx, et traite plus de 40 millions de requĂȘtes par seconde. Le code est Ă©crit en langage Rust et est publiĂ© sous la licence Apache 2.0.
Fonctionnalités principales de Pingora :
- Prise en charge de HTTP/1 et HTTP/2 (HTTP/3 prévu), ainsi que la possibilité de créer des services utilisant leurs propres protocoles ou UDP/TCP.
- Prise en charge du traitement multithreading des requĂȘtes en mode asynchrone.
- PossibilitĂ© d'attacher des gestionnaires de rappel et des filtres, permettant de gĂ©rer diffĂ©rentes Ă©tapes du traitement de la requĂȘte ainsi que de modifier, rediriger, bloquer et journaliser les requĂȘtes et les rĂ©ponses.
- Proxy gRPC et WebSocket.
- Load balancers plugables.
- Possibilité de modification de la configuration sans redémarrage.
- Support de mise Ă jour du code de l'application sans interruption des connexions.
- Outils pour le basculement en cas de défaillance.
- Intégration avec différents systÚmes de surveillance et de journalisation (Syslog, Prometheus, Sentry, OpenTelemetry).
- Prise en charge du chiffrement TLS (utilise OpenSSL, BoringSSL ou Rustls).
- Paquets Rust prĂȘts Ă l'emploi pour crĂ©er des proxy HTTP, travailler avec des protocoles rĂ©seau, analyser des en-tĂȘtes HTTP, comptabiliser et limiter le trafic, Ă©quilibrer la charge, gĂ©rer une table de hachage distribuĂ©e Ketama, maintenir un cache en mĂ©moire et traiter les dĂ©lais d'attente de maniĂšre asynchrone.
Parmi les changements dans la nouvelle version :
- Lors de l'arrĂȘt, la sauvegarde des noms des composants runtime dans le journal a Ă©tĂ© assurĂ©e pour faciliter le diagnostic des problĂšmes causĂ©s par l'absence de composants runtime, entraĂźnant des retards lors de l'arrĂȘt.
- Le suivi des phases d'exĂ©cution a Ă©tĂ© activĂ© de serveurs, les informations qui peuvent ĂȘtre utiles pour la surveillance ou pour assurer la tolĂ©rance de panne. Lors du changement de phase d'exĂ©cution, un message ExecutionPhase est gĂ©nĂ©rĂ©, et peut ĂȘtre interceptĂ© via l'API Server::watch_execution_phase.
- Le placement en mémoire de dictionnaires compressés est autorisé.
- Dans l'implémentation du serveur http et du proxy http, les directives HttpServerOptions et H2Options ont été ajoutées.
- Une protection contre l'attaque MadeYouReset a été mise en place, permettant de provoquer une indisponibilité à travers la manipulation des frames de contrÎle HTTP/2.
Source : opennet.ru
