网站首页 > 开源技术 正文
背景
最近一年很多关于QUIC的文章层出,但是发现一个问题,这些文章都是在介绍QUIC或HTTP3是怎样的一个东西,以及它的优点和机制,将它夸的近乎上天了。然而有心的人估计会亲手做一些测试,就会发现这个被捧上天的东西性能居然还不如HTTP1.1,这是怎么回事呢?
最近我一直在做QUIC或者说HTTP3的相关工作,就一直在憋着写这样一篇文章,给和我当初有同样疑问的人一种变相的解答。
测试
测试很简单,分为两台机器,均在同一局域网内。服务器使用Nginx的QUIC分支版本,即nginx-quic。客户端使用h2load(支持HTTP3版本的)做基准测试工具。在服务端使用netem模块对网络状况进行操控,模拟不同的网络环境。请求无请求体,响应体为Nginx默认612字节首页文件,那么简单来看下测试结果吧:
h2load的参数如下:-t 10 -c 100 -n 1000 -m 100,即10线程、100个连接、1000个请求,每个连接可以同时处理100个请求。
HTTP版本 | 延迟 | 丢包率 | 重复率 | 包损毁率 | 结果 |
HTTP1.1 | - | - | - | - | 总耗时406.49ms, 24601.15 req/s QPS,21.30MB/s 每秒传输 |
HTTP3 | - | - | - | - | 总耗时611.90ms, 16342.59 req/s QPS,12.98MB/s 每秒传输 |
HTTP1.1 | 100ms+-10 | - | - | - | 总耗时1.90s, 5275.52 req/s QPS,4.57MB/s 每秒传输 |
HTTP3 | 100ms+-10 | - | - | - | 总耗时3.65ms, 2740.22 req/s QPS,2.18MB/s 每秒传输 |
HTTP1.1 | - | 30% | - | - | 总耗时33.64s, 297.28 req/s QPS,263.60KB/s 每秒传输 |
HTTP3 | - | 30% | - | - | 总耗时19.82s, 504.45 req/s QPS,447.31KB/s 每秒传输 |
HTTP1.1 | - | - | 70% | - | 总耗时443.55ms, 23065.39 req/s QPS,19.97MB/s 每秒传输 |
HTTP3 | - | - | 70% | - | 总耗时419.98ms, 23810.43 req/s QPS,18.92MB/s 每秒传输 |
HTTP1.1 | - | - | - | 20% | 总耗时14.46s, 691.61 req/s QPS,613.27KB/s 每秒传输 |
HTTP3 | - | - | - | 20% | 总耗时4.12s, 2424.55 req/s QPS,1.93MB/s 每秒传输 |
HTTP1.1 | 100ms+-10 | 30% | - | - | 总耗时30.64s, 326.42req/s QPS,289.44KB/s 每秒传输 |
HTTP3 | 100ms+-10 | 30% | - | - | 总耗时17.16s, 582.89 req/s QPS,474.19KB/s 每秒传输 |
HTTP1.1 | - | 30% | 70% | - | 总耗时2.03s, 4914.90 req/s QPS,4.26MB/s 每秒传输 |
HTTP3 | - | 30% | 70% | - | 总耗时3.06s, 3264.89 req/s QPS,2.59MB/s 每秒传输 |
HTTP1.1 | - | 30% | - | 20% | 慢到没结果... |
HTTP3 | - | 30% | - | 20% | 总耗时15.09s, 662.75req/s QPS,539.16KB/s 每秒传输 |
在这份测试结果中我给出的都是典型值,当然我也对这些值都做过大小调整看结果。从这份结果我们可以看出如下结论:
- 单独提高延迟并不会出现HTTP3性能优于HTTP1.1的情况。
- 丢包率的增加会使得HTTP3对HTTP1.1的性能优势明显增加。
- 单独提升包重复率HTTP3对HTTP1.1的性能仅有微弱的优势。
- 单独提升包损毁率会明显提升HTTP3对HTTP1.1的性能优势。
- 延迟与其他因素同时出现不会对整体结果造成更大的影响。
- 包重复率与损毁率(或丢包率)是一组对立项,丢包或损毁导致可用包减少,但重复率又填补了这一损失,导致结果倾向HTTP1.1更优。
从上述结论中我们可以看到,并非任何时候HTTP3都优于HTTP1.1,但对弱网高丢包率、包损的情况下,QUIC或者说HTTP3的优势就非常明显了,这得益于其FEC机制和连接复用机制。然而生活中,弱网的环境其实非常多,例如地铁换站、电梯、部分楼宇内、以及一些网络覆盖不全面的城镇等等。因此QUIC更多的是一个对整体网络的兜底策略。
因此,如果使用nginx-quic的默认配置将所有的请求都升为HTTP3版本是不明智的,因为常规情况下HTTP1.1的性能优势是不可视而不见的。这也就引入了下一小节的组件。
组件
由上面的结论,我们发现并非对每一个请求都升级是一个明智之举,因此就有了这个Nginx模块对版本升级进行自动化控制——ngx_http_autoquic_module(可以在Github上搜索到)。
这个模块会根据TCP的网络状况来决定是否需要将HTTP版本升至HTTP3版本。而根据QUIC的统计情况来判断是否需要降级至HTTP1.1版本。由于降级并不像升级那样平滑,因此对降级增加了开关,让使用者可以选择是否允许降级。
目前对于浏览器,可以很好地支持升降级。但对于众多客户端而言,升降级与否还要看客户端所使用的HTTP库的处理逻辑。
感谢阅读,期待诸位的评论。
- 上一篇: 网宿QUIC:弱网环境下高性能传输的最佳方案
- 下一篇: HTTP/3和QUIC将带来重大机遇和挑战
猜你喜欢
- 2024-09-28 QUIC助力Snapchat提升用户体验(snapchat help)
- 2024-09-28 quic-tun:借助 QUIC 打造一个安全且快速的隧道-用于优化 TCP 传输
- 2024-09-28 golang-quic(golang开发工程师是做什么的)
- 2024-09-28 IETF正式颁布HTTP/3 RFC文档:QUIC映射或加速网络转型
- 2024-09-28 Chrome Canary已整合支持实验性的QUIC与HTTP/3协议
- 2024-09-28 详解:什么是HTTP/3 和 QUIC 协议(can通讯协议详解)
- 2024-09-28 深入解析QUIC协议(协议解析程序)
- 2024-09-25 「专题速递」RTC云网端联合优化、QUIC协议的能力和实践
- 2024-09-25 QuicRun Fusion SE |更亲民的FOC一体动力系统
- 2024-09-25 HTTP/3和QUIC将带来重大机遇和挑战
你 发表评论:
欢迎- 03-26业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
- 03-2615个最好的性能测试工具(软件测试工程师必备)
- 03-26软件测试工程师必备技巧!(软件测试工程师入门教程)
- 03-26UE4基础知识总结(七)(ue4入门)
- 03-26Portkeys推出新款HDMI播放器:5.5英寸FHD屏幕,支持4K输入/输出
- 03-26数字时代的纯粹,HiFiMan HM-901S 播放器体验
- 03-26CBN丨Double 11 sales shows resilience in China’s consumption
- 03-26AKG K812简单听感(akgk812pro评测)
- 最近发表
-
- 业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板
- 15个最好的性能测试工具(软件测试工程师必备)
- 软件测试工程师必备技巧!(软件测试工程师入门教程)
- UE4基础知识总结(七)(ue4入门)
- Portkeys推出新款HDMI播放器:5.5英寸FHD屏幕,支持4K输入/输出
- 数字时代的纯粹,HiFiMan HM-901S 播放器体验
- CBN丨Double 11 sales shows resilience in China’s consumption
- AKG K812简单听感(akgk812pro评测)
- 盘点索尼Walkman发展史,哪台播放器让你印象深刻
- LUXMAN力仕 DA-07X 解码器#发烧hifi
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)