Cloudflare ist von NGINX auf seinen eigenen, in Rust geschriebenen Pingora-Proxy umgestiegen

Cloudflare kündigte die Umstellung seines Content-Delivery-Netzwerks auf die Verwendung des Pingora-Proxys an, der in der Rust-Sprache geschrieben ist. Der neue Proxy ersetzt die serverbasierte NGINX-Konfiguration durch Lua-Skripte und verarbeitet mehr als eine Billion Anfragen pro Tag. Es wird darauf hingewiesen, dass der Übergang zu einem spezialisierten Proxy nicht nur die Implementierung neuer Funktionen und eine Erhöhung der Sicherheit durch sicheren Speicherbetrieb ermöglichte, sondern auch zu einer deutlichen Leistungssteigerung und Ressourceneinsparung führte – die Pingora-basierte Lösung erfordert keine Verwendung von Lua und verbraucht daher 70 % weniger CPU-Ressourcen und 67 % weniger Speicher bei der Verarbeitung der gleichen Menge an Datenverkehr.

Lange Zeit befriedigte ein auf NGINX- und Lua-Skripten basierendes Proxy-System für den Datenverkehr zwischen Benutzern und Endservern die Anforderungen von Cloudflare, doch als das Netzwerk wuchs und seine Komplexität zunahm, erwies sich eine universelle Lösung als unzureichend, sowohl in Bezug auf Leistungseinbußen und Einschränkungen bei der Erweiterbarkeit und Umsetzung neuer Möglichkeiten für Kunden. Insbesondere gab es Herausforderungen beim Hinzufügen von Funktionen, die über ein einfaches Gateway und einen Load Balancer hinausgingen. Beispielsweise wurde es notwendig, wenn der Server eine Anfrage nicht verarbeiten konnte, die Anfrage erneut an einen anderen Server zu senden und diesen mit einem anderen Satz von HTTP-Headern zu versehen.

Anstelle einer Architektur, die Anfragen in separate Arbeitsprozesse aufteilt, verwendet Pingora ein Multithread-Modell, das in Cloudflare-Anwendungsfällen (hohe Konzentration des Datenverkehrs von verschiedenen Standorten mit großer statistischer Verschiebung) eine effizientere Ressourcenverteilung zwischen CPU-Kernen zeigte. Insbesondere die Bindung unausgeglichener Anfragen an Prozesse durch nginx führte zu einer unausgeglichenen Belastung der CPU-Kerne, was zu ressourcenintensiven Anfragen und blockierenden E/A-Vorgängen führte, die die Verarbeitung anderer Anfragen verlangsamten. Darüber hinaus ermöglichte die Bindung des Verbindungspools an Handler-Prozesse keine Wiederverwendung bereits bestehender Verbindungen von anderen Handler-Prozessen, was die Effizienz verringert, wenn eine große Anzahl von Handler-Prozessen vorhanden ist.

NGINX:

Cloudflare ist von NGINX auf seinen eigenen, in Rust geschriebenen Pingora-Proxy umgestiegen

Pingora:

Cloudflare ist von NGINX auf seinen eigenen, in Rust geschriebenen Pingora-Proxy umgestiegen

Durch die Implementierung von Pingora konnte die Anzahl der Installationen neuer Verbindungen um das 160-fache reduziert und der Anteil wiederverwendeter Anfragen von 87.1 % auf 99.92 % erhöht werden. Neben der Reduzierung von Neuverbindungen und einer effizienteren Nutzung von CPU-Kernen war die Leistungsverbesserung des neuen Proxys hauptsächlich auf die Entfernung langsamer Lua-Handler zurückzuführen, die mit Nginx verwendet wurden.

Die Sprache Rust wurde gewählt, um eine hohe Leistung zu erreichen und gleichzeitig Tools zur Verfügung zu stellen, die einen sicheren Betrieb mit dem Speicher gewährleisten. Es wird erwähnt, dass es trotz der hochqualifizierten Ingenieure von Cloudflare und der Überprüfung des in der Sprache C geschriebenen Codes nicht möglich war, Fehler zu vermeiden, die zu Speicherproblemen führten (z. B. eine Schwachstelle im HTML-Parser). Im neuen Code geht es um Fälle von Analysefehlern in Pingora, die nicht durch Probleme in der Anwendung, sondern durch einen Fehler im Linux-Kernel und Hardwarefehler verursacht wurden.

Darüber hinaus können wir den Kommentar von Linus Torvalds zur Kenntnis nehmen, der auf der in diesen Tagen stattfindenden Open-Source Summit Europe-Konferenz geäußert wurde und sich mit der Aufnahme der Unterstützung für die Rust-Sprache in den Linux-Kernel befasst. Patches für die Entwicklung von Gerätetreibern in der Rust-Sprache waren nicht im 6.0-Kernel enthalten, aber laut Linus werden sie höchstwahrscheinlich in den 6.1-Kernel übernommen; er wird die Integration nicht verzögern. Als Motivation für die Unterstützung von Rust nennt Linus neben den positiven Auswirkungen auf die Sicherheit auch die Möglichkeit, das Interesse an der Arbeit am Kern neuer Teilnehmer zu steigern, was im Zusammenhang mit alternden Oldtimern wichtig ist.

Source: opennet.ru

Kommentar hinzufügen