跳到內容

效能量測

Pingclair 與 nginx、Caddy 在同一台主機上量測:每個候選者都在限制為兩顆 CPU 的容器中執行,使用相同的 worker 數量與相同的 1 KiB 內容。反向代理的後端在自己的容器中、位於同一個 Docker 網路上,而產壓工具則原生執行。

每個數值是三輪交錯、每輪 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 未完成

單位是每秒請求數。與 nginx 相比,Pingclair 在 HTTP/1.1、HTTPS/1.1 與 HTTP/2 的靜態列領先(分別為 1.2 倍、1.3 倍與 2.2 倍),HTTP/3 靜態則大致持平。在反向代理工作負載上,HTTP/2 領先 14%、HTTP/3 領先 26%,而 HTTP/1.1 與 HTTPS/1.1 仍落後 nginx 約 8%。

  • 主機是一台筆電。 量測在 Apple M2 搭配 OrbStack 上進行。絕對吞吐量不是容量宣稱,比值也只在這個受控負載下描述相對效能。
  • 各列只在同一協定內比較。 HTTP/3 使用與其他列不同的產壓工具,因此不應跨協定比較絕對吞吐量,只能在同一列內比較伺服器之間的差異。
  • 未完成的格子不是比較。 在這台主機與這套產壓工具上,Caddy 未完成反向代理的 HTTP/2 與 HTTP/3 兩列:在測試的併發程度下,上游連線的頻繁建立耗盡了容器可用的 ephemeral port。這些格子以「未完成」呈現,而不是改用不同負載量出來的數字。
  • 結果依主機而異。 伺服器之間的相對位置會隨 CPU 架構、kernel、worker 數量與 TLS 實作而改變。

方法論、設定檔、產壓工具與完整結果表都放在伺服器倉庫:

原始執行證據由維護者保存在本機,刻意不對外公布。