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
