Das Unternehmen Cloudflare gab bekannt, dass es sein Content Delivery Network auf den Einsatz des in Rust geschriebenen Pingora-Proxys umgestellt hat. Der neue Proxy ersetzt die NGINX-Serverkonfiguration mit Lua-Skripten und verarbeitet tĂ€glich ĂŒber eine Billion Anfragen. Es wird darauf hingewiesen, dass der Ăbergang zu einem spezialisierten Proxy nicht nur neue Möglichkeiten geschaffen und die Sicherheit durch sicheren Speicherbetrieb erhöht hat, sondern auch zu erheblichen Leistungssteigerungen und Ressourcenschonungen fĂŒhrte â die Lösung auf Basis von Pingora benötigt keine Lua-Nutzung, wodurch der CPU-Ressourcenverbrauch um 70 % und der Speicherverbrauch um 67 % bei der Verarbeitung des gleichen Traffic-Volumens gesenkt wird.
Lange Zeit erfĂŒllte das System zur Proxierung des Traffics zwischen Nutzern und EndgerĂ€ten Servern auf Basis von NGINX und Lua-Skripten die Anforderungen von Cloudflare, jedoch mit dem Wachstum des Netzwerks und der zunehmenden KomplexitĂ€t erwies sich die universelle Lösung sowohl hinsichtlich der Leistung als auch aufgrund von EinschrĂ€nkungen in der Skalierbarkeit und der Implementierung neuer Funktionen fĂŒr Kunden als unzureichend. Insbesondere traten Schwierigkeiten beim HinzufĂŒgen von FunktionalitĂ€ten auf, die ĂŒber einen einfachen Gateway- und Lastverteilungsmechanismus hinausgingen. Zum Beispiel wurde es notwendig, im Falle eines Fehler bei der Anfragebearbeitung Server die Anfrage an einen anderen Server umzuleiten und sie mit einem anderen Satz von HTTP-Headern auszustatten.
Statt einer Architektur mit einer Aufteilung der Anfragen auf separate Bearbeitungsprozesse (Worker) verwendet Pingora ein mehrschichtiges Modell, das in den Anwendungsszenarien von Cloudflare (hohe Traffic-Konzentration von verschiedenen Websites bei groĂem statistischen Drift) eine effizientere Ressourcenauslastung zwischen CPU-Kernen zeigte. Insbesondere fĂŒhrte die Zuweisung von unausgeglichenen Anfragen zu Prozessen in NGINX zu einer unausgewogenen Belastung der CPU-Kerne, was dazu fĂŒhrte, dass ressourcenintensive Anfragen und blockierender Input-Output die Bearbeitung anderer Anfragen verlangsamten. DarĂŒber hinaus erlaubte die Bindung eines Verbindungs-Pools an Bearbeitungsprozesse nicht die Wiederverwendung bereits hergestellter Verbindungen anderer Bearbeitungsprozesse, was die Effizienz bei einer groĂen Anzahl von Bearbeitungsprozessen minderte.
NGINX:

Pingora:

Die EinfĂŒhrung von Pingora hat die Anzahl der Installationsoperationen neuer Verbindungen um das 160-fache reduziert und den Anteil wiederverwendbarer Anfragen von 87,1 % auf 99,92 % erhöht. Neben der Reduzierung der wiederholten Verbindungen und einer effizienteren Nutzung der CPU-Kerne trug auch die Beseitigung der langsamen Lua-Handler, die mit nginx verwendet wurden, zur Leistungssteigerung des neuen Proxys bei.
Die Programmiersprache Rust wurde gewĂ€hlt, um eine hohe Leistung bei gleichzeitiger Sicherstellung der Sicherheit im Umgang mit Speicher zu ermöglichen. Es wird erwĂ€hnt, dass trotz der hohen Qualifikation der Ingenieure von Cloudflare und der ĂberprĂŒfung des Codes in C-Programmen Fehler, die zu Speicherproblemen fĂŒhrten (zum Beispiel eine Schwachstelle im HTML-Parser), nicht vermieden werden konnten. Was den neuen Code betrifft, wurden FĂ€lle von AbstĂŒrzen in Pingora besprochen, die nicht durch Anwendungsprobleme, sondern durch Fehler im Linux-Kernel und Hardwarefehler verursacht wurden.
ZusĂ€tzlich ist der Kommentar von Linus Torvalds zur UnterstĂŒtzung der Programmiersprache Rust im Linux-Kernel erwĂ€hnenswert, der auf der derzeit stattfindenden Open-Source Summit Europe-Konferenz gemacht wurde. Die Patches fĂŒr die Entwicklung von GerĂ€tetreibern in Rust wurden nicht in den Kernel 6.0 aufgenommen, aber laut Linus werden sie wahrscheinlich im Kernel 6.1 akzeptiert, da er nicht beabsichtigt, mit der Integration zu zögern. Als Motiv fĂŒr die UnterstĂŒtzung von Rust nennt Linus neben dem positiven Einfluss auf die Sicherheit auch die Möglichkeit, das Interesse neuer Mitwirkender an der Arbeit am Kernel zu erhöhen, was angesichts des Alterns der erfahrenen Entwickler relevant ist.
Quelle: opennet.ru
