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
