全面揭秘:抖音集团 QUIC 千万 QPS 应用实践

近日,ArchSummit全球架构师峰会深圳站成功举办。随着移动互联网的蓬勃发展,人们对网络速度和实时性的需求日益增加。在面对越来越多的图片、视频和音频等大资源时,页面加载缓慢、视频卡顿等问题频发,传统的传输控制协议(TCP)显得力不从心。近年来,QUIC 协议在网络通信领域掀起热潮,在直播、视频、点播、下载等场景得到广泛应用,QUIC显著提升网络加载速度,带来了前所未有的加速效果和用户体验。会上,火山引擎边缘云高级工程师龙志与多位行业资深专家共同探讨,在大带宽、低延时场景下,打造高质量的网络环境,服务用户这一新难题的解决方案。

火山引擎高级工程师龙志认为:QUIC 作为新型传输协议,可以显著提升网络性能,在有限的资源条件下承载千万 QPS成为了可能,这也是大多数行业伙伴选择QUIC协议的原因。2018年,火山引擎正式完成QUIC项目立项并启动开发;19年内部API业务顺利落地;20年在文件传输场景落地,QPS突破300万;2021年在图片业务落地,QPS突破2000万;22年支持抖音春节活动并上线了IETF QUIC;23年在视频点播场景落地并支持MPQUIC协议,QPS突破3000万。

QUIC协议的独特优势

  1. 0-RTT建立连接:理论上,TCP结合TCP-FastOpen和TLS1.3两个特性可以实现0-RTT能力,但这需要全链路配合,尤其是中间路由器的支持。从业界数据看,在TCP上能真正实现0-RTT的比例是极低的。QUIC是基于UDP的协议,具备节省TCP握手的时间消耗优势,QUIC除首次握手外,绝大多数场景都能实现0-RTT。目前,火山引擎QUIC 0-RTT占比达到95%以上;

  2. 双边用户态协议栈加速:这两个特性使QUIC的想象空间变得更大。比如,一些高级网络特性、多路径、FEC等功能可以基于QUIC实现快速研发迭代,双端可控,上线部署也非常方便;

  3. 连接迁移:连接迁移是指用户可以在WiFi和蜂窝网络之间实现无缝切换。在工程落地过程中,由于边缘节点大多数属于单一运营商,如果WiFi和蜂窝网络属于不同运营商,需要在调度上做一些工作才能实现连接迁移;

  4. 多路复用:H2也有类似的功能,但受限于TCP的可靠传输特性,不同请求之间还是会互相影响,存在队头阻塞问题。QUIC基于UDP,可以屏蔽这个问题,但GQUIC使用HPACK,Header都在一条Stream上发送,还是会存在一定程度的阻塞,IETF QUIC使用QPACK的编解码流可以解决这个问题。

火山引擎QUIC架构设计

  1. 端边云一体:火山引擎QUIC充分发挥边缘云端边云一体的优势,在原有客户端、边缘节点、中心机房接入架构的基础上进行微调,将QUIC能力嵌入到端边云全链路中,以最小的代价支持QUIC协议能力。同时,端边云共用一套QUIC网络库,避免同一个功能需要在双端不同网络库重复实现,大幅提升开发和运维效率;

  2. 高可靠:在Nginx升级时,TCP可以通过关闭Listen FD实现无损升级。火山引擎QUIC通过基于Ebpf实现的连接调度模块,在升级时,将新老连接分别调度到新老Worker,从而实现无损升级。另外,QUIC作为一个新型协议,相关的监控、可观测等配套工具不够完善。为此,火山引擎在双端实现了协议信息上报能力,实现了实时监控;

  3. 高性能:在传输优化方面,火山引擎针对业务网络特性进行针对性优化,分场景定制协议优化算法;在CPU优化方面,火山引擎通过丰富的优化策略,提升QUIC CPU性能,解决QUIC CPU高消耗这一痛点;在高级特性方面,针对部分网络性能要求极高的场景,火山引擎提供MPQUIC、FEC等高级特性进一步提升QUIC性能,充分发挥客户端多网卡特性,增加弱网对抗能力。

