Veröffentlichung von Pingora 0.4, einem Framework zur Erstellung von Netzwerkdiensten

Cloudflare hat die Veröffentlichung des Pingora 0.4-Frameworks veröffentlicht, das für die Entwicklung sicherer, leistungsstarker Netzwerkdienste in der Sprache Rust konzipiert ist. Der mit Pingora erstellte Proxy wird seit mehr als zwei Jahren anstelle von Nginx im Content-Delivery-Netzwerk Cloudflare eingesetzt und verarbeitet mehr als 40 Millionen Anfragen pro Sekunde. Der Code ist in Rust geschrieben und unter der Apache 2.0-Lizenz veröffentlicht.

Hauptmerkmale von Pingora:

  • Unterstützung für HTTP/1 und HTTP/2 (HTTP/3 in Plänen) sowie die Möglichkeit, Dienste mit eigenen Protokollen oder UDP/TCP zu erstellen.
  • Unterstützung für die Multithread-Verarbeitung von Anforderungen im asynchronen Modus.
  • Die Möglichkeit, Callback-Handler und Filter anzuhängen, mit denen Sie verschiedene Phasen der Anfrageverarbeitung verwalten sowie Anfragen und Antworten ändern, umleiten, blockieren und protokollieren können.
  • Proxying von gRPC und WebSocket.
  • Anschließbare Load Balancer.
  • Möglichkeit, die Konfiguration ohne Neustart zu ändern.
  • Unterstützung für die Aktualisierung des Anwendungscodes ohne Verbindungsunterbrechung.
  • Mittel zur Lastumschaltung im Fehlerfall (Failover).
  • Integration mit verschiedenen Überwachungs- und Protokollierungssystemen (Syslog, Prometheus, Sentry, OpenTelemetry).
  • Unterstützung für TLS-Verschlüsselung (mit OpenSSL, BoringSSL oder Rustls).
  • Vorgefertigte Rust-Pakete zum Erstellen von HTTP-Proxys, zum Arbeiten mit Netzwerkprotokollen, zum Parsen von HTTP-Headern, zur Abrechnung und Begrenzung des Datenverkehrs, zum Lastausgleich, zum Arbeiten mit der verteilten Ketama-Hash-Tabelle, zum Verwalten eines Caches im RAM und zur asynchronen Verarbeitung von Zeitüberschreitungen.

Zu den Änderungen in der neuen Version:

  • Erste Unterstützung für die Rustls-Kryptografiebibliothek mithilfe von Kryptoanbietern basierend auf aws-lc-rs und Ringbibliotheken basierend auf BoringSSL.
  • Experimentelle Unterstützung für die Windows-Plattform.
  • Dummy-TLS-Modus, der in Situationen verwendet werden kann, in denen es nicht möglich ist, eine echte TLS-Implementierung zu verwenden.
  • Unterstützung für das gRPC-Web-Modul hinzugefügt, um gRPC-Web-Clientanfragen in Anfragen an Server gRPC.
  • Bietet die Möglichkeit, H2C- (HTTP/2 über bloßes TCP, keine Verschlüsselung) und HTTP/1-Verbindungen auf demselben Netzwerkport zu verarbeiten.
  • Es wurde die Möglichkeit hinzugefügt, eigene Implementierungen der connect()-Funktion zu verbinden, um das Verhalten beim Aufbau einer Netzwerkverbindung zu ändern, um beispielsweise zusätzliche Optionen für den Socket festzulegen oder Fehler beim Testen zu simulieren.
  • Bietet die Möglichkeit, Informationsantworten beim Proxying zu ignorieren, z. B. Antworten mit dem Header „Expect: 100-continue“.
  • Unterstützung für das Entpacken von gzip-komprimierten Antworten hinzugefügt.
  • Abrechnung des Backend-Status zu Überwachungszwecken implementiert.
  • Möglichkeit zur Bindung an eine Reihe lokaler Ports hinzugefügt.

Source: opennet.ru

Kommentar hinzufügen