效能量測
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%。
📐 限制這些數字的條件
Section titled “📐 限制這些數字的條件”- 主機是一台筆電。 量測在 Apple M2 搭配 OrbStack 上進行。絕對吞吐量不是容量宣稱,比值也只在這個受控負載下描述相對效能。
- 各列只在同一協定內比較。 HTTP/3 使用與其他列不同的產壓工具,因此不應跨協定比較絕對吞吐量,只能在同一列內比較伺服器之間的差異。
- 未完成的格子不是比較。 在這台主機與這套產壓工具上,Caddy 未完成反向代理的 HTTP/2 與 HTTP/3 兩列:在測試的併發程度下,上游連線的頻繁建立耗盡了容器可用的 ephemeral port。這些格子以「未完成」呈現,而不是改用不同負載量出來的數字。
- 結果依主機而異。 伺服器之間的相對位置會隨 CPU 架構、kernel、worker 數量與 TLS 實作而改變。
方法論、設定檔、產壓工具與完整結果表都放在伺服器倉庫:
原始執行證據由維護者保存在本機,刻意不對外公布。