图片

火山引擎QUIC-网络性能优化

网络性能-全链路分析系统优化

QUIC作为新型的双端加密传输协议,缺少相应的分析系统,但在上线落地过程中难免会遇到性能问题,建立一套全链路分析系统显得格外重要。以点播场景为例,火山引擎通过全局的TraceId贯穿每个请求经过的Nginx、双端QUIC网络库、播放器等关键模块,做到每个请求可追踪,通过数据,形成性能监控大盘。另外,火山引擎对Qvis进行定制化开发,实现网络传输可观测和常态化开启状态,为业务排查故障以及优化网络性能带来了非常大的便利。

图片

网络性能-分场景优化

以动态API请求、视频上传、视频点播点播三个典型场景为例,基于全链路分析系统,工程师可以对线上的各种场景进行针对性优化。

  1. 动态API请求场景:在飞书QUIC实验过程中,用户处于企业网环境,部分企业网存在Udp Block情况,导致QUIC请求失败。面对这种场景,火山引擎充分发挥TCP的通用性以及QUIC的性能优势,在新建连接时增加TCP、QUIC竞速机制,通过远端云控竞速策略,使TCP、QUIC达到互补状态,提升稳定性和网络性能;

  2. 视频上传场景:视频上传场景中,存在无线网络RTT抖动较大,丢包检测算法会触发大量的虚假重传、降低带宽的有效利用率、增加上传耗时等问题。为此,火山引擎增加了虚假重传检测机制,如果判断出现了虚假重传,系统会根据情况调整丢包检测阈值(包括时间阈值和包乱序阈值),提升传输效率;

  3. 视频点播场景:视频点播场景中,新建连接需要经过若干个RTT才能探测到稳定的带宽,这会影响视频起播率。通过发挥QUIC的双端协议优势,将用户历史连接探测到的稳定带宽保存在客户端,下次新建连接将利用历史数据快速恢复带宽,有效提升视频起播率。

图片

网络性能-QUIC FEC优化

QUIC FEC在发送数据时按照特定的编码算法发送一些冗余数据。出现丢包时,接收端可以通过编码数据恢复丢失的数据包,相比ARQ(自动请求重传),可以在更短时间内恢复丢包,节省丢包检测/重传过程的耗时。

  1. TLP-FEC:FEC需要在原始数据基础上增加一些冗余数据,存在原始数据和冗余数据相互抢占带宽的情况,极端场景下甚至会出现开启FEC导致性能劣化的后果。为了应对这种情况,火山引擎提出了TLP-FEC,即在请求数据的尾部,判断后续数据发送状态,利用空闲带宽来发送冗余数据,解决带宽抢占的问题。TLP-FEC适合动态请求API场景;

  2. A-FEC:XOR和RS算法,都需要设定精准的冗余度,设置难度高。火山引擎提出A-FEC(Adaptive FEC 自适应FEC)策略,以实时统计数据为基础,精准设置冗余度,实现带宽成本和恢复能力的平衡。

图片

网络性能-QOE反馈优化

传统协议优化通常基于网络传输的视角进行,对用户的体验感知较少。火山引擎充分利用QUIC双边加速特点,与业务深度结合,将业务客户端QoE数据(请求优先级/码率/网络类型)反馈给服务端进行针对性优化,有效降低用户卡顿率和重传率,实现降本增效。

图片

网络性能-MPQUIC优化

MPQUIC想在工程上落地,需要对中间链路,包括四层LB以及QUIC连接调度模块进行改造。火山引擎对QUIC CID进行了重新定义,用不同字段分别表示QUIC连接、后端RS、路径等信息。利用移动设备Wifi和Cell双通道同时传输数据,提升速度,增加弱网对抗能力,进一步发挥QUIC双端用户态协议优势,提升用户体验。在效果上,线上Feed推荐流场景AB对比实验结果显示,MPQUIC对单路径QUIC网络性能提升明显,网络耗时P99降低约40%,平均值和P90降低超过20%。

图片

火山引擎QUIC-CPU性能优化

