近日,快手自研高性能服务器kQUIC已全面上线,集群峰值QPS突破千万。kQUIC是快手结合自身业务特点,自研打造的支持QUIC/HTTP/HTTPS多协议同层接入的高性能服务器,在短视频场景下针对行业痛点做了针对性优化。
kQUIC是快手结合自身业务特点,自研打造的支持QUIC/HTTP/HTTPS多协议同层接入的高性能服务器,近日已经全量部署上线,峰值QPS突破千万,由此成为国内优先将QUIC应用于全量业务并取得稳定收益的互联网企业。据悉,kQUIC自19年上半年开始研发,年底灰度上线,20年6月峰值QPS突破千万,历时一年有余。kQUIC针对性地对数据压缩、网络传输拥塞控制等进行了优化,传输耗时平均降低10%以上,服务端处理性能提升了50%。
新一代互联网传输协议QUIC(Quick UDP Internet Connections)自Google制定发布后受到众多互联网大厂的关注和使用,QUIC是基于UDP的互联网传输协议,下一代HTTP/3协议标准也是从QUIC演进而来。
相比HTTP(s) 有几大优势:首先,QUIC在应用层实现了基于UDP的可靠传输,能够在使用多路复用机制的同时避免TCP的队首阻塞问题;其次,QUIC改进了握手机制,大部分场景下可以0-RTT建立安全链接进行数据加密发送;QUIC还同时设计了连接迁移的新特性,可以保证在用户的网络地址发生变化时,比如WIFI和4G切换,业务请求依然能够被继续处理,不需要重新发起请求;此外,QUIC的传输控制机制是在应用层处理的,相比TCP在内核中处理的方式更加灵活、更方便贴近业务场景做自定义优化,比如可以应用更先进的算法进行双端加速。
基于QUIC协议的突出优势,国内外企业纷纷试水相关研究,很多同行贡献了多种开源解决方案,但都不能完全满足快手短视频+直播业务的诸多特殊需求。因此,我们优化了用户体验,对QUIC协议栈进行了大量适配改造,首先采用了多项创新自研技术,成为了国内大规模全量使用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协议在全球的推广和优化。