国内首家,快手上线千万级 QPS QUIC 集群

  • 来源:网络
  • 更新日期:2020-07-14

摘要:头图 | CSDN 下载自东方 IC近日,快手自研高性能服务器 kQUIC 已全面上线,集群峰值 QPS 突破千万。kQUIC 是快手结合自身业务特点,自研打造的支持 QUIC/HTTP/HTTPS 多协议同层接

头图 | CSDN 下载自东方 IC

近日,快手自研高性能服务器 kQUIC 已全面上线,集群峰值 QPS 突破千万。kQUIC 是快手结合自身业务特点,自研打造的支持 QUIC/HTTP/HTTPS 多协议同层接入的高性能服务器,在短视频场景下针对行业痛点做了针对性优化。

kQUIC 是快手结合自身业务特点,自研打造的支持 QUIC/HTTP/HTTPS 多协议同层接入的高性能服务器,近日已经全量部署上线,峰值 QPS 突破千万,由此成为国内最先将 QUIC 应用于全量业务并取得稳定收益的互联网企业。据悉,kQUIC 自 19 年上半年开始研发,年底灰度上线,20 年 6 月峰值 QPS 突破千万,历时一年有余。kQUIC 针对性地对数据压缩、网络传输拥塞控制等进行了优化,传输耗时平均降低 10% 以上,服务端处理性能提升了 50%。

新一代互联网传输协议 QUIC(QuickUDP 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 协议在全球的推广和优化。