QUIC CPU高消耗一直是业界痛点,在大流量业务场景中,问题更加突出。针对不同场景,火山引擎提供通用场景、流媒体场景、动态请求场景等性能优化方案:

  1. 通用场景:编译&链接优化,如PGO/LTO/Bolt等方法;

  2. 流媒体场景:发方向,通过GSO将QUIC包进行聚合,降低系统调用次数,大大提升发包性能,数据显示,线上收益15%左右;收方向,通过ACK算法优化,在不影响网络性能的基础上,降低ACK频率,大大降低收包方向CPU消耗;

  3. 动态请求API场景:将QUIC握手阶段的非对称加解密卸载到硬件加速卡或者其他机器的空闲CPU上,支持在远程卸载失败的情况下fallback到本地卸载模式,提升握手性能;IETF QUIC使用QPACK的编解码流解决了GQUIC中请求Header存在的队头阻塞问题。线上会存在部分Header一直变化的情况,此时编解码流会持续发送对应Header的编码数据,消耗大量CPU资源,火山引擎采取不加入动态表的策略来节省资源消耗。

图片

火山引擎QUIC-业务收益

目前,火山引擎QUIC已在各场景大规模上线,覆盖了抖音、飞书、头条、西瓜等APP,涉及实时通信、音视频、云游戏等多个领域,业务场景包括API、上传、点播、长连接等,日高峰QPS超过3000万,且还在不断增长。

图片

ArchSummit全球架构师峰会为QUIC协议在网络通信领域的创新应用提供了一个重要的交流平台。通过这次峰会,行业专家们汇聚智慧,共同探讨QUIC 在各个业务场景的应用和优化。火山引擎边缘云愿与社会各界伙伴共同努力,致力于探索网络通信领域的创新技术,并与行业共享最新的成果。通过技术分享与合作,满足用户日益增长的网络需求,助力产业蓬勃发展。

关于火山引擎边缘云:

火山引擎边缘云,以云原生技术为基础底座,融合异构算力和边缘网络,构建在大规模边缘基础设施之上的云计算服务,形成以边缘位置的计算、网络、存储、安全、智能为核心能力的新一代分布式云计算解决方案。

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

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

相关文章

Nginx代理功能与负载均衡详解

序言 Nginx的代理功能与负载均衡功能是最常被用到的,关于nginx的基本语法常识与配置已在上篇文章中有说明,这篇就开门见山,先描述一些关于代理功能的配置,再说明负载均衡详细。 Nginx代理服务的配置说明 1、上一篇中我们在http…

如何使用Python获取SAP Temporary key 临时密钥

什么是Sap 临时密钥? SAP 临时密钥是用于激活 SAP 软件的一种许可证,只能在有限的时间内使用。这些密钥可用于评估目的或在系统迁移期间使用。它们是临时解决方案,通常在一定时间后过期。 如何获取Sap Temporary keys? 临时密钥: 如果创建…

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码)

2011-2021年数字普惠金融指数Bartik工具变量法(含原始数据和Bartik工具变量法代码) 1、时间:2011-2020(省级、城市),2014-2020(区县) 2、原始数据来源:北大金融研究中心…

【数据结构与算法——TypeScript】树结构Tree

【数据结构与算法——TypeScript】 树结构(Tree) 认识树结构以及特性 什么是树? 🌲 真实的树:相信每个人对现实生活中的树都会非常熟悉 🌲 我们来看一下树有什么特点? ▫️ 树通常有一个根。连接着根的是树干。 ▫️ 树干到…

mysql 8.0安装

操作系统:22.04.1-Ubuntu apt 安装命令 sudo apt install mysql-client-core-8.0 sudo apt install mysql-server-8.0终端输入 mysql 可以直接免密登录 如果此时提示需要密码,则可以进入配置文件,设置免密登录 sudo vim /etc/mysql/mysq…

探究主成分分析方法数学原理

