Das Unternehmen Cloudflare hat die zweite Version des Pingora-Frameworks veröffentlicht, das für die Entwicklung sicherer, leistungsstarker Netzwerkdienste in der Programmiersprache Rust vorgesehen ist. Der mit Pingora entwickelte Proxy wird seit etwa einem Jahr im Cloudflare Content Delivery Network anstelle von Nginx eingesetzt und verarbeitet über 40 Millionen Anfragen pro Sekunde. Der Code ist in Rust geschrieben und unter der Apache 2.0-Lizenz veröffentlicht.
Hauptfunktionen von Pingora:
- Unterstützung von HTTP/1 und HTTP/2 (geplant ist HTTP/3) sowie Funktionen zur Erstellung von Diensten, die ihre eigenen Protokolle oder UDP/TCP verwenden.
- Die Möglichkeit, Anfragen im asynchronen Modus multithreaded zu verarbeiten.
- Unterstützung von Callback-Handlern und Filtern, die es ermöglichen, verschiedene Phasen der Anfragverarbeitung 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 von TLS-Verschlüsselung (unter Verwendung von OpenSSL oder BoringSSL).
- 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:
- Unterstützung für die Installation von Filtern für zusätzliche HTTP/2-Header hinzugefügt.
- Die Möglichkeit zur Änderung der Paketpuffergröße für TCP wurde hinzugefügt.
- Die Funktion body_bytes_read() wurde hinzugefügt.
- Der Filter cache_not_modified_filter wurde hinzugefügt.
- Die Möglichkeit zum Protokollieren von TLS-Schlüsseln wurde hinzugefügt.
- Die Callback-Funktion purge_response wurde hinzugefügt.
Quelle: opennet.ru
