HTTP/1.1 Pipelining 性能测试报告
本文通过使用 wrk
工具对开启和关闭 HTTP/1.1 pipeline 时服务器的性能进行对比测试。
测试环境
- 工具:
wrk
- 测试地址:
http://127.0.0.1:8080/plaintext
- 测试时长: 60 秒
- 线程数: 4
- 并发连接数: 256
- 超时时间: 8 秒
开启 Pipeline 测试
脚本 (pipeline.lua
)
init = function(args)
local r = {}
local depth = tonumber(args[1]) or 1
for i=1, depth do
r[i] = wrk.format()
end
req = table.concat(r)
end
request = function()
return req
end
执行命令
wrk \
-H "Host: 127.0.0.1" \
-H "Accept: text/plain" \
-H "Connection: keep-alive" \
--latency \
-d 60s \
-c 256 \
--timeout 8 \
-t 4 \
http://127.0.0.1:8080/plaintext \
-s pipeline.lua \
-- 100
测试结果
Running 1m test @ http://127.0.0.1:8080/plaintext
4 threads and 256 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 67.69ms 78.02ms 1.36s 57.96%
Req/Sec 55.53k 10.64k 68.91k 89.78%
Latency Distribution
50% 116.98ms
75% 0.00us
90% 0.00us
99% 0.00us
13237723 requests in 1.00m, 1.82GB read
Requests/sec: 220306.50
Transfer/sec: 31.09MB
- 每秒请求数: 220,306.50
- 数据传输速率: 31.09 MB/sec
关闭 Pipeline 测试
执行命令
wrk \
-H "Host: 127.0.0.1" \
-H "Accept: text/plain" \
-H "Connection: keep-alive" \
--latency \
-d 60s \
-c 256 \
-t 4 \
http://127.0.0.1:8080/plaintext
测试结果
Running 1m test @ http://127.0.0.1:8080/plaintext
4 threads and 256 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.50ms 2.66ms 63.27ms 90.78%
Req/Sec 16.26k 6.97k 50.24k 73.52%
Latency Distribution
50% 1.78ms
75% 3.01ms
90% 4.96ms
99% 13.65ms
3874685 requests in 1.00m, 461.90MB read
Requests/sec: 64493.99
Transfer/sec: 7.69MB
- 每秒请求数: 64,493.99
- 数据传输速率: 7.69 MB/sec
测试结论
通过上述对比可以看出:
- 在开启 HTTP/1.1 pipeline 后,请求的吞吐量明显提升。
- Pipeline 模式下,每秒请求数提升至 220,306.50,比关闭 Pipeline 模式下的 64,493.99 高出约 3.4 倍。
- 数据传输速率也显著提高,从 7.69 MB/sec 增加到 31.09 MB/sec。
因此,在服务器端能够稳定支持 HTTP/1.1 pipeline 时,开启 pipeline 可显著提高并发处理性能,增强系统吞吐能力。