如何使用QUIC协议提升音视频业务访问速度

QUIC(Quick UDP Internet Connections)协议能帮助您大幅提升客户端访问速度,尤其是在弱网络、Wi-Fi和移动网络频繁切换等场景下,无需重连即可实现多路复用,提升资源的访问效率,同时保障数据传输的安全性。

QUIC协议介绍

QUIC协议又被称为快速UDP互联网连接协议,提供与SSL相同的安全性,同时具备多路复用等多种优势,具有极佳的弱网性能,在丢包和网络延迟严重的情况下仍可提供可用的服务。QUIC协议在应用程序层面可以实现不同的拥塞控制算法,不需要操作系统和内核支持,相比于传统的TCP协议,拥有了更好的改造灵活性,适合用于在TCP协议优化遇到瓶颈的业务。

随着短视频、直播等新兴业务的飞速发展,流媒体传输对于带宽和延迟提供了双重要求,QUIC协议可以有效解决网络、视频卡顿的问题,提升音视频资源的访问效率,同时保障数据传输的安全性。

支持的QUIC协议类型

ALB支持gQUIC和iQUIC。HTTP/3协议是以iQUIC协议为基础构建的应用层协议,它主要依赖iQUIC来实现多路复用、拥塞控制、损失检测和重新传输等功能。HTTP/3协议可以更快地启动客户端连接,消除了多路复用流中的队头阻塞。

应用型负载均衡ALB支持的gQUIC协议版本有Q46、Q43、Q39,支持的HTTP/3协议版本为h3。

如何协商HTTP/3

开启QUIC升级后,ALB将向客户端通告HTTP/3和gQUIC协议,优先通告HTTP/3,让支持HTTP/3的客户端优先尝试与ALB建立连接。

  • 客户端在无法建立HTTP/3连接时始终回退为使用HTTPS或HTTP/2。

  • 支持HTTP/3的客户端使用HTTP/3有关的缓存Cookie。

  • 启用或停用“ QUIC升级”不会影响ALB连接到客户端的能力。

Alt-Svc HTTP 响应标头中通告支持,alt-svc 标头值:

Alt-Svc : h3=":$quic_port"; ma=3600,quic=":$quic_port"; v="46,43,39"; ma=3600

当“开启QUIC升级” 时,某些情况会导致您的客户端回退为使用HTTPS或HTTP/2而不是协商 HTTP/3。其中包括:

  • 客户端支持的HTTP/3版本与ALB支持的HTTP/3版本不兼容。

  • ALB检测到UDP流量阻塞或速率受限以致HTTP/3无法工作。

  • 客户端完全不支持HTTP/3,因此不尝试协商HTTP/3连接。

客户端要求

  • 如果您使用Chrome浏览器,支持直接对ALB发起QUIC协议请求。

  • 使用Chrome浏览器访问QUIC,需要使用指定的Chrome浏览器版本:

    • ALB支持的gQUIC协议最高版本是Q46,对应的Chrome浏览器版本为Chrome 74-81。

    • ALB支持的HTTP/3协议最高版本是h3,对应的Chrome浏览器版本为Chrome 87及以上。

  • 如果您使用其他客户端例如自研APP,则客户端必须集成支持QUIC协议的网络库,例如:lsquic-client、cronet网络库、ngtcp2和quiche等。

场景示例

使用Chrome浏览器访问ALB实例时,ALB会根据配置的监听所绑定的证书域名example.com访问后端服务器。主要有以下两种应用场景:

  • 当同时配置了HTTPS监听和QUIC监听时,系统会优先使用QUIC监听,此时在Chrome浏览器中输入证书绑定的域名example.comALB实例将会通过配置的QUIC监听将客户端的请求转发至默认后端服务器组RS1。

  • 当QUIC监听不可用时,系统会自动切换到关联的HTTPS监听,此时在Chrome浏览器中输入证书绑定的域名example.comALB实例将会通过配置的HTTPS监听将客户端的请求转发至默认后端服务器组RS1。

