近日,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协议的独特优势
0-RTT建立连接:理论上,TCP结合TCP-FastOpen和TLS1.3两个特性可以实现0-RTT能力,但这需要全链路配合,尤其是中间路由器的支持。从业界数据看,在TCP上能真正实现0-RTT的比例是极低的。QUIC是基于UDP的协议,具备节省TCP握手的时间消耗优势,QUIC除首次握手外,绝大多数场景都能实现0-RTT。目前,火山引擎QUIC 0-RTT占比达到95%以上;
双边用户态协议栈加速:这两个特性使QUIC的想象空间变得更大。比如,一些高级网络特性、多路径、FEC等功能可以基于QUIC实现快速研发迭代,双端可控,上线部署也非常方便;
连接迁移:连接迁移是指用户可以在WiFi和蜂窝网络之间实现无缝切换。在工程落地过程中,由于边缘节点大多数属于单一运营商,如果WiFi和蜂窝网络属于不同运营商,需要在调度上做一些工作才能实现连接迁移;
多路复用:H2也有类似的功能,但受限于TCP的可靠传输特性,不同请求之间还是会互相影响,存在队头阻塞问题。QUIC基于UDP,可以屏蔽这个问题,但GQUIC使用HPACK,Header都在一条Stream上发送,还是会存在一定程度的阻塞,IETF QUIC使用QPACK的编解码流可以解决这个问题。
火山引擎QUIC架构设计
端边云一体:火山引擎QUIC充分发挥边缘云端边云一体的优势,在原有客户端、边缘节点、中心机房接入架构的基础上进行微调,将QUIC能力嵌入到端边云全链路中,以最小的代价支持QUIC协议能力。同时,端边云共用一套QUIC网络库,避免同一个功能需要在双端不同网络库重复实现,大幅提升开发和运维效率;
高可靠:在Nginx升级时,TCP可以通过关闭Listen FD实现无损升级。火山引擎QUIC通过基于Ebpf实现的连接调度模块,在升级时,将新老连接分别调度到新老Worker,从而实现无损升级。另外,QUIC作为一个新型协议,相关的监控、可观测等配套工具不够完善。为此,火山引擎在双端实现了协议信息上报能力,实现了实时监控;
高性能:在传输优化方面,火山引擎针对业务网络特性进行针对性优化,分场景定制协议优化算法;在CPU优化方面,火山引擎通过丰富的优化策略,提升QUIC CPU性能,解决QUIC CPU高消耗这一痛点;在高级特性方面,针对部分网络性能要求极高的场景,火山引擎提供MPQUIC、FEC等高级特性进一步提升QUIC性能,充分发挥客户端多网卡特性,增加弱网对抗能力。
火山引擎QUIC-网络性能优化
网络性能-全链路分析系统优化
QUIC作为新型的双端加密传输协议,缺少相应的分析系统,但在上线落地过程中难免会遇到性能问题,建立一套全链路分析系统显得格外重要。以点播场景为例,火山引擎通过全局的TraceId贯穿每个请求经过的Nginx、双端QUIC网络库、播放器等关键模块,做到每个请求可追踪,通过数据,形成性能监控大盘。另外,火山引擎对Qvis进行定制化开发,实现网络传输可观测和常态化开启状态,为业务排查故障以及优化网络性能带来了非常大的便利。
网络性能-分场景优化
以动态API请求、视频上传、视频点播点播三个典型场景为例,基于全链路分析系统,工程师可以对线上的各种场景进行针对性优化。
动态API请求场景:在飞书QUIC实验过程中,用户处于企业网环境,部分企业网存在Udp Block情况,导致QUIC请求失败。面对这种场景,火山引擎充分发挥TCP的通用性以及QUIC的性能优势,在新建连接时增加TCP、QUIC竞速机制,通过远端云控竞速策略,使TCP、QUIC达到互补状态,提升稳定性和网络性能;
视频上传场景:视频上传场景中,存在无线网络RTT抖动较大,丢包检测算法会触发大量的虚假重传、降低带宽的有效利用率、增加上传耗时等问题。为此,火山引擎增加了虚假重传检测机制,如果判断出现了虚假重传,系统会根据情况调整丢包检测阈值(包括时间阈值和包乱序阈值),提升传输效率;
视频点播场景:视频点播场景中,新建连接需要经过若干个RTT才能探测到稳定的带宽,这会影响视频起播率。通过发挥QUIC的双端协议优势,将用户历史连接探测到的稳定带宽保存在客户端,下次新建连接将利用历史数据快速恢复带宽,有效提升视频起播率。
网络性能-QUIC FEC优化
QUIC FEC在发送数据时按照特定的编码算法发送一些冗余数据。出现丢包时,接收端可以通过编码数据恢复丢失的数据包,相比ARQ(自动请求重传),可以在更短时间内恢复丢包,节省丢包检测/重传过程的耗时。
TLP-FEC:FEC需要在原始数据基础上增加一些冗余数据,存在原始数据和冗余数据相互抢占带宽的情况,极端场景下甚至会出现开启FEC导致性能劣化的后果。为了应对这种情况,火山引擎提出了TLP-FEC,即在请求数据的尾部,判断后续数据发送状态,利用空闲带宽来发送冗余数据,解决带宽抢占的问题。TLP-FEC适合动态请求API场景;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高消耗一直是业界痛点,在大流量业务场景中,问题更加突出。
针对不同场景,火山引擎提供通用场景、流媒体场景、动态请求场景等性能优化方案:
通用场景:编译&链接优化,如PGO/LTO/Bolt等方法;
流媒体场景:发方向,通过GSO将QUIC包进行聚合,降低系统调用次数,大大提升发包性能,数据显示,线上收益15%左右;收方向,通过ACK算法优化,在不影响网络性能的基础上,降低ACK频率,大大降低收包方向CPU消耗;
动态请求API场景:将QUIC握手阶段的非对称加解密卸载到硬件加速卡或者其他机器的空闲CPU上,支持在远程卸载失败的情况下fallback到本地卸载模式,提升握手性能;IETF QUIC使用QPACK的编解码流解决了GQUIC中请求Header存在的队头阻塞问题。线上会存在部分Header一直变化的情况,此时编解码流会持续发送对应Header的编码数据,消耗大量CPU资源,火山引擎采取不加入动态表的策略来节省资源消耗。
火山引擎QUIC-业务收益
目前,火山引擎QUIC已在各场景大规模上线,覆盖了抖音、飞书、头条、西瓜等APP,涉及实时通信、音视频、云游戏等多个领域,业务场景包括API、上传、点播、长连接等,日高峰QPS超过3000万,且还在不断增长。
ArchSummit全球架构师峰会为QUIC协议在网络通信领域的创新应用提供了一个重要的交流平台。通过这次峰会,行业专家们汇聚智慧,共同探讨QUIC 在各个业务场景的应用和优化。
火山引擎边缘云愿与社会各界伙伴共同努力,致力于探索网络通信领域的创新技术,并与行业共享最新的成果。通过技术分享与合作,满足用户日益增长的网络需求,助力产业蓬勃发展。关于火山引擎边缘云:火山引擎边缘云,以云原生技术为基础底座,融合异构算力和边缘网络,构建在大规模边缘基础设施之上的云计算服务,形成以边缘位置的计算、网络、存储、安全、智能为核心能力的新一代分布式云计算解决方案。