Cloudflare ersetzt nginx und nutzt einen in Rust entwickelten HTTP-Proxy (Pingora)
(blog.cloudflare.com)nginx hatte Einschränkungen
- Für jede Anfrage wird nur ein einzelner Worker verwendet, wodurch eine unausgewogene Nutzung der CPU-Kerne entsteht
- Da pro Worker ein Connection Pool existiert, ist die Wiederverwendungsrate von TCP- und TLS-Verbindungen schlecht -> TTFB steigt
- Außerdem wurden die für den Betrieb von nginx benötigten Funktionen intern selbst implementiert, aber das in C entworfene nginx ist nicht memory-safe, sodass selbst erfahrenen Ingenieur:innen Fehler unterliefen
Pingora
- Cloudflare erhält auch viele Anfragen, die nicht dem RFC-Standard entsprechen. Drittanbieter-Bibliotheken (
hyper) sind jedoch strikt RFC-konform implementiert, sodass für Erweiterungen zusätzlicher Aufwand nötig gewesen wäre, weshalb man es selbst aufgebaut hat - Rust wurde gewählt, weil es das, was C kann, ohne Performance-Einbußen auf memory-safe Weise ersetzen kann
- Um den Connection Pool leicht gemeinsam nutzen zu können, wurde ein Scheduling-System nach dem Work-Stealing-Prinzip eingeführt, wodurch die Wiederverwendungsrate stieg. Im Vergleich zu früher werden nur noch etwa ein Drittel so viele Verbindungen pro Sekunde aufgebaut
- Im Vergleich zu früher werden 70 % weniger CPU und 67 % weniger Speicher verwendet
- Soll später als Open Source veröffentlicht werden
5 Kommentare
70 % CPU und 67 % Arbeitsspeicher sind wirklich erstaunlich..
Krass,
nginxhabe ich auch wirklich gern benutzt — wenn das als Open Source erscheint, würde ich es sofort ausprobieren.Selbst wenn man Rust lernt, gibt es kaum Stellen, wo man damit einen Job findet.
Rust also, das gefällt mir.
Gerade in der Systemprogrammierung wird Rust zunehmend nahezu konkurrenzlos..