效能基準測試
吞吐量數字只有擺在產生它的條件旁邊才有意義。本頁提供最新一次的比較,並在旁邊列出每一項限制其解讀範圍的條件。
🧭 比較方式
Section titled “🧭 比較方式”- 版本。 量測用的 Pingclair 是候選版本
v0.2.0-rc.3的發行二進位檔,另有 nginx 1.31.6 與 Caddy 2.11.4。之後的修補版本不會重新量測。 - 主機。 一台執行 OrbStack 的 Apple M2 筆電。
- 限制。 每個伺服器都跑在限制兩顆 CPU 的容器裡,worker 數相同,payload 同為 1 KiB。
- 拓撲。 反向代理的後端跑在同一個 Docker network 上的獨立容器。
- 負載產生器。 HTTP/1.1、HTTPS/1.1 與 HTTP/2 使用原生
h2load;HTTP/3 使用同一個 Docker network 內、支援 ngtcp2 的h2load。
每個數值都是每秒請求數:三輪交錯執行、每輪 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 “📐 限制這些數字的條件”- 主機是一台筆電。 絕對吞吐量不代表容量宣稱,這些比值也只描述在這組受控負載下的相對表現。
- 只在同一列內比較。 HTTP/3 的負載產生器與其他列跑在不同環境,因此不應跨協定比較絕對吞吐量,只能在同一列內比較各伺服器。
- 未完成的列不構成比較。 在這台主機與這套 harness 上,Caddy 沒能完成反向代理的 HTTP/2 與 HTTP/3 兩列:在受測的並行數下,上游連線的反覆建立耗盡了容器可用的臨時連接埠。這兩格標為未完成,而不是改用另一種負載去量。
- 結果取決於主機。 各伺服器的相對位置會隨 CPU 架構、核心、worker 數與 TLS 實作而改變。
這些數字來自伺服器儲存庫的 benchmark harness 的一次執行結果。量測方法、一次執行必須滿足哪些規則數字才算數,以及 harness 本身,都公布在該儲存庫:
每次執行的原始紀錄留在維護者的 checkout,不公開。
