Cloudflare verfügt über Open-Supply-Tokio-Quiche, eine asynchrone QUIC- und HTTP/3-Rust-Bibliothek, die ihre kampferprobte Quiche-Implementierung mit der Tokio-Laufzeitumgebung verbindet. Die Bibliothek wurde in Produktionssystemen wie Apple iCloud Personal Relay, Oxy-basierten Proxys der nächsten Era und dem MASQUE-Shopper von WARP verfeinert, wo sie Millionen von HTTP/3-Anfragen professional Sekunde mit geringer Latenz und hohem Durchsatz verarbeitet. tokio-quiche richtet sich an Rust-Groups, die QUIC und HTTP/3 wollen, ohne ihren eigenen UDP- und Occasion-Loop-Integrationscode zu schreiben.

Von Quiche bis Tokio-Quiche

quiche ist die Open-Supply-QUIC- und HTTP/3-Implementierung von Cloudflare, die in Rust geschrieben und als Low-Degree-Sans-Io-Bibliothek konzipiert ist. Es implementiert die QUIC-Transportzustandsmaschine, einschließlich Verbindungsaufbau, Flusskontrolle und Stream-Multiplexing, ohne dabei Annahmen darüber zu treffen, wie Anwendungen E/A durchführen. Um Quiche direkt nutzen zu können, müssen Integratoren UDP-Sockets öffnen, Datagramme senden und empfangen, Timer verwalten und alle Paketdaten in der richtigen Reihenfolge in Quiche einspeisen. Dieses Design bietet Flexibilität, macht die Integration jedoch fehleranfällig und zeitaufwändig.

tokio-quiche verpackt diese Integrationsarbeit in einer wiederverwendbaren Kiste. Es kombiniert die Sans-IO-QUIC- oder HTTP/3-Implementierung von Quiche mit der asynchronen Tokio-Laufzeit und stellt eine API bereit, die bereits UDP-Sockets, Paketrouting und Aufrufe in die Quiche-Zustandsmaschine verwaltet.

Schauspielerbasierte Architektur auf Tokio

Intern verwendet Tokyo-Quiche zusätzlich zu Tokio ein Schauspielermodell. Akteure sind kleine Aufgaben mit lokalem Standing, die durch Nachrichtenübertragung über Kanäle kommunizieren, was intestine zu Sans-IO-Protokollimplementierungen passt, die den internen Standing besitzen und mit Nachrichten wie Puffern arbeiten.

Der Hauptakteur ist der IO-Loop-Akteur, der Pakete zwischen Quiche und dem UDP-Socket verschiebt. Einer der wichtigsten Nachrichtentypen ist eine Incoming Struktur, die empfangene UDP-Pakete beschreibt. Die asynchrone Integration folgt einem festen Muster: Die E/A-Schleife wartet auf neue Nachrichten, übersetzt sie in Eingaben für Quiche, treibt die QUIC-Zustandsmaschine weiter und übersetzt dann Ausgaben in ausgehende Pakete, die zurück in den Socket geschrieben werden.

Für jeden UDP-Socket erzeugt tokio-quiche zwei wichtige Aufgaben. InboundPacketRouter besitzt die empfangende Hälfte des Sockets und leitet eingehende Datagramme nach Zielverbindungs-ID an die einzelnen Verbindungskanäle weiter. IoWorker ist die E/A-Schleife professional Verbindung und steuert eine einzelne Quiche ConnectionVerschachtelung von Quiche-Aufrufen mit Aufrufen einer anwendungsspezifischen Logik, die durch implementiert wird ApplicationOverQuic. Dieses Design kapselt den Verbindungsstatus innerhalb jedes Akteurs und hält die QUIC-Verarbeitung vom Protokollcode höherer Ebene isoliert.

ApplicationOverQuic und H3Driver

QUIC ist ein Transportprotokoll und kann mehrere Anwendungsprotokolle übertragen. HTTP/3, DNS over QUIC und Media over QUIC sind Beispiele, die von den IETF-Spezifikationen abgedeckt werden. Um die Kopplung von Tokio-Quiche an ein einziges Protokoll zu vermeiden, stellt das Cloudflare-Crew ein Protokoll bereit ApplicationOverQuic Eigenschaft. Das Merkmal abstrahiert über Quiche-Methoden und die zugrunde liegende E/A und präsentiert Ereignisse und Hooks auf höherer Ebene für die Anwendung, die das Protokoll implementiert. Beispielsweise verwendet der HTTP/3-Debug- und Testclient h3i eine Nicht-HTTP/3-Implementierung von ApplicationOverQuic.

