コンテンツにスキップ

性能測定

Pingclair は nginx と Caddy と同一ホスト上で測定しています。各候補は 2 CPU に制限したコンテナで動作し、ワーカー数と 1 KiB のペイロードも同一です。リバースプロキシのバックエンドは同じ Docker ネットワーク上の別コンテナで、負荷生成ツールはネイティブで実行します。

各値は 3 回の交互実行(各 50,000 リクエスト)の中央値です。すべてのリクエストが成功した行だけを集計しています。

シナリオ Pingclair nginx 1.31.6 Caddy 2.11.4
HTTP/1.1 静的 46,125 39,478 18,266
HTTPS/1.1 静的 40,721 31,508 19,978
HTTP/2 静的 92,369 41,972 17,424
HTTP/3 静的 56,180 55,638 22,912
HTTP/1.1 リバースプロキシ 20,856 22,584 17,117
HTTPS/1.1 リバースプロキシ 20,297 21,944 16,660
HTTP/2 リバースプロキシ 23,181 20,396 未完了
HTTP/3 リバースプロキシ 28,078 22,213 未完了

単位は 1 秒あたりのリクエスト数です。nginx と比べると、静的配信では HTTP/1.1、HTTPS/1.1、HTTP/2 で Pingclair が先行し(それぞれ 1.2 倍、1.3 倍、2.2 倍)、HTTP/3 はほぼ同等です。リバースプロキシでは HTTP/2 が 14%、HTTP/3 が 26% 先行し、HTTP/1.1 と HTTPS/1.1 は nginx に約 8% 劣っています。

  • ホストはノート PC です。 測定は Apple M2 と OrbStack 上で行いました。絶対スループットは容量の主張ではなく、比率もこの統制された負荷における相対性能を述べたものです。
  • 行の比較は同一プロトコル内に限ります。 HTTP/3 は他の行と異なる負荷生成ツールを使うため、絶対スループットをプロトコル間で比較せず、同一行内でサーバー間を比較してください。
  • 未完了のセルは比較ではありません。 このホストとこの測定系では、Caddy はリバースプロキシの HTTP/2 と HTTP/3 の行を完了できませんでした。試験した同時実行数で上流接続の生成が頻発し、コンテナが使える一時ポートを使い切ったためです。これらのセルは、別の負荷で測った数字ではなく「未完了」として記載します。
  • 結果はホストに依存します。 サーバー間の相対順位は CPU アーキテクチャ、カーネル、ワーカー数、TLS 実装によって変わります。

方法論、設定ファイル、負荷生成ツール、完全な結果表はサーバーリポジトリにあります。

生の実行証跡はメンテナーがローカルに保管しており、意図的に公開していません。