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

news2024/9/23 5:24:37

近日,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.coloradmin.cn/o/890942.html

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

相关文章

【UE4 RTS】12-HUD functionality Part2

前言 本篇实现了通过按钮控件暂停、加快、减慢游戏速度的功能。 效果 步骤 1. 打开控件蓝图“GameTime_HUD”,在设计器中对进度条控件的百分比创建一个绑定函数 绑定函数命名为“Get_ProgressBar_GameSpeed_SetSpeedDisplay”,并设置该函数类别属于Ga…

【蛋白-蛋白】Rosetta InterfaceAnalyzer 学习笔记

Rosetta InterfaceAnalyzer是一种用于分析蛋白质相互作用界面的工具,可以计算结合能、埋藏界面表面积、包装统计数据和其他有用的界面指标。 这里以(PDB:3R2X)为例,介绍如何利用Rosetta中InterfaceAnalyzer来快速分析蛋白-蛋白相互作用,并提…

excel统计函数篇1之average系列

一、excel中的统计函数 1、AVERAGE(number1,number2,...):返回其参数的平均值 2、AAVERAGEA(value1,value2,...):返回其参数的平均值,包括数字、文本和逻辑值 可以在括号内手动输入,也可以引用单元格,对序列求平均的…

浏览器307,自动从http跳转到https

现象: 解决方式 谷歌浏览器和edge: 进入chrome://net-internals/#hsts

Docker+Selenium Grid搭建自动化测试平台

安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce -y Create a Docker Network docker network create grid 下载镜像 hu…

TensorFlow2.1 模型训练使用

文章目录 1、环境安装搭建2、神经网络2.1、解决线性问题2.2、FAshion MNIST数据集使用 3、卷积神经网络3.1、卷积神经网络使用3.2、ImageDataGenerator使用3.3、猫狗识别案例3.4、参数优化 1、环境安装搭建 链接: Windows 安装Tensorflow2.1、Pycharm开发环境 2、神经网络 1…

第十四届中国大学生服务外包大赛细品,上百支队伍与合合信息用AI共克“记账”难题

前言 熟悉我的小伙伴应该知道我在大学时期参与了很多竞赛,我向来对比赛是比较热枕的,以我个人观点,我认为可以通过竞赛激发学习激情和检验自己的技能水平掌握情况,大学生很少有机会能够了解到课堂之外市场的需求,外包…

repmgr出现双主,并且时间线分叉,删除了最新的时间线节点

遇到的问题如下: 2023-08-17 20:24:21.566 CST [1556001] LOG: database system was interrupted; last known up at 2023-08-17 20:21:41 CST 2023-08-17 20:24:21.770 CST [1556001] LOG: restored log file "00000009.history" from archive cp: 无法…

【从零开始学爬虫】采集中国国际招标网招标数据

l 采集网站 【场景描述】采集中国国际招标网招标数据。 【源网站介绍】中国国际招标网致力于为企业提供招标、采购、拟在建项目信息及网上招标采购等一系列商务服务。 【使用工具】前嗅ForeSpider数据采集系统 http://www.forenose.com/view/forespider/view/download.html 【…

LVS-DR模式下(RS检测)ldirectord工具实现部分节点掉点后将请求发往正常设备进行处理

基于前文的LVS-DR集群构建环境 一.下载ldirectord软件 二.将模板文件中的LVS-DR模式相关文件拷贝到/etc/ha.d主配置目录并按实际设备修改 三.配置两台RS匹配规则 四.停止RS1的http服务进行测试 RS1失去工作能力,RS2接替RS1 基于前文的LVS-DR集群构建环境 一.下…

ARM--day5(C语言点灯实验、总线、串口通信信息、串口通讯协议)

函数分装实现点灯 gpio.c: #include "gpio.h" //函数功能:GPIO引脚初始化操作 //参数1:GPIO组号 //参数2:引脚编号 //参数3:初始化内容 void hal_gpio_init(volatile gpio_t*gpiox,unsigned int pin,gpio_init_t* ini…

浏览器控制台调试代码和JavaScript控制台方法介绍

浏览器控制台调试代码和JavaScript控制台方法介绍 浏览器控制台调试代码 浏览器控制台(Console)是浏览器提供的一个开发工具,用于在浏览器中执行和调试 JavaScript 代码。它提供了一个交互式环境,可以输入 JavaScript 代码&#…

计算机竞赛 wifi指纹室内定位系统

简介 今天来介绍一下室内定位相关的原理以及实现方法; WIFI全称WirelessFidelity,在中文里又称作“行动热点”,是Wi-Fi联盟制造商的商标做为产品的品牌认证,是一个创建于IEEE 802.11标准的无线局域网技术。基于两套系统的密切相关&#xff…

UGUI组件Rect Transform

一. Rect Transform概述 画布上UI对象都附加一个Rect Transform组件,和一般对象附加的Transform对象相比,Rect Transform多了Width,Height,Anchor,Pivot属性。 二.位置属性 UI对象的坐标是其轴心到锚点之间的像素值,如下图所示。 三.Pivot(…

同时负责多个项目,团队成员还参与多个项目开发,如何有效管理?分享9个策略

如果你正在管理一个团队或项目,可能会需要同时在进行多个项目的管理。在这种情况下,追踪所有进行中的项目部分可能会迅速变得非常复杂。没有合适的管理过程,就难以确定哪些工作应该优先处理,也不容易确保团队有效管理工作量&#…

WPF显示初始界面--SplashScreen

WPF显示初始界面–SplashScreen 前言 WPF应用程序的运行速度快,但并不能在瞬间启动。当第一次启动应用程序时,会有一些延迟,因为公共语言运行时(CLR)首先需要初始化.NET环境,然后启动应用程序。 对于WPF中…

Spring基础梳理(一):一定要先全局掌握Spring

越活越完蛋了,看着看着现在又想梳理梳理Spring基础,搞点原始真解吧,不过技术人每个阶段看相同东西的理解都是不同的,只是现在浮躁的技术中又有多少人能够一本书啃两遍以上呢,我也一样,徜徉于业务之中&#…

【国护攻防场景下的沙箱技术对比】

目录 前言 沙箱技术分析 总结 前言 真高兴呀,又是受到红队大佬青睐的一天,今天下午很荣幸的收到了来自红队大佬的恶意投喂,把我们各位在座100年工作经验的蓝队师傅们吓得赶忙拔掉自己的电脑电源,断掉自己的网线,…

基于Helm管理Kubernetes应用

目录 基于kubeadm部署K8S集群 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装…

Linux驱动开发(Day4)

字符设备驱动分步注册: