Das Unternehmen Cloudflare hat die Veröffentlichung des Pingora 0.4 Frameworks bekannt gegeben, das für die Entwicklung von sicheren, leistungsstarken Netzwerkdiensten in der Programmiersprache Rust konzipiert ist. Der mit Pingora erstellte Proxy wird seit über zwei Jahren im Content Delivery Network von Cloudflare anstelle von nginx verwendet und verarbeitet mehr als 40 Millionen Anfragen pro Sekunde. Der Code ist in Rust geschrieben und unter der Lizenz Apache 2.0 veröffentlicht worden.
Hauptfunktionen von Pingora:
- Unterstützung von HTTP/1 und HTTP/2 (HTTP/3 ist geplant), sowie die Möglichkeit, Dienste zu erstellen, die eigene Protokolle oder UDP/TCP verwenden.
- Unterstützung für multithreaded Bearbeitung von Anfragen im asynchronen Modus.
- Möglichkeit, Callback-Handler und Filter anzuhängen, die es ermöglichen, verschiedene Phasen der Anfrageverarbeitung zu steuern sowie Anfragen und Antworten zu ändern, umzuleiten, zu blockieren und zu protokollieren.
- Proxy für gRPC und WebSocket.
- Erweiterbare Lastenausgleichsmechanismen.
- Die Möglichkeit, die Konfiguration ohne Neustart zu ändern.
- Unterstützung für die Aktualisierung des Anwendungscodes ohne Unterbrechung der Verbindungen.
- Werkzeuge zum Lastenwechsel im Falle eines Ausfalls (Failover).
- Integration mit verschiedenen Überwachungs- und Protokollierungssystemen (Syslog, Prometheus, Sentry, OpenTelemetry).
- Unterstützung für TLS-Verschlüsselung (OpenSSL, BoringSSL oder Rustls werden verwendet).
- Fertige Rust-Pakete zur Erstellung von HTTP-Proxys, zur Arbeit mit Netzwerkprotokollen, zur Analyse von HTTP-Headern, zur Erfassung und Begrenzung des Datenverkehrs, zur Lastenverteilung, zur Arbeit mit einer verteilten Hash-Tabelle Ketama, zur Cache-Verwaltung im RAM und zur asynchronen Bearbeitung von Zeitüberschreitungen.
Zu den Neuerungen in der neuen Version gehören:
- Erste Unterstützung für die Kryptobibliothek Rustls, die Krypto-Provider auf Basis der Bibliotheken aws-lc-rs und ring, die auf BoringSSL basieren, verwendet.
- Experimentelle Unterstützung für die Windows-Plattform.
- Dummy-TLS-Modus, der in Situationen verwendet werden kann, in denen die Verwendung einer echten TLS-Implementierung nicht möglich ist.
- Unterstützung für das Modul gRPC-web zur Umwandlung von Anfragen von gRPC-web-Clients in Anfragen an zu einem Server gRPC.
- Möglichkeit zur Verarbeitung von H2C-Verbindungen (HTTP/2 über unverschlüsseltes TCP) und HTTP/1 auf einem einzigen Netzwerkport.
- Die Möglichkeit zur Anbindung eigener Implementierungen der Funktion connect() wurde hinzugefügt, um das Verhalten beim Herstellen einer Netzwerkverbindung zu ändern, beispielsweise zur Festlegung zusätzlicher Optionen für den Socket oder zur Simulation von Fehlern im Testmodus.
- Es wurde die Möglichkeit geschaffen, informative Antworten beim Proxieren zu ignorieren, wie etwa Antworten mit dem Header „Expect: 100-continue“.
- Die Unterstützung für das Entpacken von Antworten, die mit gzip komprimiert sind, wurde hinzugefügt.
- Die Berücksichtigung des Zustands des Backends zu Überwachungszwecken wurde implementiert.
- Die Möglichkeit zur Bindung an einen Bereich lokaler Ports wurde hinzugefügt.
Quelle: opennet.ru
