Cloudflare社は、非同期QUICおよびHTTP/3用Rustライブラリtokio‑quicheをオープンソース化したと発表した。これは、実戦で検証済みのquiche実装をTokioランタイムと組み合わせ高性能なQUICアプリケーションの開発を簡素化するためのものだ。このライブラリは、エッジサービス、Oxy HTTPプロキシ、MASQUEベースのトンネルを支える内部用途で利用されてきたもので、WARPクライアントではWireGuardベースのトンネルを置き換えている。
tokio‑quicheは現在、crates.io上でオープンソースのクレートとして提供されており、ソースコードはquicheリポジトリでホストされている。このライブラリは、sans‑ioなQUICおよびHTTP/3実装であるquicheとTokioの非同期ランタイムを統合し、Apple iCloud Private Relay、次世代のOxyベースプロキシ、WARPのMASQUEクライアントといったシステムで、毎秒数百万件のHTTP/3リクエストを処理するために洗練され利用されてきた統合レイヤーを提供する。
ライブラリアーキテクチャ図。出典: Cloudflare blog
元来のquicheライブラリは、さまざまな環境に組み込める低レベルなsans‑io QUICおよびHTTP/3実装として設計されていたが、実際のアプリケーションに組み込むには、UDP I/O、コネクション管理、イベントループを手作業で実装する必要があった。tokio‑quicheは、Tokioとの非同期統合を提供することでこの課題に対処する。UDPソケットの管理、データグラムのコネクションへのルーティング、quicheのステートマシンの駆動を担い、開発者がトランスポート層の実装ではなくアプリケーションロジックに集中できる。
tokio‑quiche内部データフロー。出典: Cloudflare blog
内部的にtokio‑quicheはアクターモデルを採用している。受信パケットルーターと、コネクションごとのIOワーカーアクターが、ソケットとquicheの間でパケットを移動させ、チャネルを介して状態と通信をカプセル化する。その上で本ライブラリは、QUIC上でのアプリケーションプロトコル実行を抽象化するApplicationOverQuicトレイトを公開している。さらに、サーバーおよびクライアントの両バリアントを持つH3Driver実装を同梱しており、quicheの生のHTTP/3イベントを、HTTP/3サーバーやクライアントの構築に適した高レベルの非同期ストリームへと変換する。
Cloudflare社によれば、tokio‑quicheはHTTP/3プロキシやMASQUEベースのトンネルなどの内部ワークロードを支えており、WARPではWireGuardトンネルをQUICベースのトンネルに実質的に置き換えている。tokio‑quicheを公開することで、Cloudflare社はRustエコシステムにおけるHTTP/3およびQUICの採用を後押しし、DNS‑over‑QUIC、カスタムVPN、HTTPサーバーといったユースケースを可能にするとともに、自社のエッジサービスで使用しているものと同一のスタックに外部統合を整合させている。
メンテナーは、tokio‑quicheが完全なHTTP/3フレームワークではなく、基盤的なビルディングブロックであることを強調している。本ライブラリは低レベルのプロトコル機能と、クライアントおよびサーバーのイベントループ例を提供するにとどまり、現在OxyやWARPを支えている、より高レベルなHTTPクライアントおよびサーバー抽象化については、今後オープンソース化する計画である。またCloudflare社は、Tokioを用いたアクターパターン、UDP GROやGSO、tokio‑quiche上で毎秒数百万リクエストを処理する新しいQUICベースサービスなどを扱う今後の投稿についても示唆している。