HTTP3/QUIC 性能测试与配套组件

在这里插入图片描述

背景

最近一年很多关于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.1100ms±10---总耗时1.90s, 5275.52 req/s QPS,4.57MB/s 每秒传输
HTTP3100ms±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.1100ms±1030%--总耗时30.64s, 326.42req/s QPS,289.44KB/s 每秒传输
HTTP3100ms±1030%--总耗时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 每秒传输

在这份测试结果中我给出的都是典型值,当然我也对这些值都做过大小调整看结果。从这份结果我们可以看出如下结论:

  1. 单独提高延迟并不会出现HTTP3性能优于HTTP1.1的情况。
  2. 丢包率的增加会使得HTTP3对HTTP1.1的性能优势明显增加。
  3. 单独提升包重复率HTTP3对HTTP1.1的性能仅有微弱的优势。
  4. 单独提升包损毁率会明显提升HTTP3对HTTP1.1的性能优势。
  5. 延迟与其他因素同时出现不会对整体结果造成更大的影响。
  6. 包重复率与损毁率(或丢包率)是一组对立项,丢包或损毁导致可用包减少,但重复率又填补了这一损失,导致结果倾向HTTP1.1更优。

从上述结论中我们可以看到,并非任何时候HTTP3都优于HTTP1.1,但对弱网高丢包率、包损的情况下,QUIC或者说HTTP3的优势就非常明显了,这得益于其FEC机制和连接复用机制。然而生活中,弱网的环境其实非常多,例如地铁换站、电梯、部分楼宇内、以及一些网络覆盖不全面的城镇等等。因此QUIC更多的是一个对整体网络的兜底策略。

因此,如果使用nginx-quic的默认配置将所有的请求都升为HTTP3版本是不明智的,因为常规情况下HTTP1.1的性能优势是不可视而不见的。这也就引入了下一小节的组件。

组件

由上面的结论,我们发现并非对每一个请求都升级是一个明智之举,因此就有了这个Nginx模块对版本升级进行自动化控制——ngx_http_autoquic_module

这个模块会根据TCP的网络状况来决定是否需要将HTTP版本升至HTTP3版本。而根据QUIC的统计情况来判断是否需要降级至HTTP1.1版本。由于降级并不像升级那样平滑,因此对降级增加了开关,让使用者可以选择是否允许降级。

目前对于浏览器,可以很好地支持升降级。但对于众多客户端而言,升降级与否还要看客户端所使用的HTTP库的处理逻辑。

感谢阅读,期待诸位的评论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/323588.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript高级程序设计读书记录(四):基本引用类型Date,RegExp,原始值包装类型,Global对象 eval(),Math

引用值(或者对象)是某个特定引用类型的实例。在 ECMAScript 中,引用类型是把数据和功能组织到一起的结构,经常被人错误地称作“类”。虽然从技术上讲 JavaScript 是一门面向对象语言,但ECMAScript 缺少传统的面向对象编…

【揭秘】单例模式DCL导致无法访问对象?

前两天,在审查团队成员的代码时,我发现了一个错误的单例模式写法。 在Java中,单例模式是一种非常常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取该实例,但是,如果不正…

「小明赠书活动」2024第二期《实战AI大模型》

⭐️ 赠书 - 《实战AI大模型》 从基本概念到实践技巧的,全方位解读AI大模型,手把手教你训练和部署BERT、GPT-3、ChatGPT! 人工智能领域资深专家尤洋老师倾力打造,获得了 李开复、周鸿祎、颜水成 三位大咖鼎力推荐,一经…

园区网典型组网架构

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 当您在校园学习,单位工作,商场购物时,您可能会注意到,这些场所都被网络覆盖。通过网络,您可…

为什么我的flink upsert-kafka 没有数据输出

我写了测试数据到kafka 为什么upsert-kafka 没有数据打印? 测试代码 package com.yy.state.OperatorStateTTLimport org.apache.flink.configuration.{Configuration, RestOptions} import org.apache.flink.runtime.state.filesystem.FsStateBackend import org.apache.flin…

芯课堂 | LVGL基础知识(三)

概述 LVGL进度条对象上有一个背景和一个指示器。指示器的宽度根据进度条的当前值进行设置。 如果对象的宽度小于其高度,则可以创建垂直进度条。 不仅可以设置进度条的结束值,还可以设置进度条的起始值,从而改变指示器的起始位置。 LVGL进度…

【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis

目录 Stable View Synthesis摘要引言 Enhanced Stable View Synthesis 从Mip-NeRF360的对比实验中找到的两篇文献,使用了卷积神经网络进行渲染和新视角合成,特此记录一下 ToDo Stable View Synthesis paper:https://readpaper.com/pdf-ann…

每周一算法:倍增法求最近公共祖先(LCA)

最近公共祖先 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 题目链接 祖孙询问 题目描述 给定一棵包含 n n n 个节点的有根无向树,节点…

华为bgp之多级RR及团体属性、正则表达式多种应用案例

1、实现总部和分部的oa、财务网段互通 2、分部之间oa也能互通 3、分部之间不能互通财务 主要用到bgp自定义团体属性、一级二级RR配置、bgp正则表达式匹配规则 R1 router id 1.1.1.1 //配全局地址池,又可以给ospf用也可以给bgp用 interface GigabitEthernet0/0/0 …

热烈庆祝西安大秦时代网络科技有限公司官网上线了!

热烈庆祝西安大秦时代网络科技有限公司官网上线了! 热烈庆祝西安大秦时代网络科技有限公司官网上线了! 热烈庆祝西安大秦时代网络科技有限公司官网上线了!

网上申请的联通流量卡需要上传身份证信息,这是怎么回事?

最近评论区发现小伙伴们有很多疑问,也有一些很有代表性的问题,今天呢,来给大家解读一下。 首先针对咱们联通卡申请提交资料之后还要上传身份证和自拍照的问题,为什么要传照片?这位朋友表达了强烈的不满,小编…

git 回退版本

git 回退版本 1.查看记录 git log 2.如何回退 git reset --hard commit_id commit_id为上面加深的id 3.强制提交 git push origin HEAD --force