原文链接:https://www.smashingmagazine.com/2021/08/http3-performance-improvements-part2/ 作者亲自操刀的系列文章,英文的,英文水平不错的同学请移步,毕竟我的英文水平比较low,可能翻译的不到位

  • 第1部分: HTTP/3历史记录和核心概念
  • 第2部分: HTTP/3性能特性
  • 第3部分: 实用 HTTP/3部署选项

摘要

经过近五年的开发,新的 HTTP/3协议已接近最终形式。让我们仔细看看部署和测试 HTTP/3所涉及的挑战,以及如何以及是否也应该更改网站和资源。

开篇

您好,欢迎来到这个由三部分组成的系列文章的最后一部分,内容是关于新的 HTTP/3和 QUIC 协议的!如果在前两部分(HTTP/3历史记录和核心概念以及 HTTP/3性能特性)之后,您确信开始使用新协议是一个好主意(您应该这样做!),然后这最后一块包括所有你需要知道的开始!

首先,我们将讨论需要对页面和资源进行哪些更改才能最佳地使用新协议(这是容易的部分)。接下来,我们将研究如何设置服务器和客户端(这是困难的部分,除非您使用的是内容传递网路(CDN))。最后,我们将看到可以使用哪些工具来评估新协议的性能影响(这几乎是不可能的部分,至少目前是这样)。

  • 第1部分: HTTP/3历史记录和核心概念:本文针对 HTTP/3和一般协议的新手,主要讨论基础知识
  • 第2部分: HTTP/3性能特性 :这一个更深入和技术性。人们谁已经知道的基本知识可以从这里开始
  • 第3部分: 实用 HTTP/3部署选项:本系列的第三篇文章解释了自己部署和测试 HTTP/3所涉及的挑战。它详细说明了如何以及是否应该更改您的网页和资源

页面和资源的更改

让我们从一些好消息开始: 如果您已经使用 HTTP/2,那么在移动到 HTTP/3时,您可能不需要对页面或资源做任何更改!.这是因为,正如我们在第1部分和第2部分中所解释的,HTTP/3实际上更像 HTTP/2-over-QUIC,两个版本的高级特性保持不变。因此,对 HTTP/2所做的任何更改或优化仍将适用于 HTTP/3,反之亦然。

然而,如果您仍然使用 HTTP/1.1,或者您忘记了转换到 HTTP/2,或者您实际上从未为 HTTP/2做过调整,那么您可能想知道这些更改是什么以及为什么需要它们。然而,即使在今天,您也很难找到一篇详细介绍细微差别的最佳实践的好文章。这是因为,正如我在第1部分的介绍中所说的,很多早期的 HTTP/2内容对于它在实践中的工作效果过于乐观,而且坦率地说,其中一些内容存在重大错误和糟糕的建议。遗憾的是,这种错误信息在今天依然存在。这是我在 HTTP/3上编写本系列文章的主要动机之一,以帮助防止这种情况再次发生。

目前我能推荐的最好的 HTTP/2一体化微妙源码是 Barry Pollard 的《 HTTP/2 in Action 》一书。然而,由于这是一个付费的资源,我不想让你在这里猜测,我列出了下面的几个要点,以及它们与 HTTP/3的关系:

1. 单一连接

HTTP/1.1和 HTTP/2之间最大的区别是从6到30个并行 TCP 连接切换到单个底层 TCP 连接。我们在第2部分中讨论了一个连接如何仍然可以像多个连接一样快,因为拥塞控制可以导致更多或更早的数据包丢失(这就抵消了它们聚合起来的更快启动的好处)。HTTP/3继续使用这种方法,但“仅仅”从一个 TCP 切换到一个 QUIC 连接。这种差异本身并没有做那么多(它主要减少了服务器端的开销) ,但是它导致了以下大部分问题。

2. 服务器切分和连接聚合

在实践中,切换到单一连接设置是相当困难的,因为许多页面分割在不同的主机名甚至服务器(如 img1.example.com 和 img2.example.com )上。这是因为浏览器只为每个主机名打开六个连接,所以允许多个连接!如果不对 HTTP/1.1设置进行更改,HTTP/2仍然会打开多个连接,从而降低其他特性(如优先级排序(见下文))的实际工作效率

