# 📊 效能基準測試 吞吐量數字只有擺在產生它的條件旁邊才有意義。本頁提供最新一次的比較,並在旁邊列出每一項限制其解讀範圍的條件。 ## 🧭 比較方式 - **版本。** 量測用的 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%。 ## 📐 限制這些數字的條件 - **主機是一台筆電。** 絕對吞吐量不代表容量宣稱,這些比值也只描述在這組受控負載下的相對表現。 - **只在同一列內比較。** HTTP/3 的負載產生器與其他列跑在不同環境,因此不應跨協定比較絕對吞吐量,只能在同一列內比較各伺服器。 - **未完成的列不構成比較。** 在這台主機與這套 harness 上,Caddy 沒能完成反向代理的 HTTP/2 與 HTTP/3 兩列:在受測的並行數下,上游連線的反覆建立耗盡了容器可用的臨時連接埠。這兩格標為未完成,而不是改用另一種負載去量。 - **結果取決於主機。** 各伺服器的相對位置會隨 CPU 架構、核心、worker 數與 TLS 實作而改變。 ## 🧾 來源 這些數字來自伺服器儲存庫的 benchmark harness 的一次執行結果。量測方法、一次執行必須滿足哪些規則數字才算數,以及 harness 本身,都公布在該儲存庫: - [基準測試方法](https://github.com/dorianverlaine/pingclair/blob/main/benchmarks/README.md) 每次執行的原始紀錄留在維護者的 checkout,不公開。