概要
zeroserve は、ユーザ空間で eBPFスクリプト を実行する高性能HTTPSサーバー。 Caddyfile互換モード を搭載し、CaddyfileをeBPF・x86_64/ARM64ネイティブコードへJITコンパイル。 io_uringイベントループ で動作し、圧倒的なスループットを実現。 Caddy や nginx とのベンチマーク比較で優れた性能を示す。 カスタムeBPFコード の呼び出しやAWS SigV4認証付きリバースプロキシも柔軟に対応。
zeroserveの特徴とベンチマーク
- ユーザ空間 で動作し、 eBPFスクリプト の実行をサポート
- Caddyfile互換モード 搭載
- Caddyfileを eBPF へJITコンパイルし、さらに x86_64/ARM64 機械語へ変換
- io_uring ベースのイベントループで高効率なI/O処理
- ベンチマーク(HTTPSリバースプロキシ、2スレッド、AMD Ryzen 7 3700X)
- zeroserve-clang: 38,948 req/s | p50 1.45ms | p99 3.91ms | RSS 30.9 MiB
- zeroserve-tcc: 36,653 req/s | p50 1.67ms | p99 4.00ms | RSS 34.2 MiB
- caddy: 12,529 req/s | p50 4.74ms | p99 13.11ms | RSS 67.4 MiB
- nginx: 37,424 req/s | p50 1.57ms | p99 4.24ms | RSS 25.7 MiB
- 公式CI での実行結果も参照可能
zeroserveの導入方法
- バイナリのダウンロードと実行例
- curl -fL -o zeroserve https://github.com/losfair/zeroserve/releases/download/v0.2.11/zeroserve-$(uname -m)-linux
- chmod +x zeroserve
- ./zeroserve --caddy /etc/caddy/Caddyfile
- curl http://127.0.0.1:8080 で動作確認
eBPFカスタムコードとCaddyfileの連携
- Turing完全なeBPF を実行可能
- Caddyfile 内から独自eBPFコードを呼び出し可能
- 例:AWS SigV4認証付きS3互換バケットへのリバースプロキシ
- io.su3.aws-sigv4.cを取得し、プラグインとして指定
- Caddyfile例:
example.com { route /s3/* { uri strip_prefix /s3 rewrite * /my-bucket{uri} # eBPFミドルウェア`io.su3.aws-sigv4.o`の`sign_request`メソッドを呼び出し zeroserve_call io.su3.aws-sigv4 sign_request { access_key_id "minioadmin" secret_access_key "minioadmin" } reverse_proxy http://127.0.0.1:9000 } }
- 例:AWS SigV4認証付きS3互換バケットへのリバースプロキシ
- 高度な認証・プロキシ処理 を柔軟に実装可能
ライセンス・著作権情報
- © 2022-2026 Heyang Zhou
- RSSフィード も利用可能