性能测量
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 两行:在测试的并发度下,上游连接的频繁建立耗尽了容器可用的临时端口。这些格子以“未完成”呈现,而不是改用不同负载测出的数字。
- 结果因主机而异。 服务器之间的相对位置会随 CPU 架构、内核、worker 数量与 TLS 实现而改变。
方法论、配置文件、压测工具与完整结果表都放在服务器仓库:
原始运行证据由维护者保存在本机,刻意不对外公布。