因此,最初的建议是撤消服务器分片,并尽可能将资源合并到单个服务器上。HTTP/2甚至提供了一个特性,可以使从 HTTP/1.1设置的转换更加容易,称为连接合并。粗略地说,如果两个主机名解析为相同的服务器 IP (使用 DNS)并使用相似的 TLS 证书,那么浏览器甚至可以跨两个主机名重用单个连接

在实践中,连接合并可能很难正确处理,例如,由于涉及 CORS 的几个微妙的安全问题。即使您确实正确地设置了它,您仍然可以很容易地以两个独立的连接结束。问题是,这并不总是坏事。首先,由于优先级和多路复用实现不佳(见下文) ,单个连接很容易比使用两个或多个连接慢。其次,由于拥塞控制器之间的竞争,使用太多的连接会导致早期的包丢失。然而,只使用一些(但仍然不止一个)可以很好地平衡拥塞增长和更好的性能,特别是在高速网络上。由于这些原因,我相信一点点的分片仍然是一个好主意(比如说,2到4个连接) ,即使使用 HTTP/2。事实上,我认为大多数现代 HTTP/2设置的性能和它们一样好,因为它们在关键路径中仍然有一些额外的连接或第三方负载。

3. 资源捆绑和内联

在 HTTP/1.1中,每个连接只能有一个活动资源,这会导致 HTTP 级别的行首(head-of-line,HoL)阻塞。因为连接的数量被限制在区区6到30个,所以资源捆绑(将较小的子资源合并到单个较大的资源中)是一个长期的最佳实践。我们今天仍然在诸如 Webpack 这样的捆绑包中看到这一点。类似地,资源通常内联在其他资源中(例如,关键的 CSS 内联在 HTML 中)。

然而,使用 HTTP/2,单个连接可以复用资源,因此您可以有更多未处理的文件请求(换句话说,单个请求不再占用您为数不多的宝贵连接之一)。这最初被解释为,“我们不再需要为 HTTP/2绑定或内联我们的资源”。这种方法被吹捧为更适合细粒度缓存,因为每个子资源都可以单独缓存,而且如果其中一个子资源发生了更改,则不需要重新下载完整的 bundle。这是事实,但只是在相对有限的范围内。

例如,您可以降低 压缩效率,因为这对于更多的数据更有效。此外,每个额外的请求或文件都有固有的开销,因为它需要由浏览器和服务器处理。这些成本加起来可能是数百个小文件,而不是几个大文件。在我们自己的早期测试中,我发现大约有40个文件存在严重的报酬递减。尽管这些数字现在可能有点高,但是 HTTP/2中的文件请求仍然不像最初预测的那样便宜。最后,不内联资源会增加延迟成本,因为需要请求文件。这与优先级排序和服务器推送问题(见下文)相结合,意味着即使在今天,您仍然可以更好地内联一些关键的 CSS。也许有一天资源捆绑提案会对此有所帮助,但目前还不是时候。