Zusätzlich zu dieser Eigenschaft liefert tokio-quiche eine dedizierte HTTP/3-fokussierte Implementierung mit dem Namen H3Driver. H3Driver verbindet das HTTP/3-Modul von Quiche mit dem E/A-Schleifenakteur und konvertiert rohe HTTP/3-Ereignisse in Ereignisse höherer Ebene mit asynchronen Physique-Streams, die für Anwendungscode geeignet sind. H3Driver ist generisch und entlarvt ServerH3Driver Und ClientH3Driver Varianten, die zusätzlich zum Kerntreiber serverseitiges und clientseitiges Verhalten hinzufügen. Diese Komponenten stellen die Bausteine ​​für HTTP/3-Server und -Shoppers bereit, die Implementierungsmuster mit der internen Infrastruktur von Cloudflare teilen.

Produktionsnutzung und Roadmap

tokio-quiche wurde vor seiner Veröffentlichung mehrere Jahre lang in Cloudflare verwendet. Es unterstützt Proxy B in Apple iCloud Personal Relay, Oxy-basierte HTTP/3-Server und den WARP MASQUE-Shopper sowie die asynchrone Model von h3i. Im WARP-Shopper ersetzen MASQUE-basierte Tunnel, die auf tokio-quiche basieren, frühere WireGuard-basierte Tunnel durch QUIC-basierte Tunnel. Diese Systeme laufen im Cloudflare-Edge-Maßstab und zeigen, dass die Integration Millionen von HTTP/3-Anfragen professional Sekunde in der Produktion verarbeiten kann.

Cloudflare positioniert tokio-quiche als Grundlage und nicht als vollständiges HTTP/3-Framework. Die Bibliothek stellt Low-Degree-Protokollfunktionen und Beispiel-Shopper- und Server-Ereignisschleifen zur Verfügung und lässt Raum für Projekte auf höherer Ebene, um eigens entwickelte HTTP-Server, DNS über QUIC-Shoppers, MASQUE-basierte VPNs und andere QUIC-Anwendungen darüber zu implementieren. Mit der Veröffentlichung der Kiste möchte Cloudflare die Hürde für Rust-Groups bei der Einführung von QUIC, HTTP/3 und MASQUE senken und externe Integrationen an demselben Transport-Stack ausrichten, der in seinen Edge-Diensten verwendet wird.

Wichtige Erkenntnisse

  • tokio-quiche = Quiche + Tokio: tokio-quiche ist eine asynchrone Rust-Bibliothek, die Cloudflares sans-io QUIC und HTTP/3-Implementierung, quiche, mit der Tokio-Laufzeitumgebung integriert, sodass Entwickler UDP- und Occasion-Loop-Installationen nicht von Hand schreiben müssen.
  • Akteurbasierte Architektur für QUIC-Verbindungen: Die Bibliothek verwendet ein Schauspielermodell auf Tokio, mit einem InboundPacketRouter das UDP-Datagramme nach Verbindungs-ID weiterleitet und an IoWorker das treibt eine einzelne Quiche an Connection professional Aufgabe, wobei der Transportstatus isoliert und zusammensetzbar bleibt.
  • ApplicationOverQuic-Abstraktion: Die Protokolllogik wird durch die getrennt ApplicationOverQuic Merkmal, das über Quiche- und IO-Particulars abstrahiert, sodass verschiedene QUIC-basierte Protokolle wie HTTP/3, DNS über QUIC oder benutzerdefinierte Protokolle auf demselben Transportkern implementiert werden können.
  • HTTP/3 über H3Driver, ServerH3Driver und ClientH3Driver: Tokio-Quiche-Schiffe H3Driver Plus ServerH3Driver Und ClientH3Driver Varianten, die das HTTP/3-Modul von Quiche mit asynchronem Rust-Code verbinden und HTTP/3-Streams und -Bodys auf eine Weise verfügbar machen, die zu typischen Tokio-basierten Diensten passt.

Schauen Sie sich das an Technische Particulars. Sie können uns auch gerne weiter folgen Twitter und vergessen Sie nicht, bei uns mitzumachen 100.000+ ML SubReddit und Abonnieren Unser E-newsletter. Warten! Bist du im Telegram? Jetzt können Sie uns auch per Telegram kontaktieren.


Michal Sutter ist ein Information-Science-Experte mit einem Grasp of Science in Information Science von der Universität Padua. Mit einer soliden Grundlage in statistischer Analyse, maschinellem Lernen und Datentechnik ist Michal hervorragend darin, komplexe Datensätze in umsetzbare Erkenntnisse umzuwandeln.

Von admin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert