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.mzph.cn/news/643362.shtml

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

相关文章

宝塔+nextcloud+docker+Onlyoffice 全开启https

折腾了我三天的经验分享 1.宝塔创建网站 nextcloud版本为28.0.1 php8.2 ,导入nextcloud绑定域名对应的证书 ,不用创建mysql 因为nextcloud 要求是mariadb:10.7 宝塔里没有,就用docker安装一个 端口设置为3307 将数据库文件映射出来/ww…

Leetcode刷题(二十八)

找出字符串中第一个匹配项的下标(Easy) 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返…

基于springboot+vue的“衣依”服装销售平台系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

maven详细介绍

1.简介 Maven是一个基于项目对象模型(POM)的软件项目管理工具,主要用于Java项目的构建、依赖管理和项目信息管理。通过一小段描述信息,Maven能够管理项目的构建、报告和文档等各个环节。它提供了一种标准化的构建方式&#xff0c…

VSCode Debug 参数设置说明

如果想在vscode中debug一个项目,比如python3 run.py --args 这个时候你需要着重关注几个参数,参数用两个双引号分开,不能有空格。 cwd :运行代码的基础目录env: 设置环境变量 PYTHONPATH: 设置项目用到的模块搜索路径&#xff…

361. 观光奶牛(小数二分,spfa判断正环,01分数规划)

361. 观光奶牛 - AcWing题库 给定一张 L 个点、P 条边的有向图,每个点都有一个权值 f[i],每条边都有一个权值 t[i]。 求图中的一个环,使“环上各点的权值之和”除以“环上各边的权值之和”最大。 输出这个最大值。 注意:数据保…

SpringBoot 整合RabbitMQ 之延迟队列实验

在Spring Boot中整合RabbitMQ并实现延迟队列的功能&#xff0c;可以按照以下步骤进行&#xff1a; 添加依赖&#xff1a;在pom.xml文件中添加RabbitMQ和Spring AMQP相关的依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId&g…

在PyCharm中安装GitHub Copilot插件,login之后报出如下错误:

Sign in failed. Reason: Request signInInitiate failed with message: connect ECONNABORTED 20.205.243.166:443, request id: 7, error code: -32603 前提&#xff1a; 设置网址&#xff1a;https://github.com/settings/copilot&#xff0c;已设置为允许 或者&#xff1…

速盾:服务器接入CDN后上传图片失败的解决方案

本文将探讨当服务器接入CDN后&#xff0c;上传图片失败的常见原因&#xff0c;并提供解决方案以解决这些问题。同时&#xff0c;我们还将附上一些相关的问题和解答&#xff0c;让读者更好地理解和应对这些挑战。 随着互联网的持续发展&#xff0c;网站的性能和速度对于用户体验…

Java基础面试题-4day

异常 Exception和Error有什么区别&#xff1f; Exception类和Error类有一个共同的父类Throwable类 Exception类为异常类&#xff0c;可以使用catch 捕获&#xff0c;捕获之后&#xff0c;Exception类又分为Checked Exception和 Uncheckend Exception Checked Exception是捕获…

工业智能网关储能物联网应用实现能源的高效利用及远程管理

储能电力物联网是指利用物联网技术和储能技术相结合&#xff0c;实现对电力系统中各种储能设备的智能管理和优化控制。随着可再生能源的不断发展和应用&#xff0c;电力系统面临着越来越大的电力调度和储能需求而储能电力物联网的出现可以有效解决这一问题&#xff0c;提高电力…

Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))

目录 AOP概念AOP底层原理AOP(JDK动态代理)使用 JDK 动态代理&#xff0c;使用 Proxy 类里面的方法创建代理对象**编写** **JDK** 动态代理代码 AOP(术语)AOP操作&#xff08;准备工作&#xff09;**AOP** **操作&#xff08;**AspectJ注解)**AOP** **操作&#xff08;**AspectJ…

oracle data block , extent 和segment区别

data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时&#xff0c;连续的data block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment. Data block、extent和segment是数据库中不同层次的数据存储和管理单位&#xff0c;它…

Vue 点击按钮复制内容到系统剪贴板

Vue 点击按钮复制内容到系统剪贴板 使用navigator将内容添加到系统剪贴板 <template><div><button click"copy">点击复制</button></div> </template><script>export default {name: CopyTest,data() {return {copyCont…

前端开发WebStorm

WebStorm是一款功能强大的JavaScript集成开发环境&#xff0c;凭借智能代码补全、实时分析和代码重构、集成版本控制、强大的调试和测试工具、实时预览和集成前端工具以及自定义配置和插件支持等功能&#xff0c;成为开发者首选的利器。 前端开发WebStorm WebStorm是一款功能强…

Git学习 -- 分支合并、版本修改相关

目录 learn GIT Learn Git Branching merge和rebase的使用 基础命令 版本回退 工作区和暂存区 管理修改 撤销修改 删除修改 learn GIT Learn Git Branching 这是Gitee上的Git学习教程 Learn Git Branching Git Rebase Learn Git Branching 最终的实操 merge和rebase的…

杰理方案——WIFI连接物联网配置阿里云操作步骤

demo——DevKitBoard 注意&#xff1a;最好用这个Demo,其它Demo可能会有莫名其妙的错误问题。 wifi配置 需要在app_config.h文件中定义USE_DEMO_WIFI_TEST&#xff0c;工程会在wifi_demo_task.c文件中自动启动wifi相关的任务&#xff0c; 我们将工程配置为连接外部网络STA模式…

编写一个JavaScript函数,实时显示当前时间格式为—年—月—日 时:分:秒

在JavaScript中&#xff0c;你可以使用Date对象和它的方法来获取和格式化当前时间。下面是一个函数&#xff0c;它会实时更新并显示当前时间&#xff0c;格式为"年-月-日 时:分:秒"。 javascript function displayCurrentTime() { // 获取当前时间 var …

基于YOLOv8的摔倒行为检测系统(Python源码+Pyqt6界面+数据集)

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文主要内容:通过实战基于YOLOv8的摔倒行为检测算法&#xff0c;从数据集制作到模型训练&#xff0c;最后设计成为检测UI界面 人体行为分析AI算法&#xff0c;是一种利用人工智能技术对人体行为进行检测、跟踪和分析的方法。通过计算…

研发无人水下全智能化炸弹系统

研发无人水下全智能化炸弹系统具有重要的意义和价值。下面是一些原因&#xff1a; 提高安全性&#xff1a;无人水下全智能化炸弹系统可以代替人类执行危险和高风险任务&#xff0c;从而减少人员伤亡和事故发生的可能性。这些系统可以在不利环境下执行任务&#xff0c;如深海潜水…