当然,所有这些对于 HTTP/3来说仍然是正确的。尽管如此,我还是读到人们声称许多小文件比 QUIC 更好,因为更多并发活动的独立流意味着 HoL 阻塞移除的更多利润(正如我们在第2部分中讨论的)。我认为这可能有些道理,但是,正如我们在第2部分中看到的,这是一个非常复杂的问题,有很多移动参数。我不认为这样做的好处会超过讨论的其他成本,但是还需要更多的研究。(一个离谱的想法是让每个文件的大小完全符合一个 QUIC 包,绕过 HoL 完全阻塞。我将接受任何实现了这一功能的资源捆绑包的初创企业的版税。

HTTP/3: 实用部署选项(第3部分)相关推荐

  1. 【VMware vSAN 6.6】2.5.硬件部署选项:我们有软硬件项目解决方案

    目录 1. 简介 1.1.适用于HCI的企业级存储 2. 体系结构 2.1.带有本地存储的服务器2.2.存储控制器虚拟系统套装的缺点 2.3.vSAN在vSphere Hypervisor中自带 2. ...

  2. 全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区部署选项

    今天,我们宣布推出全新的 Amazon Relational Database Service (RDS) 多可用区部署选项,其事务提交延迟最多可提速 2 倍,自动故障转移时间通常少于 35 秒,并包 ...

  3. 全新 Amazon RDS for MySQL 和 PostgreSQL 多可用区 (Multi-AZ) 部署选项

    月初,我们宣布推出全新的 Amazon Relational Database Service (RDS) 多可用区 (Multi-AZ) 部署选项 https://aws.amazon.com/rd ...

  4. 【一起学UniGUI】--UniGUI的部署选项(5)

    uniGUI支持Windows平台下所有主要部署选项. 1.Standalone Server (独立服务器)  最简单的部署方法是独立服务器.在这种模式下,应用程序服务器像桌面应用程序一样直接运行. ...

  5. openstack部署_OpenStack Barbican部署选项如何保护您的云

    openstack部署 无论您是遵循内部信息安全策略,还是要满足GDPR,ANSSI,PCI DSS,HIPAA或NIST等法规要求,您都可能在寻找保护数据和软件的隐私和完整性的方法. 该解决方案可以 ...

  6. .NET Core 2.1改进了性能,并提供了新的部署选项

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 微软正式发布了面向所有平台的.NET Core 2.1.微软计划长期支持这个版本,但据来自微 ...

  7. 在企业环境中部署 Microsoft Windows 恶意软件删除工具

    简介 Microsoft 已发布 Microsoft Windows 恶意软件删除工具来帮助您从计算机中删除特定的流行恶意软件.跳过详细信息并下载工具有关如何下载该工... Microsoft 已发布 ...

  8. Git 实用技巧记录,看这篇你就明白了!

    " 只有在遇到问题的时候,才体会到技巧带来的好处! 如果我们希望能够快速了解或体验一下 Git 的操作的话,我这里推荐搭建前往这个网站进行学习,其不需要我们安装工具,而且我们的每一步操作都可 ...

  9. 开发工具:Git超全实用技巧,值得收藏!

    只有在遇到问题的时候,才体会到技巧带来的好处! 常见企业工作流程 主要介绍,企业中常用的 Git 工作流程! Git Flow 主干分支 稳定分支 开发分支 补丁分支 修改分支 Github Flow ...

最新文章

  1. axis1 web Service 环境部署
  2. ESP32片上模数转换ADC精度简单测试方案及测试数据分享
  3. Catch Me If You ... Can't Do Otherwise--转载
  4. python中浅拷贝和深拷贝分析
  5. 使用@Valid进行Spring验证bindingresult 用法
  6. 【操作系统】对操作系统的了解
  7. SVN Error: Can‘t connect to host xxxxx‘: 由于目标计算机积极拒绝,无法连接,的最快解决办法
  8. [Codeforces673A]Bear and Game(水题,思路)
  9. 当剩下最后一颗×××时,各国军人的表现!
  10. pycharm英语怎么读_PyCharm常用设置
  11. 043、JVM实战总结:动手实验,自己动手模拟出频繁Young GC的场景
  12. spring boot 定时间任务
  13. SQLite入门与分析(四)---Page Cache之事务处理(1)
  14. linux下WPS并安装字体
  15. 小问题:要把pdg格式的jpg图片还原成pc能显示的jpg图片
  16. 华为IPD 研发模式
  17. select 获取选择的值
  18. Doom3 引擎渲染管线分析
  19. DLang、Rust 以及 Golang 对比数据库操作方式
  20. 百度Apollo自动驾驶_百度车载小程序

热门文章

  1. toFixed四舍五入精度校正
  2. toFixed精度问题
  3. 春节出境中国游客可在174个国家和地区使用银联卡
  4. centos备份远程mysql数据库,CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期...
  5. bug gulimall
  6. How Do Fixes Become Bugs
  7. MTK 手机线刷错误信息汇总和解决办法
  8. new Date(date)与new Date(date).getTime()在苹果手机中返回NaN
  9. 线程的基本操作以及线程的状态
  10. 海尔在美设厂竟为赚利差