前提条件

  • 已创建ALB实例。具体操作,请参见创建应用型负载均衡

  • 已创建服务器组RS1。具体操作,请参见创建和管理服务器组

  • 已在服务器组RS1中添加ECS01实例,并在ECS01实例中部署了Nginx的视频服务。

  • 您已经在ALB实例上部署了SSL服务器证书,该证书已绑定了域名example.com

步骤一:创建QUIC监听

  1. 登录应用型负载均衡ALB控制台
  2. 在顶部菜单栏,选择ALB实例所属的地域。

  3. 实例页面,找到目标实例,单击目标实例ID。在监听页签,单击创建监听

  4. 配置监听配置向导,完成以下配置,然后单击下一步

    监听配置

    说明

    选择监听协议

    选择监听的协议类型。

    本示例选择QUIC

    监听端口

    输入用来接收请求并向后端服务器进行请求转发的监听端口。

    端口范围为1~65535。

    说明

    同一个ALB实例内,相同协议的监听端口不能重复,且HTTP和HTTPS监听端口互不重复。

    监听名称

    输入监听名称。

    标签

    设置标签键标签值

    设置标签后,您可以在监听页签使用标签筛选监听。

    高级配置

    单击修改展开高级配置。

    连接空闲超时时间

    指定空闲超时时间,默认取值范围为1~60秒,如需提升配额,请

    前往配额中心申请。

    在超时时间内一直没有访问请求,负载均衡会暂时中断当前连接,直到下次请求来临时重新建立新的连接。

    连接请求超时时间

    指定请求超时时间,默认取值范围为1~180秒,如需提升配额,请前往配额中心申请。

    在超时时间内后端服务器一直没有响应,负载均衡将放弃等待,给客户端返回HTTP 504错误码。

    数据压缩

    开启该配置会对特定文件类型进行压缩,关闭该配置则不会对任何文件类型进行压缩。

    目前,Brotli支持压缩所有类型,Gzip支持压缩的类型包括:text/xmltext/plaintext/cssapplication/javascriptapplication/x-javascriptapplication/rss+xmlapplication/atom+xmlapplication/xmlapplication/json

    附加HTTP头字段

    选择您要添加的自定义HTTP头字段:

    • 通过SLB-ID头字段获取负载均衡实例的ID。

    • 通过X-Forwarded-Proto头字段获取负载均衡实例的监听协议。

    • 通过X-Forwarded-Port头字段获取负载均衡实例的监听端口。

  5. 配置SSL证书配置向导,选择服务器证书,然后单击下一步

  6. 选择服务器组配置向导,选择服务器类型,然后选择服务器组并查看后端服务器信息,单击下一步

  7. 配置审核配置向导,确认配置信息,单击提交

步骤二:创建HTTPS监听