目录 1、简介 2、实现原理 3、实现步骤 4、公式分析 5、实例分析 6、⭐协方差矩阵补充说明 7、LaTex文本 ⭐创作不易,您的一键三连,就是支持我写作的最大动力!🥹 关于代码如何实现,请看这篇文章:[机器…

Android 远程真机调研

背景 现有的安卓测试机器较少,很难满足 SDK 的兼容性测试及线上问题(特殊机型)验证,基于真机成本较高且数量较多的前提下,可以考虑使用云测平台上的机器进行验证,因此需要针对各云测平台进行调研、比较。 …

打造专属照片分享平台:快速上手Piwigo网页搭建

文章目录 通过cpolar分享本地电脑上有趣的照片:部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo 总结 🍀小结🍀 🎉博客主页:小智_x0___0x_ 🎉欢迎关注:&#x…

数据可视化和数字孪生相互促进的关系

数据可视化和数字孪生是当今数字化时代中备受关注的两大领域,它们在不同层面和领域为我们提供了深入洞察和智能决策的机会,随着两种技术的不断融合发展,很多人会将他们联系在一起,本文就带大家浅谈一下二者之间相爱相杀的关系。 …

最好的开放式耳机品牌,开放式耳机选购推荐

传统入耳式耳机长时间佩戴会给耳朵增加压力,在封闭状态下,还容易滋生细菌,引发耳部感染、发炎的症状,但开放式耳机就没有这种情况发生,无需入耳设计,佩戴更舒适,音质更真实通透,也不…

Centos7多台服务器免密登录

准备四台服务器: docker0 docker1 docker2 docker3 在docker0服务器上生成公钥和私钥 [rootwww ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory /root/.ssh. Enter passp…

【Leetcode】84.柱状图中最大的矩形(Hard)

一、题目 1、题目描述 给定 n n n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例1: 输入:heights = [2,1,5,6,2,3] 输出:10 解释:最大的矩形为图中红色区域,面积为 10示例2:…

Java开源项目mall学习笔记(1)——项目初始化

一、学习声明与项目介绍 该笔记是记录学习开源项目mall过程的文档笔记,完全原创,转载请声明。同时也对开源项目的作者表示感谢! mall: 🔥 mall项目是一套基于 SpringBoot Vue uni-app 实现的电商系统,包括前台商城项…

【Kafka】2.在SpringBoot中使用官方原生java版Kafka客户端

目 录 1. 新建一个消息生产者2. 新建一个消息消费者3. 测 试 在开始之前,需要先做点准备工作,用 IDEA 新建一个 Maven 项目,取名 kafka-study,然后删掉它的 src 目录,接着在 pom.xml 里面引入下面的依赖。这个项目的作…

NanoPi NEO移植LVGL8.3.5到1.69寸ST7789V屏幕

移植前准备 移植好fbtft屏幕驱动 参考链接:友善之臂NanoPi NEO利用fbtft驱动点亮1.69寸ST7789V2屏幕 获取源码 名称地址描述lvglhttps://github.com/lvgl/lvgl.gitlvgl-8.3.5lv_drivershttps://github.com/lvgl/lv_drivers.gitlv_drivers-6.1.1 创建工程目录 创…

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于GRU门控循环单元的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 1.Matlab实现GRU门控循环单元时间序列预测未…

计算机竞赛 python 爬虫与协同过滤的新闻推荐系统

1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 python 爬虫与协同过滤的新闻推荐系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖&…

AUTOSAR NvM协议栈集成方法

一、涉及的模块 Bsw:NvM、MemIf、Fee、Crc Mcal:Fls 其中一些芯片厂商的MCAL也会提供Fee模块,本文选择使用ETAS提供的Fee模块,好处是Fee的Block不需要手动配,在NvM中配好了Block之后,生成Bsw代码的同时会…

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

在直播软件源码平台中,服务器扮演着重要的角色,关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展,直播行业也随之崛起,全世界的人们都加入到了直播软件源码平台中,用户流量的增加让服务器的…

设计模式之构建器(Builder)C++实现

1、构建器提出 在软件功能开发中,有时面临“一个复杂对象”的创建工作,该对象的每个功能接口由于需求的变化,会使每个功能接口发生变化,但是该对象使用每个功能实现一个接口的流程是稳定的。构建器就是解决该类现象的。构建就是定…