近日,快手自研高性能服务器kQUIC已全面上线,集群峰值QPS突破千万。kQUIC是快手结合自身业务特点,自研打造的支持QUIC/HTTP/HTTPS多协议同层接入的高性能服务器,在短视频场景下针对行业痛点做了系列优化,未来InfoQ记者还将就此话题进行深入采访,敬请关注。
据了解,kQUIC自19年上半年开始研发,年底灰度上线,20年6月峰值QPS突破千万,历时一年有余。kQUIC针对性地对数据压缩、网络传输拥塞控制等进行了优化,传输耗时平均降低10%以上,服务端处理性能提升了50%。
QUIC(Quick UDP Internet Connections)协议是谷歌制定发布的基于UDP的新一代互联网传输协定,下一代HTTP/3协议标准也是从QUIC演进而来,国内外众多互联网企业均有研究和使用实践。
QUIC相比HTTP(s) 有几大优势:
目前业界已有一些QUIC协议的通用开源解决方案,但对快手所处行业独特的短视频+直播业务的特性而言,都存在一定的短板。为此,快手选择了自研,对QUIC协议栈进行大量适配改造以满足业务诉求和用户体验。
下图为服务端方案整体架构,从Nginx内核集成QUIC协议栈,实现多协议同层接入,到Linux内核优化UDP报文管理,实现性能提升。
自研升级Nginx内核,支持多协议接入:目前,业界普遍大规模使用了Nginx作为7层的接入服务器,但Nginx尚不支持QUIC协议。快手自研升级Nginx内核,在Nginx内核里嵌入了QUIC协议栈,完成了Nginx和QUIC的有机融合,不管是HTTP/HTTPS还是QUIC,都能使用Nginx原生的所有处理逻辑,保留全部业务逻辑处理功能的同时可以灵活升级Nginx和Chromium版本,并进行了一系列的针对性优化,性能提升了50%。
无损的配置热更新:Nginx的配置热更新机制不能支持UDP业务的配置无损更新,为此调研了改造应用层和改造内核两种实现路径,最终实现了基于内核session映射表的配置无损热更新机制。相比在应用层改造Nginx的方案而言,本方案既不需要改造Nginx的UDP收发机制,又充分保留了在UDP socket上使用sendmmsg和gso的能力,可以减少发送UDP报文的开销,提升性能。
自研全新网络拥塞控制算法:网络拥塞控制算法直接影响着网络传输的性能,与用户请求的成功率、响应时间等有非常大的关系。业界默认采用的cubic、bbr等算法,在大规模用户与复杂的网络环境面前,存在很多问题。快手设计了一套全新的拥塞控制算法IA2C,替换默认算法,在弱网环境下,提升明显。
统一的客户端网络库:对QUIC协议的支持是需要客户端和服务端统一设计的,很多优化也需要双端配合,快手客户端网络库的设计也采用了新的办法。区别于一般APP使用开源网络库OKHTTP和AFNetwork,无法支持跨平台的做法,快手网络库在设计之初就把跨平台作为一个重要的目标,完全采用C++编写,不仅为快手主站的双端提供统一的网络优化解决方案,还通过中台输出统一了各个新业务的网络接入层,为快手系产品持续全面的网络优化提供了有力保障。
接入层统一单层架构和稳定保障:快手最早采用了QUIC代理和应用网关分离的多层架构,存在运维成本、资源成本以及稳定性成本增加的问题,为此技术团队对架构做了大幅简化,采用QUIC/HTTP/HTTPS同层接入方案,同时特别制定了从压测到实验、从线上小流量灰度再到线上逐步全量加容灾集群建设的方案。在降低各项成本的同时,充分保证了系统稳定性,实现了线上用户千万量级请求的稳定接入。
数据驱动的迭代放量策略:快手的相关服务上线放量需要有严格的数据指标衡量,快手技术团队构建了完善的服务端、客户端性能指标体系和监控看板,设计了科学的A/B测试方案,配合专业的实验室测试方法,可以科学地论证架构改进和算法收益,制定放量策略,支持项目快速的迭代优化和稳健上线。在整个大规模上线过程中,没有出现一次影响用户的事故。
快手kQUIC服务端技术负责人沈坤表示,kQUIC是快手在探索先进的标准协议并进行大规模优化过程中取得的重要成果,目前已经取得了良好的业务收益,客户端实验反馈显示,QoE和QoS指标都取得了显著收益,未来在适当时机将对行业开源,为行业提供丰富的应用实践经验参考,支持QUIC协议在全球的推广和优化。
领取专属 10元无门槛券
私享最新 技术干货