创建HTTPS监听时,请开启QUIC升级,并关联已创建的QUIC监听。

  1. 实例页面,找到在步骤一中创建了QUIC监听的实例,单击该实例ID。

  2. 实例详情页签,单击监听页签,单击创建监听

  3. 配置监听配置向导,完成以下配置,然后单击下一步

    监听配置

    说明

    选择监听协议

    选择监听的协议类型。

    本示例选择HTTPS

    监听端口

    输入用来接收请求并向后端服务器进行请求转发的监听端口,本示例输入443。通常HTTP协议使用80端口,HTTPS协议使用443端口。

    端口范围为1~65535。

    说明

    在同一个负载均衡实例内,监听端口不可重复。

    监听名称

    输入监听名称。长度为2~256个字符,支持中文和大小写英文字母,可包含数字、半角句号(.)、下划线(_)、短划线(-)、半角逗号(,)、半角分号(;)、正斜线(/)和at(@)。

    高级配置

    单击修改展开高级配置。

    启用HTTP 2.0

    选择是否开启HTTP 2.0。

    连接空闲超时时间

    指定连接空闲超时时间,取值范围为1~60秒。

    在超时时间内一直没有访问请求,负载均衡会暂时中断当前连接,直到下一次请求来临时重新建立新的连接。

    说明

    该功能对使用HTTP 2.0的请求暂不生效。

    连接请求超时时间

    指定请求超时时间,取值范围为1~180秒。

    在超时时间内后端服务器一直没有响应,负载均衡将放弃等待,给客户端返回HTTP 504错误码。

    数据压缩

    开启该配置对特定文件类型进行压缩,关闭该配置则不会对任何文件类型进行压缩。

    目前,Brotli支持压缩所有类型,Gzip支持压缩的类型包括:text/xmltext/plaintext/cssapplication/javascriptapplication/x-javascriptapplication/rss+xmlapplication/atom+xmlapplication/xmlapplication/json

    附加HTTP头字段

    选择您要添加的自定义HTTP头字段:

    • 添加X-Forwarded-For头字段获取客户端真实IP。

    • 添加SLB-ID头字段获取负载均衡实例的ID。

    • 添加X-Forwarded-Proto头字段获取实例的监听协议。

    • 添加X-Forwarded-Clientcert-subjectdn头字段获取访问负载均衡实例客户端证书的所有者信息。

    • 添加X-Forwarded-Clientcert-issuerdn头字段获取访问负载均衡实例客户端证书的所发行者信息。

    • 添加X-Forwarded-Clientcert-fingerprint头字段获取访问负载均衡实例客户端证书的指纹取值。

    • 添加X-Forwarded-Clientcert-clientverify头字段获取访问负载均衡实例客户端证书的校验结果。

    • 添加X-Forwarded-Port头字段获取负载均衡实例的监听端口。

    • 添加X-Forwarded-Client-srcport头字段获取访问负载均衡实例客户端的端口。

    开启QUIC升级

    选择是否开启QUIC升级,如果开启QUIC升级,请在关联的QUIC监听下拉列表中选择一个已创建的QUIC监听。

    • 如果您未创建QUIC监听,单击创建监听,创建一个QUIC监听。具体操作,请参见添加QUIC监听

    • ALB支持iQUIC和gQUIC。关于如何协商HTTP/3,请参见如何协商HTTP/3

  4. 配置SSL证书配置向导,选择服务器证书,然后单击下一步

    说明

    如果您要设置TLS安全策略,单击高级配置后的修改

  5. 选择服务器组配置向导,选择服务器类型,然后选择服务器组,查看后端服务器信息,然后单击下一步

  6. 配置审核页面,确认配置信息,单击提交

步骤三:配置域名解析

example.com通过CNAME域名解析的方式解析到ALB实例的公网服务域名上。

  1. 登录应用型负载均衡控制台

  2. 在顶部菜单栏选择地域。

  3. 选择要进行域名解析的ALB实例,复制其对应的DNS名称。

  4. 完成以下步骤来添加CNAME解析记录。

    1. 登录域名解析控制台

    2. 域名解析页面单击添加域名

    3. 添加域名对话框中输入您的主机域名,然后单击确认

      重要

      您的主机域名需已完成TXT记录验证。

    4. 在目标域名的操作列单击解析设置

    5. 解析设置页面单击添加记录

    6. 添加记录面板配置以下信息完成CNAME解析配置,然后单击确认

      配置

      说明

      记录类型

      在下拉列表中选择CNAME

      主机记录

      您的域名的前缀。

      解析请求来源

      选择默认。

      记录值

      输入域名对应的CNAME地址,即您复制的ALB实例的DNS名称。

      TTL

      全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。

      说明
      • 新增CNAME记录实时生效,修改CNAME记录取决于本地DNS缓存的解析记录的TTL到期时间,默认为10分钟。

      • 添加时如遇添加冲突,请换一个解析域名。更多信息请参见解析记录冲突规则

步骤四:结果验证

本文以Windows客户端为例说明。在浏览器中输入example.com可访问到ALB实例,本文在服务器组RS1对应的后端服务器ECS01上使用Nginx搭建了视频服务。

  • 当同时配置了HTTPS监听和QUIC监听时,在浏览器中输入证书绑定的域名example.com,并按F12可以查看当前网页的协议HTTP/3,耗时93毫秒

    如下图所示:quic

  • 当QUIC监听不可用时,在浏览器中输入证书绑定的域名example.com,并按F12可以查看当前网页的协议HTTP/2,耗时148毫秒

    如下图所示:https

经测试,ALB使用HTTP/3协议大幅提升了客户端访问后端服务器视频的速度。