跳转到内容

性能测量

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 两行:在测试的并发度下,上游连接的频繁建立耗尽了容器可用的临时端口。这些格子以“未完成”呈现,而不是改用不同负载测出的数字。
  • 结果因主机而异。 服务器之间的相对位置会随 CPU 架构、内核、worker 数量与 TLS 实现而改变。

方法论、配置文件、压测工具与完整结果表都放在服务器仓库:

原始运行证据由维护者保存在本机,刻意不对外公布。