Cloudflare hat von NGINX auf den eigenen Proxy Pingora umgestellt, der in Rust geschrieben wurde.

Das Unternehmen Cloudflare hat bekannt gegeben, dass es sein Content Delivery Network auf den Pingora-Proxy umgestellt hat, der in der Programmiersprache Rust geschrieben wurde. Der neue Proxy ersetzt die Konfiguration auf Basis des NGINX-Servers mit Lua-Skripten und verarbeitet über eine Billion Anfragen pro Tag. Es wird angemerkt, dass der Wechsel zu einem spezialisierten Proxy nicht nur neue Möglichkeiten und eine erhöhte Sicherheit durch sicheres Speichermanagement ermöglicht hat, sondern auch zu einer erheblichen Leistungssteigerung und Ressourceneinsparung geführt hat – die Lösung auf Basis von Pingora benötigt keine Lua-Nutzung, weshalb sie 70 % weniger CPU-Ressourcen und 67 % weniger RAM bei der Verarbeitung desselben Datenvolumens verbraucht.

Lange Zeit war das System zur Proxierung des Traffics zwischen den Benutzern und den Endpunkten Servern gearbeitet werden. Die auf NGINX und Lua-Skripten basierende Lösung erfüllte die Anforderungen von Cloudflare, jedoch stellte sich mit dem Wachstum des Netzwerks und der zunehmenden Komplexität heraus, dass eine universelle Lösung hinsichtlich der Leistung und der Skalierbarkeit sowie der Implementierung neuer Funktionen für die Kunden unzureichend war. Insbesondere gab es Schwierigkeiten bei der Hinzufügung von Funktionalitäten, die über einen einfachen Gateway und Lastenausgleich hinausgingen. Zum Beispiel wurde es notwendig, im Falle eines Fehlers bei der Anfrageverarbeitung. dem Server durch die Anfrage an einen anderen Server umzuleiten und sie mit einem anderen Satz von HTTP-Headern zu versorgen.

Anstelle einer Architektur, die Anfragen auf separate Worker-Prozesse verteilt, verwendet Pingora ein Multithreading-Modell. Dieses Modell hat sich in Szenarien mit Cloudflare, wo ein hohes Verkehrsaufkommen von verschiedenen Websites mit großen statistischen Schwankungen auftritt, als effektiver erwiesen, um Ressourcen besser zwischen den CPU-Kernen zu verteilen. Insbesondere führte die Zuordnung von unausgeglichenen Anfragen zu Prozessen in NGINX zu einer ungleichmäßigen Auslastung der CPU-Kerne, was dazu führte, dass ressourcenintensive Anfragen und blockierende Ein- und Ausgaben die Verarbeitung anderer Anfragen verlangsamt haben. Darüber hinaus erlaubte die Zuordnung von Verbindungs-Pools zu Worker-Prozessen nicht die Wiederverwendung bereits hergestellter Verbindungen von anderen Worker-Prozessen, was die Effizienz bei einer hohen Anzahl an Worker-Prozessen weiter verringerte.

NGINX:

Cloudflare hat von NGINX auf den eigenen Proxy Pingora umgestellt, der in Rust geschrieben wurde.

Pingora:

Cloudflare hat von NGINX auf den eigenen Proxy Pingora umgestellt, der in Rust geschrieben wurde.

Die Implementierung von Pingora hat die Anzahl der neuen Verbindungsinstallationen um das 160-fache reduziert und den Anteil der wiederverwendeten Anfragen von 87,1 % auf 99,92 % erhöht. Neben der Reduzierung wiederholter Verbindungen und einer effizienteren Nutzung der CPU-Kerne trug vor allem die Beseitigung langsamer Lua-Handler, die in nginx verwendet wurden, zur Leistungssteigerung des neuen Proxys bei.

Die Programmiersprache Rust wurde gewählt, da sie hohe Leistung mit sicheren Speichermanagement-Funktionen kombiniert. Es wird erwähnt, dass trotz der hohen Qualifikation der Ingenieure von Cloudflare und der Überprüfung des Codes in C keine Fehler vermieden werden konnten, die zu Speicherproblemen führten (zum Beispiel eine Schwachstelle im HTML-Parser). Was den neuen Code betrifft, so wurden Fälle von Abstürzen in Pingora erwähnt, die nicht durch Probleme im Anwendungsbereich, sondern durch Fehler im Linux-Kernel und Hardwareausfälle verursacht wurden.

Zusätzlich sei auf die auf der derzeit stattfindenden Open-Source Summit Europe vorgestellte Aussage von Linus Torvalds hingewiesen, dass die Unterstützung der Programmiersprache Rust im Linux-Kernel eingeführt werden soll. In den Kernel 6.0 wurden noch keine Patches für die Entwicklung von Gerätetreiberdiensten in Rust aufgenommen, aber laut Linus werden sie wahrscheinlich in Kernel 6.1 akzeptiert, da er nicht mit der Integration zögern will. Als Motivation für die Hinzufügung der Rust-Unterstützung nennt Linus neben den positiven Auswirkungen auf die Sicherheit auch die Möglichkeit, das Interesse neuer Mitentwickler an der Mitarbeit am Kernel zu steigern, was angesichts des Alterns der alten Hasen relevant ist.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster